是什么导致 Nginx 服务器上出现此错误 – 502 Bad gateway

是什么导致 Nginx 服务器上出现此错误 – 502 Bad gateway

我在 nginx 服务器上用 Drupal 7 构建了一个网站。每周有几次,当我编辑任何内容并按下“保存”时,或者当我登录网站时,或者当我更改某些配置时,我都会看到一个白屏,上面显示“502 Bad gateway”消息。该错误永远不会显示给匿名访问者,只有在登录并保存更改时才会显示。我做了什么样的更改似乎并不重要。我可以按浏览器中的后退按钮,这会将我带回到编辑屏幕,然后再次按“保存”,并成功保存更改。

今天早上 08:09 再次发生错误,因此我查看了 PHP 日志:

2016/10/20 08:09:00 [error] 20703#20703: *3297348 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 195.198.76.66, server: www.example.com, request: "POST /node/88/edit HTTP/1.1", upstream: "fastcgi://unix:/run/php/php-fpm.sock:", host: "www.example.com", referrer: "http://www.example.com/node/88/edit"

以下是同一时刻的 nginx 日志:

[20-Oct-2016 08:09:00] WARNING: [pool www0] child 10909, script '/srv/www/example/public_html/index.php' (request: "POST /index.php") execution timed out (8189.954999 sec), terminating
[20-Oct-2016 08:09:00] WARNING: [pool www0] child 10909 exited on signal 15 (SIGTERM) after 19080.476683 seconds from start
[20-Oct-2016 08:09:00] NOTICE: [pool www0] child 13002 started

有人能看到这里发生了什么吗?

答案1

我在使用 nginx 和 php-fpm 的设置中遇到了 HTTP 502 问题。似乎必须根据数据传输时间修改许多超时和限制。在这种情况下发生的原因是 keepalive 超时太短。

以下一些设置可能有助于解决 502 问题:

  • 在 nginx.conf 中:keepalive_timeout
  • 在站点的配置文件中(位于sites-available文件夹中):
    • send_timeout
    • fastcgi_connect_timeout
    • fastcgi_send_timeout
    • fastcgi_read_timeout
  • php.ini
    • max_execution_time
    • max_input_time

问题的真正根源可能是这些设置中的任何一个。

答案2

值得检查您的 Drupal 日志以获取更多信息。听起来您有一个模块正在触发一个需要很长时间才能完成的脚本。考虑到它发生在您以管理员身份登录时,可能是 cron 需要很长时间才能完成。

尝试手动触发 cron 查看是否发生错误,然后检查 drupal/nginx 日志。

您可以更改 php.ini 配置中 php-fpm 的 max_execution_time 值,尽管这可能只会掩盖问题并起到快速修复的作用。您最好找到 Drupal 中发生的问题并尝试解决它。

答案3

每当我使用 nginx 时遇到 502 错误,90% 的情况都与 php-fpm 有关

尝试重现该问题--tail php-fpm 日志并查看是否需要进行调整。

相关内容