在我的系统更新后,我遇到了在Nginx上运行的PHP应用程序的错误网关错误 .
1连接()到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套接字的权限不好引起的,实际上我看到 /var/run/php-fcgi.sock
拥有 /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
6 回答
配置文件FPM将读取
/etc/php-fpm.conf
是FPM将读取的配置文件(在CentOS上) . 如果您希望FPM也读取其他配置文件,您需要告诉它 .您可以通过将
include=/etc/php-fpm.d/*.conf
行放在/etc/php-fpm.conf
的底部来完成此操作 . 然后它将读取目录/etc/php-fpm.d
中的所有内容(以.conf
结尾) .然后将全局指令和包含行放在
/etc/php-fpm.conf
中 . 这看起来像这样:并且在每个池的
/etc/php-fpm.d
中有一个单独的文件 .示例
/etc/php-fpm.d/global.conf
:示例
/etc/php-fpm.d/vhostname-0.conf
:指令要注意
每个池应使用不同的套接字 . 如果您有多个池使用相同的套接字,您将遇到问题 .
指令
user
和group
控制该池的FPM进程将作为其运行的用户/组 . 这些不指定套接字的用户/组 .指令
listen.owner
和listen.group
控制套接字用于该池的用户/组 .池指令(如
listen.*
)仅适用于池 . 因此,您不能在全局部分中使用它们,您必须为每个池指定它们 .套接字权限
当
listen.owner
和listen.group
与网络服务器相同时,权限0660完全正常 . 您甚至可以使用0600,但有人可能会争辩说,任何可以在与Web服务器相同的组下运行的用户也可以使用套接字,所以我会使用0660 .NGINX以用户
nginx
和php5-fpm作为用户www-data
运行 . 只需将nginx
添加到组www-data
,问题就解决了,nginx可以访问/var/run/php5-fpm.sock
. 适用于Ubuntu 14.04,nginx 1.7.10,PHP 5.5.9-1ubuntu4.6(fpm-fcgi):大家好!这也是我的问题 . 我刚刚将我的fpm用户改为流浪汉,重启我的游泳池......完成了!这是我的conf:
希望它可以帮助某人 .
大家好,感谢您的帮助,在我的情况下使用Ubuntu服务器14.04 nginx和php5-fpm通过编辑文件/etc/php5/fpm/pool.d/www.conf来解决php-fpm套接字所有者通过root解决的问题Uncomment线条:
从明确的安装nginx所有者和组是www-data . 我认为最好的做法是查看/etc/nginx/nginx.conf并验证第一行是:
并使用默认用户,Chears!
Just do it anything else
我的Config Vagrant / Ubuntu 16 / Nginx 1.13 / PHP-FPM 7.1
更改第一行用户nginx =>用户www-data
在我的安装,Centos 7.5,Apache与PHP 7.1和PHP 5.6我有同样的问题,我不得不在每次重启后手动修复 php56-php.fpm.sock (由root拥有)的权限 .
我的php56配置在这里,你的安装可能会有所不同: /opt/remi/php56/root/etc/php-fpm.d/www.conf
我在文件中更改了这个注释部分:
现在重启后一切正常,对套接字文件有正确的权限 . 不确定listen.mode . 我认为 0660 也有效 .