我使用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网关错误。
希望这会让某人感到沮丧!
答案 0 :(得分:3)
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的
答案 1 :(得分:0)
我在运行iis和php的Windows机器上遇到了这种问题,因此它不仅仅是一个nix问题。
罪魁祸首也是php记录。您不必将其设置为静态目录,但如果您授予适当的权限,它可以写入脚本所在的同一目录。(如果您有一个庞大而复杂的站点,则会非常有用)
我的服务器是以这种方式设置的,我刚刚添加了一条规则,不向公众提供错误日志。
总结一下,检查权限! =)
答案 2 :(得分:0)
我有类似的问题通过禁用PHP警告解决,但是,我认为该问题与错误记录使用的缓冲区的NGINX配置有关。该错误仅在一定数量的警告消息排队后触发,并且似乎可以预测可重复;但我无法弄清楚涉及哪些设置,所以关闭警告,直到我可以解决被破坏的设置。
答案 3 :(得分:0)
如果上述步骤无法帮助您解决问题,请检查您是否启用了eaccelerator。
通过在php.ini或php.d / eaccelerator.ini中禁用load .so条目来全局禁用它
所有问题都消失了。似乎加速器在某些情况下与php-fpm组合失败。