最近VPS总是出现 Nginx 502 Bad Gateway 错误,导致网页无法正常访问,但FTP和SSH正常连接,很是伤脑筋!这次好好整治一下!
根据问题,应该是 php-fpm 出了问题,先查看日志文件 /usr/local/php/logs/php-fpm.log
1 | [25-Sep-2017 14:13:42] WARNING: [pool www] child 4467 exited on signal 15 (SIGTERM) after 344743.168205 seconds from start |
满眼的NOTICE错误,据观察至后几天,错误日志都是如此!据网络资料分析说,这类错误大都是由于php线程打开文件句柄受限导致的错误,这里综合各位童鞋的分析,整理记录如下,希望能解决此类 502 问题!
首先检查一下ulimit -n的值,SSH输入命令:
1 | ulimit -n |
返回:65535
- 提升服务器的文件句柄打开
SSH命令:# vi /etc/security/limits.conf,在结尾处添加以下内容:
1 | * soft nofile 65535 |
- 提升nginx的进程文件打开数
vi /usr/local/nginx/conf/nginx.conf
查看
1 | worker_rlimit_nofile 51200; |
- 修改 php-fpm.conf 配置文件
前面确认了 ulimit -n 值为 65535,/usr/local/php/etc/php-fpm.conf 中的选项 rlimit_files 确保和此数值一致。
1 | pm.max_requests = 10240 |
- 修改 sysctl.conf
vi /etc/sysctl.conf
底部添加
1 | fs.file-max=65535 |
至此,重启 /root/lnmp restart 生效,看看还有没有类似错误信息出现!
ps.为减小php-fpm.log文件大小,可将 /usr/local/php/etc/php-fpm.conf 中的 Log level 由 notice 修改为 ERROR,这样能降低日志的生成速度!
1 | log_level = ERROR |