首页 > 解决方案 > nginx - 在从上游读取响应标头时,上游发送了太大的标头

问题描述

我有一个用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;
  }
} 

标签: pythonlinuxnginxflasknginx-config

解决方案


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

这是我的帖子,对类似指令有一些见解,proxy_buffer_size. 有许多*_buffer_size指令,每个类似“代理”的 NGINX 模块都有一个(fastcgi、proxy、uwsgi),但是您如何进行调优(以及它们的基本工作方式)是相同的。

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

uwsgi_buffer_size 16k; 
uwsgi_busy_buffers_size 24k; 

推荐阅读