Rumah  >  Soal Jawab  >  teks badan

java-web - Tomcat+Nginx melaksanakan fungsi pemisahan dinamik dan statik Mengapa permintaan dinamik tidak dihantar kepada Tomcat? (diselesaikan)

Soalan

RT
Oleh kerana saya ingin mempelajari pelayan Nginx baru-baru ini, saya ingin membina Tomcat+Nginx untuk merealisasikan fungsi pemisahan dinamik dan statik.

Kod dan konfigurasi terperinci

Versi

  1. Ubuntu:ubuntu-16.04-desktop-amd64

  2. JDK: jdk1.8.0_101

  3. Tomcat: apache-tomcat-8.5.4

  4. Nginx:nginx/1.10.0

  5. ubuntu ip:192.168.182.129

Konfigurasi Tomcat (/conf/server.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- Note:  A "Server" is not itself a "Container", so you may not
     define subcomponents such as "Valves" at this level.
     Documentation at /docs/config/server.html
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="test.nt.springmvc.com"  appBase="webapps/springmvc"
            unpackWARs="true" autoDeploy="true">

        <Context path="/springmvc"  docBase="springmvc.war"/>    
        
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

Konfigurasi Nginx (/nginx/sites-available/default)

upstream tomcat {   
 server 192.168.182.129:8080;   
} 


server {
    listen 80 default_server;
    listen [::]:80 ;

    root /opt/apache-tomcat-8.5.4/webapps/springmvc;

    #server_name _;
    server_name test.nt.springmvc.com;

    location /{
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat;
        try_files $uri $uri/ =404;

    }
}

Ujian

  1. Melalui Tomcat, minta url: http://test.nt.springmvc.com:...

  2. Melalui Nginx, minta url: http://test.nt.springmvc.com/

  3. Melalui Nginx, minta url: http://test.nt.springmvc.com/...

  4. Melalui Nginx, minta url: http://test.nt.springmvc.com/...

log kucing jantan

192.168.182.129 - - [28/Jul/2016:15:11:36 +0800] "GET /springmvc/test/ HTTP/1.1" 200 106
192.168.182.129 - - [28/Jul/2016:15:12:40 +0800] "GET / HTTP/1.0" 404 -
192.168.182.129 - - [28/Jul/2016:15:13:05 +0800] "GET /springmvc HTTP/1.0" 302 -
192.168.182.129 - - [28/Jul/2016:15:13:05 +0800] "GET /springmvc/ HTTP/1.0" 404 990

Log Nginx

192.168.182.129 - - [28/Jul/2016:15:12:40 +0800] "GET / HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.182.129 - - [28/Jul/2016:15:13:05 +0800] "GET /springmvc HTTP/1.1" 302 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.182.129 - - [28/Jul/2016:15:13:05 +0800] "GET /springmvc/ HTTP/1.1" 404 441 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
192.168.182.129 - - [28/Jul/2016:15:13:37 +0800] "GET /springmvc/test HTTP/1.1" 404 152 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"

Seperti yang anda lihat dari log, permintaan keempat saya tidak dimajukan kepada Tomcat. Saya mencari banyak dokumen di Internet dan tidak dapat mencari di mana masalah itu berlaku. Di bawah ialah halaman web yang sepadan




Penyelesaian

Konfigurasi Nginx (/nginx/sites-available/default)

upstream tomcat {   
 server 192.168.182.129:8080;   
} 

server {
    listen 80 default_server;
    listen [::]:80 ;

    root /opt/apache-tomcat-8.5.4/webapps/springmvc;

    server_name test.nt.springmvc.com;

    location / {
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat;
        #try_files $uri $uri/ =404;
    }
}

Anda boleh melihat bahawa dalam fail konfigurasi nginx, komen try_files $uri $uri/ =404 dan anda boleh mengaksesnya seperti biasa

cuba_fail

try_files pada nginx menentukan sama ada fail itu wujud

$uri

Merujuk kepada fail dan laluan yang diminta, tidak termasuk perkara selepas "?" atau "#"
$request_uri: /stat.php?id=1585378&web_id=1585378
$uri /stat.php
$document_uri: /stat php

大家讲道理大家讲道理2713 hari yang lalu728

membalas semua(1)saya akan balas

  • PHP中文网

    PHP中文网2017-05-16 17:17:39

    upstream tomcat {   
     server 192.168.182.129:8080;   
    } 
    
    
    server {
        listen 80 default_server;
        listen [::]:80 ;
    
        root /opt/apache-tomcat-8.5.4/webapps/springmvc;  #**(这行拿掉)**
    
        #server_name _;
        server_name test.nt.springmvc.com;
    
        location /{  # location / { 斜杠后面加空格
            proxy_set_header        Host $host;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat;
            try_files $uri $uri/ =404;
    
        }
    }

    balas
    0
  • Batalbalas