nginx 中使用 proxy_pass 出现“请求标头或 Cookie 太大”

2024-01-24

我的服务器 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(使用前将#替换为@)

nginx 中使用 proxy_pass 出现“请求标头或 Cookie 太大” 的相关文章

随机推荐