nginx和php fpm套接字所有者
在我的系统更新之后,我在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套接字的错误权限造成的,事实上我看到nginx和php fpm套接字所有者,php,nginx,centos,Php,Nginx,Centos,在我的系统更新之后,我在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” 这个问题是由所使用
/var/run/php fcgi.sock
由root:root
拥有,但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来配置vhost和PHP-FPM。它为每个网站/vhost创建一个新的套接字,并在/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
FPM将读取配置文件
/etc/php fpm.conf
是fpm将读取的配置文件(在CentOS上)。如果希望FPM也读取其他配置文件,则需要告诉它
您可以通过将行include=/etc/php fpm.d/*.conf
放在/etc/php fpm.conf
的底部来实现这一点。然后它将读取目录/etc/php fpm.d
(以.conf
结尾)中的所有内容
然后将全局指令和include行放入/etc/php fpm.conf
。这可能看起来像这样:
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php5-fpm.log
include=/etc/php-fpm.d/*.conf
并在/etc/php fpm.d
中为每个池创建一个单独的文件
示例/etc/php fpm.d/global.conf
:
[global-pool]
user = www-data
group = www-data
listen = /var/run/php-fcgi.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
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
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
示例/etc/php fpm.d/vhostname-0.conf
:
[global-pool]
user = www-data
group = www-data
listen = /var/run/php-fcgi.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
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
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
需要注意的指示
- 每个池都应该使用不同的套接字。如果有多个池使用同一个套接字,则会出现问题
- 指令
和user
控制该池的FPM进程将作为其运行的用户/组。它们不指定套接字的用户/组group
- 指令
和listen.owner
控制套接字用于该池的用户/组listen.group
- 池指令(如
)仅适用于池。因此,不能在全局部分中使用它们,必须为每个池指定它们listen.*
listen.owner
和listen.group
与Web服务器相同时,权限0660是完全正确的。您甚至可以使用0600,但有人可能会说,任何可以在与Web服务器相同的组下操作的用户也可以使用套接字,因此我将使用0660。所有人!
这也是我的问题。
我刚把我的fpm用户改为vagrant,重新启动我的池,然后。。。完成了!
我的确认书来了:
user = vagrant
group = nginx
listen.owner = vagrant
listen.group = nginx
listen.mode = 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):
大家好,谢谢你们的帮助,在我使用Ubuntu服务器14.04 nginx和php5 fpm的情况下,通过编辑文件/etc/php5/fpm/pool.d/www.conf,根用户可以解决php fpm套接字所有者的问题 取消对行的注释:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
从一个明确的安装nginx的所有者和组是www数据。
我认为最佳做法是查看/etc/nginx/nginx.conf,并验证第一行中的:
user www-data;
并使用默认用户Chears 做其他任何事都行 我的配置 Vagrant/Ubuntu 16/Nginx 1.13/PHP-FPM 7.1
sudo vi /etc/nginx/nginx.conf
更改第一行用户nginx=>用户www数据
service nginx restart
在安装Centos 7.5、Apache with PHP7.1和PHP5.6时,我遇到了相同的问题,每次重新启动后,我都必须手动修复php56 php.fpm.sock(root所有)上的权限 我的php56配置在此,可能与您的安装不同: /opt/remi/php56/root/etc/php fpm.d/www.conf 我在文件中更改了此注释部分:
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
现在,重新启动后,套接字文件的权限正确,一切正常。对listen.mode不太确定。我认为0660也有效 只需在此处添加应注释
listen.acl\u users
指令,否则,它将覆盖listen.owner
和listen.group
值:
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
我撤回了我的回答,因为它不正确。在我的例子中,0666是解决方案,因为nginx和phpfpm中的组不同。但是我也检查了我的安装(CentOS 6.5也是),我没有发现这个问题
PHP5.4.28(cli)(构建时间:2014年5月2日19:09:57)
我刚刚更新了我的PHP版本,并且是相同的版本-没有这样的问题<代码>PHP5.4.29(cli)(编译时间:2014年6月5日16:07:48)。我能想象的最后一件事是,由于某种原因,www.conf没有在您的案例中使用。是的,我认为它忽略了这些设置。。。但我不知道如何修复它。嗯,尝试使用池设置。Nginx坏网关意味着它找不到php或php fpm正忙。请在NGINX上提供错误日志。我已经添加了错误日志,顺便说一句,这正是我已经解释过的…谢谢,但是添加include没有效果。。。我想全局声明listen.parameters,这样就不必添加它们了