Nginx反向代理tomcat返回400 bad request

Nginx反向代理tomcat返回400 bad requesthtml

 

nginx 版本1.12, tomcat版本 9.06nginx

最近用Nginx作反向代理tomcat,實現先後端分離,nginx 將請求代理到tomcat服務始終返回400 bad request,若是直接訪問tomcat服務則一點問題沒有(測試中,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訪問日誌:app

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,可是仍是沒弄清楚具體緣由。

相關文章
相關標籤/搜索