Nginx反向代理tomcat返回400 bad request

时间:18-10-12 来源: 作者: 点击:

Nginx反向代理tomcat返回400 bad request Posted on

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 ; 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 ; proxy_http_version 1.1; proxy_set_header Host $host; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP }

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

声明:本文由(Nginx运维与架构)版权所有,禁止转载,文章链接:http://www.nd9p.com/11429.html