我在使用nginx的和PHP-FPM随机502网关错误的问题。 以我为例,我发现这里的各种php.ini中的error_log设置和使用error_reporting水平造成随机502网关错误出现的场景。
通过改变php.ini设置使用error_reporting和error_log中,我能够做出502网关错误消失 - 但更重要的是我能看到什么真正的PHP错误在日志中,并解决这些问题。
主要的问题是,如果“使用error_reporting设置为张贴告示,‘error_logging =开’然后我需要确保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被扔502网关错误行为均与未设置属性PHP的通知。
还要注意,没有被触发的每一个PHP通知502网关错误。
希望这样可以节省别人有些无奈!
在Nginx的502网关错误是由PHP-FPM造成没有足够的处理和/或超时。 只有登录告诉你什么的问题,并没有502错误的原因。
我用安全通道+ +的haproxy nginx的+ PHP-FPM的25台服务器。 在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的
我所以它不只是一个尼克斯的问题上运行的FastCGI的模式IIS和PHP的Windows机器运行到这一点。
罪魁祸首是PHP的日志记录以及。 你不必把它设置为静态目录但如果您授予适当的权限就可以写脚本驻留在同一个目录(可以是非常有益的,如果你有一个庞大而复杂的网站)
我的服务器是建立这样的,我只是增加了一个规则并未担任错误日志给公众。
概括起来,检查权限! =)
我有一个通过禁用PHP警告解决类似的问题,不过,我认为这个问题有事情做与该错误日志使用缓冲区NGINX配置。 该错误只触发警告消息一定数量后进行排队,并似乎是相当可预见的重复; 但我不能找出设置所涉各方已关闭的警告,直到我可以解决被破坏的设置。
如果上述步骤没有帮助您解决您的问题,请检查您是否启用eAccelerator在。
在任何你的php.ini禁止负载。所以进入或php.d / eaccelerator.ini全局禁用它
所有的问题都没有了。 好像accellerator在用php-fpm的组合,某些情况下失败。