【发布时间】:2014-08-11 02:50:52
【问题描述】:
更新系统后,我在 Nginx 上运行的 PHP 应用程序遇到网关错误。
1 connect() to unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock 在连接上游时失败(13:权限被拒绝),客户端:xx.xxx.xx.xx,服务器:localhost,请求:“GET / HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock:”,主机:“xx.xx .xx.xx"
问题是由使用的php-fpm套接字的错误权限引起的,实际上我看到root:root拥有的/var/run/php-fcgi.sock但是nginx和php-fpm使用用户www-data。
我已经在/etc/php-fpm.d/www.conf 编辑了 php-fpm 配置:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
但这并不能解决问题,当我重新启动 nginx 和 php-fpm 时,会使用 root:root 作为用户/组创建套接字。
我发现修复它的唯一方法是将套接字的所有者手动更改为 www-data:www-data。但这不是一个真正的解决方案,因为每次我重新启动服务时,我都必须再次应用它。
我该如何解决这个问题?我在 CentOS 6.5 上
编辑:
我使用 Ajenti-V 来配置我的虚拟主机和我的 PHP-FPM。它为每个网站/虚拟主机创建一个新的套接字,它们被设置在/etc/php-fpm.conf
它们有这样的结构:
[vhostname-php-fcgi-0]
user = www-data
group = www-data
listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
如果我在每个条目中添加这些字符串:
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
一切正常。
所以看起来 www.conf 不包括在内(也许?)。这是我的 php-fpm.conf:
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log
[global-pool]
user = www-data
group = www-data
listen = /var/run/php-fcgi.sock
pm = dynamic
pm.start_servers = 1
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 5
[vhostname-php-fcgi-0]
user = www-data
group = www-data
listen = /var/run/php-fcgi-vhostname-php-fcgi-0.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
【问题讨论】:
-
我已撤回我的答案,因为它不正确。就我而言,0666 是解决方案,因为 nginx 和 php-fpm 中有不同的组。但我也检查了我的安装(CentOS 6.5 也是),我没有看到这个问题...
PHP 5.4.28 (cli) (built: May 2 2014 19:09:57) -
我刚刚更新了我的 php 版本,同样 - 没有这样的问题。
PHP 5.4.29 (cli) (built: Jun 5 2014 16:07:48)。我能想象的最后一件事是 www.conf 出于某种原因未在您的情况下使用。 -
是的,我认为它忽略了这些设置......但我不知道如何修复它。
-
嗯,尝试使用池设置。 Nginx Bad Gateway 表示它找不到 php 或 php-fpm 正忙。 请提供错误日志在 NGINX。
-
我已经添加了错误日志,顺便说一句,这正是我已经解释过的......