Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx和php fpm套接字所有者_Php_Nginx_Centos - Fatal编程技术网

nginx和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” 这个问题是由所使用

在我的系统更新之后,我在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
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
    group
    控制该池的FPM进程将作为其运行的用户/组。它们不指定套接字的用户/组

  • 指令
    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,这样就不必添加它们了