解决php 502报错的终极奥义
通过多开php-fpm、nginx限流、定时重启三招结合可以彻底解决php502报错的问题。
第一步 多开php-fpm
1.1修改php-fpm.conf
内容如下:
[global]
pid = run/php-fpm.pid
error_log = /root/php.log
log_level = notice
[www]
listen = 127.0.0.1:9000
listen.backlog = 4096
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 60
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 30
pm.max_requests = 2000
request_terminate_timeout = 60s
php_admin_value[memory_limit] = 128M
1.2复制一份conf文件在同目录下,php-fpm2.conf
内容如下:
[global]
pid = run/php-fpm2.pid
error_log = /root/php.log
log_level = notice
[www]
listen = 127.0.0.1:9002
listen.backlog = 4096
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 60
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 30
pm.max_requests = 2000
request_terminate_timeout = 60s
php_admin_value[memory_limit] = 128M
1.3进入/etc/init.d/,复制一份php-fpm2
关键内容修改如下:
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm2.conf
php_fpm_PID=${prefix}/var/run/php-fpm2.pid
1.4修改nginx的http部分
内容如下:
upstream backend
{
server 127.0.0.1:9000;
server 127.0.0.1:9002;
}
1.5修改nginx的php部分
内容如下:
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass backend;
fastcgi_index index.php;
include fastcgi.conf;
}
1.6设置php-fpm2开机启动
chkconfig php-fpm2 on
第二部分 nginx限流
2.1修改nginx的http部分
内容如下:
limit_conn_zone $binary_remote_addr zone=one1:10m;
limit_req_zone $binary_remote_addr zone=one2:10m rate=20r/s;
2.2修改nginx的server部分
内容如下:
limit_conn one1 5;
limit_req zone=one2 burst=50 nodelay;
2.3重启nginx
第三部分 定时重启
3.1 在/sbin/目录新建 cq
内容如下:
#/bin/bash
/etc/init.d/nginx restart
/etc/init.d/php-fpm restart
/etc/init.d/mysql restart
/etc/init.d/php-fpm2 restart
3.2在/sbin/目录下新建cq2
内容如下:
#/bin/sh
/etc/init.d/nginx reload
/etc/init.d/php-fpm reload
sleep 1
/etc/init.d/php-fpm2 reload
echo 123 > /root/1.txt
3.3设置执行权限
chmod +x /sbin/*
cq命令是重启nginx+php+mysql
cq2命令是平滑重启nginx+php (用于定时平滑重启)
3.4设置每分钟平滑重启
crontab -e
内容如下:
* * * * * /sbin/cq2
:wq保存
至此全部操作完毕,从此再不出现php502错误,不明白的可以私信我。