• Nginx反向代理tomcat返回400 bad request


    Nginx反向代理tomcat返回400 bad request

    nginx 版本1.12, tomcat版本 9.06

    最近用Nginx做反向代理tomcat,实现前后端分离,nginx 将请求代理到tomcat服务始终返回400 bad request,如果直接访问tomcat服务则一点问题没有(测试中,tomcat本身端口对外开放).

    配置如下:

    nginx.conf

     #配置一个代理即tomcat1服务器  
            upstream tomcat_server1{  
                server localhost:8080;  
            }  
    
    server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/MyXzmBlog;
            charset      utf-8;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
            
            location ^~ /app/ {
                        #端口80的请求全部转发到tomcat_server1即tomcat1服务上  
                         proxy_pass http://tomcat_server1;
                         proxy_http_version 1.1; 
                         proxy_set_header Connection "";
            # }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        } 

    查看了tomcat访问日志:

    1.   127.0.0.1 - - [15/Mar/2018:09:33:57 +0800] "GET /app/headlines HTTP/1.1" 400 1126
    2.   221.232.135.233 - - [15/Mar/2018:09:34:16 +0800] "GET /app/homeCategory?id=4 HTTP/1.1" 200 10910

    其中第一条是nginx反向代理的返回400,第二条是直接访问tomcat服务则正常.

    一开始是怀疑tomcat配置引擎不支持本机地址访问,在服务器端用http命令行访问也无问题。

    后来分析了tomcat错误原因:

    The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

    貌似nginx是访问请求格式问题。

     尝试在代理请求头上加入该配置:

    proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 

    location / {
    #端口80的请求全部转发到tomcat_server1即tomcat1服务上 
    proxy_pass http://tomcat_server1;
    proxy_http_version 1.1; 
    proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 
    }
    

      访问ok,但是还是没弄清楚具体原因。

  • 相关阅读:
    [HDU 2089]不要62
    [WC 2011]Xor
    [BJOI 2011]元素
    [NOIp 2014]解方程
    [UVa 1326]Jurassic Remains
    [BZOJ 2152]聪聪可可
    [IOI 2011]Race
    [测试题]打地鼠
    [POJ 2828]Buy Tickets
    [测试题]gene
  • 原文地址:https://www.cnblogs.com/xuzimian/p/8575311.html
Copyright © 2020-2023  润新知