我的服务器 A 上有以下 nginx 设置(面向互联网,仅相关部分):
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 Bad Request Request Header Or Cookie Too Large”。即使卷曲没有饼干和只有两个短标题。增加large_client_header_buffers
没有帮助。
有趣的是,我根本没有看到这个请求到达服务器 B,所以它在服务器 A 上被切断。为什么?难道是因为https
我要代理传递的协议?
另外,在设置服务器 A 之前,所有内容都将传输到服务器 B,没有任何问题。
事实证明,域解析存在一些混淆(我不太明白),因此对服务器 B 的请求被传递到服务器 A。它不断地添加自己的IPX-Forwarded-For
标头,直到超过最大大小 - 所以错误消息实际上是正确的。
为了进一步调试,我使用了
tcpdump -n -S -s 0 -A 'tcp dst port 80' | grep -B3 -A10 "GET"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)