Nginx 502 错误:如何解决“connect() to php5-fpm.sock failed (13: Permission denied)”
2024-03-30 02:18:22
解决 Nginx 502 错误:connect() to php5-fpm.sock failed (13: Permission denied)
前言:
当 Nginx 与 PHP-FPM 交互时,可能会遇到错误“connect() to php5-fpm.sock failed (13: Permission denied)”。此错误表明 Nginx 无法访问 PHP-FPM 套接字,从而导致 502 错误。本篇文章将深入探讨此错误的原因,并提供详细的解决步骤。
权限问题:
此错误最常见的原因是权限问题。确保以下文件和目录具有正确的权限:
/var/run/php5-fpm.sock
/usr/home/user/public_html
它们应属于 www 用户和组。使用以下命令检查权限:
ls -la /var/run/php5-fpm.sock
ls -la /usr/home/user/public_html
如果权限不正确,请使用以下命令更改它们:
chown www:www /var/run/php5-fpm.sock
chown www:www /usr/home/user/public_html
SELinux 设置:
如果你的系统启用了 SELinux,它可能会阻止 Nginx 访问 PHP-FPM 套接字。使用以下命令检查:
semanage fcontext -l | grep php-fpm
如果输出为空,请创建 SELinux 规则以允许 Nginx 访问 PHP-FPM 套接字:
semanage fcontext -a -t httpd_var_run_t "/var/run/php5-fpm.sock"
然后重新加载 SELinux 策略:
restorecon -R /var/run/php5-fpm.sock
防火墙:
检查防火墙是否阻止了 Nginx 访问 PHP-FPM 端口(通常是 9000):
firewall-cmd --list-ports
如果端口 9000 被阻止,请使用以下命令允许它:
firewall-cmd --add-port=9000/tcp
然后重新加载防火墙:
firewall-cmd --reload
检查日志:
如果问题仍然存在,请检查 Nginx 和 PHP-FPM 日志以获取更多详细信息。
结论:
通过仔细遵循这些步骤,你可以解决“connect() to php5-fpm.sock failed (13: Permission denied)”错误,并恢复 Nginx 和 PHP-FPM 之间的正常交互。在遇到类似问题时,请记住检查权限、SELinux 设置和防火墙规则,这些通常是导致连接问题的罪魁祸首。
常见问题解答:
- 我已遵循所有步骤,但错误仍然存在。
请尝试重新启动 Nginx 和 PHP-FPM 服务。
- 如何检查 SELinux 是否阻止了 Nginx?
使用以下命令检查 SELinux 日志:
audit2allow -w
- 我如何允许 Nginx 在防火墙中访问端口 9000?
使用以下命令:
sudo ufw allow 9000/tcp
- Nginx 日志在哪里可以找到?
Nginx 日志通常位于 /var/log/nginx/error.log
。
- PHP-FPM 日志在哪里可以找到?
PHP-FPM 日志通常位于 /var/log/php-fpm/php-fpm.log
。