java-web - Tomcat+Nginx实现动静分离的功能,动态请求为什么没有发到Tomcat这里?(已解决)
大家讲道理
大家讲道理 2017-05-16 17:15:39
[Linux讨论组]

问题

RT
因为最近想学习一下Nginx服务器,就想搭建一个Tomcat+Nginx,简单的实现动静分离的功能。

具体代码和配置

版本

  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

Tomcat配置(/conf/server.xml)





  
  
  
  
  
  
  
  

  
  
    
    
  
  
    

    

    

      
        
      

      

            
        
        

      
    
  

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;

    }
}

测试

  1. 通过Tomcat,请求url:http://test.nt.springmvc.com:...

  2. 通过Nginx,请求url:http://test.nt.springmvc.com/

  3. 通过Nginx,请求url:http://test.nt.springmvc.com/...

  4. 通过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 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

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
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;

    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号