nginx - 上游发送太大 header 从上游读取响应 header

nginx - upstream sent too big header while reading response header from upstream

我有一个用 python 和 flask 框架编写的 e-commerce 项目,当我尝试将产品添加到 session 时,我将购物车信息保存在 session,nginx给出此错误:

upstream sent too big header while reading response header from upstream, client: xx.xxx.xx.xxx, server: mysite.com, request: "POST /add_to_cart HTTP/1.1", upstream: "uwsgi://unix:/path/uwsgi.sock:", host: "mysite.com"

当我在 session,

中有很多信息时会出现这种情况

我尝试添加 fastcgiproxy_buffer 参数,但仍然无法正常工作,这是我的 nginx 配置文件:

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;
  }
} 

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

这是我的 post 对类似指令 proxy_buffer_size 的一些见解。有许多 *_buffer_size 指令,每个 "proxy"-like NGINX 模块都有一个(fastcgi、proxy、uwsgi),但是你如何调整它们(以及它们的基本工作方式)是相同的。

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

uwsgi_buffer_size 16k; 
uwsgi_busy_buffers_size 24k;