ubuntu - nginx php-fpm 和 ubuntu 的随机 502 网关错误

标签 ubuntu nginx php

我在使用 nginx 和 php-fpm 时遇到随机 502 网关错误的问题。在我的案例中,我发现了一个场景,其中各种 php.ini error_log 设置和 error_reporting 级别导致出现随机 502 网关错误。

通过更改 php.ini 设置 error_reporting 和 error_log,我能够使 502 网关错误消失 - 但更重要的是,我能够在日志中看到真正的 php 错误并修复它们。

主要问题是,如果“error_reporting 设置为显示通知”,“error_logging = On”,那么我需要确保将 error_log 设置为服务器可写的有效路径。

// !!! 502 Gateway Error (unhappy server)
error_reporting = E_ALL & E_NOTICE
; error_log = php_errors.log (note this is commented)

// Happy Server, no 502 gateway error
error_reporting = E_ALL & E_NOTICE
error_log = /valid/log/path/and/permissions

// Happy Server, no 502 gateway error
error_reporting = E_CORE_ERROR
; error_log = php_errors.log (note this is commented)

请注意,实际错误是 php 通知...但是 ngingx 为与未设置的属性相关的 php 通知抛出 502 网关错误。

另请注意,并不是每个 php 通知都会触发 502 网关错误。

希望这可以避免一些人的挫败感!

最佳答案

Nginx 中的 502 网关错误是由 php-fpm 没有足够的进程和/或超时引起的。日志记录只会告诉您问题是什么,而不是 502 错误的原因。

我在 25 台服务器上使用 stunnel+haproxy+nginx+php-fpm。 pfp-fpm 中的默认值非常低,即使对于中等繁忙的服务器也是如此。配置 fpm 子进程的方式与使用 apache mod_php 的方式大致相同。

我使用以下内容:

pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers =10
pm.max_spare_servers = 20
pm.max_requests = 1500

这是一台 2GB 内存的服务器。它每天提供 20-30GB 的流量,没有 502 的

关于ubuntu - nginx php-fpm 和 ubuntu 的随机 502 网关错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540834/

相关文章:

vim - 切换选项卡或导航行时,Ubuntu 中的 gVim 很慢

ubuntu - grep 子目录并保存多个输出

.htaccess - 如何使 Zend Framework 2 与 nginx 一起工作?

nginx - 使用 Istio 在两个 pod 之间进行简单的 http 请求

php - Laravel 路线不适用于生产

php - Datatables 列中的 MySQL 循环

ubuntu - Wine: <directory> 不属于你,拒绝在那里创建配置目录

python - 更改 mininet 主机中的主机名

asp.net - Mono 2.11 与 nginx 或 apache

php - mysql对查询的限制