LNMP出现502错误的定位与修复指南
一、快速判断与定位
ps -ef | grep php-fpm 或 systemctl status php-fpm;若未运行,启动:systemctl start php-fpm。fastcgi_pass unix:/tmp/php-cgi.sock; 或 fastcgi_pass 127.0.0.1:9000;listen = /tmp/php-cgi.sock; 或 listen = 127.0.0.1:9000;df -h;若根分区 100%,清理大日志/缓存后再重启服务。二、常见原因与对应修复
fastcgi_pass 与 PHP-FPM 的 listen 一致;若使用 Unix Socket,确保路径、权限一致;必要时由 socket 切换为 127.0.0.1:9000 验证连通性。listen.owner/listen.group 与 Nginx worker 一致(如 nobody)。php.ini 提高 **max_execution_time`(如 300 秒);在 PHP-FPM 设置 request_terminate_timeout(如 300 秒或更高,视业务而定);在 Nginx 适当增大 fastcgi_connect_timeout / fastcgi_send_timeout / fastcgi_read_timeout。df -h 定位大文件,清理 /var/log、应用日志、数据库日志等,再重启服务。三、关键配置示例
server {
listen 80;
server_name example.com;
root /data/www;
index index.php index.html;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
}
}
[www]
listen = 127.0.0.1:9000
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 150
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 500
request_terminate_timeout = 300
listen = /tmp/php-cgi.sock,并设置 listen.owner/listen.group 与 Nginx worker 一致(如 nobody)。fastcgi_pass unix:/tmp/php-cgi.sock;。四、维护与预防建议