【nginx】Tomcat+Nginx实现动静分离的功能,动态请求为什么没有发到Tomcat这里?(已解决)
问题
RT
因为最近想学习一下Nginx服务器,就想搭建一个Tomcat+Nginx,简单的实现动静分离的功能。
具体代码和配置
版本
Ubuntu:ubuntu-16.04-desktop-amd64
JDK:jdk1.8.0_101
Tomcat:apache-tomcat-8.5.4
Nginx:nginx/1.10.0
ubuntu ip:192.168.182.129
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 "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
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;
}
}
测试
通过Tomcat,请求url:http://test.nt.springmvc.com:...
通过Nginx,请求url:http://test.nt.springmvc.com/
通过Nginx,请求url:http://test.nt.springmvc.com/...
通过Nginx,请求url:http://test.nt.springmvc.com/...
tomcat日志
192.168.182.129 - - [28/Jul/2016:15:11:36 +0800] "GET /springmvc/test/ HTTP/1.1" 200 106192.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
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"
通过日志可以看到,我第四次的请求并没有转发到Tomcat这里,找了网上好多文档,都没有发现是哪里出现的问题。下面是对应的网页
解决方法
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;
}
}
可以看到在nginx的配置文件中,将try_files $uri $uri/ =404注解掉就可以正常访问了
try_files
nginx上try_files 判断文件是否存在
$uri
指的是请求的文件和路径,不包括“?”或者“#”之后的东西
$request_uri: /stat.php?id=1585378&web_id=1585378
$uri /stat.php
$document_uri: /stat.php
回答
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;
}
}
以上是 【nginx】Tomcat+Nginx实现动静分离的功能,动态请求为什么没有发到Tomcat这里?(已解决) 的全部内容, 来源链接: utcz.com/a/85640.html