标签归档:Nginx

Nginx缓冲区溢出

前两天遇到个奇怪的问题,一位用户访问墨水后台报错502,但其他用户访问却正常,找了半天都没找到原因。后来翻看了Nginx日志,错误内容如下:

2023/05/30 14:50:57 [error] 1930#0: *93 upstream sent too big header while reading response header from upstream, client: 125.46.235.179, server: yu.ink, request: "GET /wp-admin/profile.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-73-cgi.sock:", host: "yu.ink", referrer: "https://yu.ink/wg9525541228/"

记录时间:2023年5月30日14:50:57,客户端IP地址为125.46.235.179向yu.ink服务器发送了一个GET请求,目标URL是/wp-admin/profile.php,这是WordPress后台的一个用户配置文件页面。服务器在处理这个请求时遇到了错误,错误信息为“upstream sent too big header while reading response header from upstream”。这个错误意味着服务器在从上游(这里的FastCGI PHP进程)读取响应头时,收到了过大的头信息。在Nginx服务器中,如果收到的FastCGI响应头大小超过了缓冲区的大小,就会发生这种错误。为了解决这个问题,可以增大fastcgi_buffer_sizefastcgi_buffers的值。

为解决这个问题,可以在Nginx配置文件中的location ~ \.php(.*)$块内增加或修改这两个参数,增大它们的值。例如:

location ~ \.php(.*)$ {
    fastcgi_pass  unix:/tmp/php-73-cgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $DOCUMENT_ROOT$fastcgi_script_name;
    fastcgi_param PATH_INFO $2;
    fastcgi_buffer_size 128k;  # 增加或修改这行
    fastcgi_buffers 4 256k;    # 增加或修改这行
    include fcgi.conf;
}

在这个例子中,我设置了fastcgi_buffer_size为128k,fastcgi_buffers为4个256k。这只是一个例子,您可能需要根据您的应用和服务器的性能来调整这些值。

最后,记得在修改配置文件后,需要重新加载或重启Nginx服务以使更改生效。

请注意,过大的缓冲区可能会浪费服务器资源,过小的缓冲区则可能导致错误,因此请根据实际需要进行调整。