nginx - 从上游读取响应标头时上游发送了太大的标头

kak*_*jan 0 python linux nginx flask nginx-config

我有一个用python和flask框架编写的电子商务项目,我在会话中保存购物车信息,当我尝试将产品添加到会话时,nginx给出了这个错误:

从上游读取响应标头时,上游发送了太大的标头,客户端:xx.xxx.xx.xxx,服务器:mysite.com,请求:“POST /add_to_cart HTTP/1.1”,上游:“uwsgi://unix:/path /uwsgi.sock:”,主机:“mysite.com”

当我在会话中有大量信息时会发生这种情况,

我尝试添加fastcgiproxy_buffer参数,但仍然不起作用,这是我的 nginx conf 文件:

server {
  listen       443 ssl;
  server_name  mysite.com;

  ssl_certificate       /path/nginx.pem;
  ssl_certificate_key   /path/nginx.key;

  include              /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam          /etc/letsencrypt/ssl-dhparams.pem;

  access_log      /path/access.log main;

  fastcgi_buffers  16 16k;
  fastcgi_buffer_size 32k;

  proxy_buffering             on;
  proxy_buffer_size         128k;
  proxy_buffers           4 256k;
  proxy_busy_buffers_size   256k;

  location /static/ {
    alias         /path/web/static/;
    access_log    off;
    index         index.html index.htm;
  }

  location / {
    try_files       $uri @uwsgi;
    root            /path/www/;
    index           index.html index.htm;    
  }

  location @uwsgi {
    include uwsgi_params;
    uwsgi_pass  unix:/path/web/uwsgi.sock;
  }
} 
Run Code Online (Sandbox Code Playgroud)

Dan*_*nin 5

如果您能够POST通过curl或以其他方式测量实际标头大小来重建准确的请求,则可以为uwsgi_buffer_size(与您的情况相关的指令)指定正确的大小。

这是我的帖子,其中对类似的指令有一些见解proxy_buffer_size。有很多*_buffer_size指令,每个类似“代理”的 NGINX 模块都有一个(fastcgi、proxy、uwsgi),但是如何调整它们(以及它们本质上如何工作)是相同的。

您可以尝试直接放置在server块中,无需测量:

uwsgi_buffer_size 16k; 
uwsgi_busy_buffers_size 24k; 
Run Code Online (Sandbox Code Playgroud)