错误提示原因分析:
解决这两个问题其实是需要综合思考的,一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关,
而Nginx 504 Gateway Time-out则是与nginx.conf的设置有关。
php-fpm.conf有两个至关重要的参数,一个是”max_children”,另一个是”request_terminate_timeout” ,但是这个值不是通用的,而是需要自己计算的。
方法一,临时解决办法:
综上所述,Nginx提示502和504错误的临时解决办法是:
1、调整php-fpm.conf的相关设置:
代码如下 | 复制代码 |
<value name=”max_children”>32</value> <value name=”request_terminate_timeout”>30s</value> |
2、调整nginx.conf的相关设置:
代码如下 | 复制代码 |
fastcgi_connect_timeout 600; fastcgi_send_timeout 600; fastcgi_read_timeout 600; fastcgi_buffer_size 256k; fastcgi_buffers 16 256k; fastcgi_busy_buffers_size 512k; fastcgi_temp_file_write_size 512k; |
方法二,定时重启php-fpm:
标题3中所示的解决方案只能临时解决问题,而如果网站的访问量确实非常非常大,而Nginx+FastCGI只能对处理瞬间或短时间内的高并发有很好的效果,所以目前唯一的终极解决方案是:定时平滑重启php-cgi。
具体配置如下:
1、写一个非常简单的脚本:
代码如下 | 复制代码 |
#vi /home/www/scripts/php-fpm.sh 内容如下: #!/bin/bash # This script run at */1 /usr/local/php/sbin/php-fpm reload |
2、将脚本添加至计划任务:
代码如下 | 复制代码 |
#crontab -e 内容如下: */1 * * * * /home/www/scripts/php-fpm.sh |
注:为了省事起见,也可以不写脚本,直接在crontab里写入php-fpm的平滑重启命令。
时间: 2024-10-22 07:22:41