返回

Nginx 502 错误:如何解决“connect() to php5-fpm.sock failed (13: Permission denied)”

php

解决 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 设置和防火墙规则,这些通常是导致连接问题的罪魁祸首。

常见问题解答:

  1. 我已遵循所有步骤,但错误仍然存在。

请尝试重新启动 Nginx 和 PHP-FPM 服务。

  1. 如何检查 SELinux 是否阻止了 Nginx?

使用以下命令检查 SELinux 日志:

audit2allow -w
  1. 我如何允许 Nginx 在防火墙中访问端口 9000?

使用以下命令:

sudo ufw allow 9000/tcp
  1. Nginx 日志在哪里可以找到?

Nginx 日志通常位于 /var/log/nginx/error.log

  1. PHP-FPM 日志在哪里可以找到?

PHP-FPM 日志通常位于 /var/log/php-fpm/php-fpm.log