首页 文章

nginx和php-fpm套接字所有者

提问于
浏览
13

在我的系统更新后,我遇到了在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 回答

  • 24

    配置文件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 中 . 这看起来像这样:

    [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
    

    示例 /etc/php-fpm.d/vhostname-0.conf

    [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
    

    指令要注意

    • 每个池应使用不同的套接字 . 如果您有多个池使用相同的套接字,您将遇到问题 .

    • 指令 usergroup 控制该池的FPM进程将作为其运行的用户/组 . 这些不指定套接字的用户/组 .

    • 指令 listen.ownerlisten.group 控制套接字用于该池的用户/组 .

    • 池指令(如 listen.* )仅适用于池 . 因此,您不能在全局部分中使用它们,您必须为每个池指定它们 .

    套接字权限

    listen.ownerlisten.group 与网络服务器相同时,权限0660完全正常 . 您甚至可以使用0600,但有人可能会争辩说,任何可以在与Web服务器相同的组下运行的用户也可以使用套接字,所以我会使用0660 .

  • 0

    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):

    $ sudo usermod -aG www-data nginx
    
  • 0

    大家好!这也是我的问题 . 我刚刚将我的fpm用户改为流浪汉,重启我的游泳池......完成了!这是我的conf:

    user = vagrant
    group = nginx
    
    listen.owner = vagrant
    listen.group = nginx
    listen.mode = 0660
    

    希望它可以帮助某人 .

  • 0

    大家好,感谢您的帮助,在我的情况下使用Ubuntu服务器14.04 nginx和php5-fpm通过编辑文件/etc/php5/fpm/pool.d/www.conf来解决php-fpm套接字所有者通过root解决的问题Uncomment线条:

    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660
    

    从明确的安装nginx所有者和组是www-data . 我认为最好的做法是查看/etc/nginx/nginx.conf并验证第一行是:

    user www-data;
    

    并使用默认用户,Chears!

  • 5

    Just do it anything else

    我的Config Vagrant / Ubuntu 16 / Nginx 1.13 / PHP-FPM 7.1

    sudo vi /etc/nginx/nginx.conf
    

    更改第一行用户nginx =>用户www-data

    service nginx restart
    
  • 1

    在我的安装,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.owner = nginx
    listen.group = nginx
    listen.mode = 0666
    

    现在重启后一切正常,对套接字文件有正确的权限 . 不确定listen.mode . 我认为 0660 也有效 .

相关问题