nginx配置反向代理或跳转出现400问题

今天在使用Nginx做反向代理出现了400 Bad Request Request Header Or Cookie Too Large这个问题,很多人说Nginx配置不对等等,

1
2
3
4
server_names_hash_bucket_size 128;
client_header_buffer_size 16k;
large_client_header_buffers 4 4k;
client_max_body_size 1024m;

这几个配置是都有的,所以肯定不是这个原因,因为只加了一个反向代理,所以其他地方应该没有问题,参考网友的解决方案,应该是造成了死循环引起的。

参考一

应该是nginx在使用proxy_pass做跳转时,如果直接使用域名,且需要向后端提交当前访问的IP地址时,引发nginx的bug造成死循环。

参考二

也可以尝试添加host为反向代理的地址。

www.jyall.com 域名 proxy_pass 到 https://jiaju.jyall.me/latestrelease 的url。 jiaju.jyall.me 是 apirouter 带请求头 “www.jyall.com" 又去请求 www.jyall.com 这个域名,造成死循环。

解决方案如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server{

server www.jyall.com;



location /latestrelease {

proxy_set_header Host "jiaju.jyall.me";

proxy_set_header X-Real-IP $remote_addr;

proxy_pass https://jiaju.jyall.me/latestrelease;

}

}

再次 proxy_pass 到 jiaju.jyall.me 请求的时候应该为 jiaju.jyall.me 而不是 www.jyall.com 的头。

这个问题还是比较懵懂,需要继续考证。

参考

nginx配置反向代理或跳转出现400问题处理记录
018_nginx_proxy死循环问题