我在服务器上有以下NGINX设置(Internet面对,仅相关部分):
upstream new_api {
server unix:///home/ubuntu/new_api/shared/tmp/sockets/puma.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
large_client_header_buffers 4 16k;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/cert.key;
location ~ (^(/some/location|/some/other)) {
proxy_pass http://new_api;
}
location / {
proxy_pass https://serverB.com;
}
}
现在,如果我转到/some/location
,则可以与上游新的API一起使用。但是,有了其他任何东西,我一直从Nginx获得" 400不良请求标头或cookie太大"。即使卷发没有饼干,只有两个短标题。增加large_client_header_buffers
无济于事。
有趣的部分是我根本看不到此请求到服务器B,因此在服务器A上被切断了。为什么?可以是因为https
协议,我要拿到?
另外,在设置服务器之前,所有问题都将毫无问题。
事实证明,有一些与域分辨率的混音(我真的不理解),因此,对服务器B的请求传递给服务器A。它一直将自己的IP添加到X-Forwarded-For
标题,直到超过最大大小为止 - 因此错误消息实际上是正确的。
要进一步调试,我使用了
tcpdump -n -S -s 0 -A 'tcp dst port 80' | grep -B3 -A10 "GET"