当前位置: 首页 > 知识库问答 >
问题:

nginx和php fpm套接字所有者

吴单鹗
2023-03-14

在我的系统更新之后,我在Nginx上运行的PHP应用程序遇到了一个坏的网关错误。

1连接()到unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock失败(13:权限被拒绝),同时连接到上游,客户端:xx.xxx.xx.xx,服务器:localhost,请求:"GET/HTTP/1.1",上游:"快速cgi://unix:/var/运行/php-fcgi-vhostname-php-fcgi-0.sock:",主机:"xx.xx.xx.xx"

这个问题是由使用的php-fpm套接字的错误权限引起的,事实上我看到/var/run/php-fcgi.sockroot拥有: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中设置它们。形态

它们有这样的结构:

[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。形态:

[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

共有3个答案

赵才俊
2023-03-14

NGINX作为用户NGINX运行,php5-fpm作为用户www-data运行。只需将nginx添加到组www-data,问题就解决了,nginx可以访问/var/run/php5-fpm。sock。与Ubuntu 14.04、nginx 1.7配合使用效果很好。10,PHP5.5。9-1本图4。6(fpm fcgi):

$ sudo usermod -aG www-data nginx
叶元凯
2023-03-14

在这里加上收听。应注释acl_用户指令,否则,它将覆盖侦听。所有者倾听。组值:

; 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
楚泳
2023-03-14

/etc/php fpm。conf是FPM将读取的配置文件(在CentOS上)。如果希望FPM也读取其他配置文件,则需要告诉它。

您可以通过在/etc/php-fpm.conf的底部放置行包括=/etc/php-fpm. d/*. 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-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进程将作为其运行的用户/组。它们不指定套接字的用户/组。

指令听。所有者倾听。组控制套接字用于该池的用户/组。

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

监听时,权限0660非常好。所有者倾听。组与Web服务器相同。您甚至可以使用0600,但有人可能会说,任何可以在与Web服务器相同的组下操作的用户也可以使用套接字,因此我将使用0660。

 类似资料:
  • 我使用的是Pecl mongo 1.4. x驱动程序(http://pecl.php.net/package/mongo/1.4.1),设置在标题中提到的中等流量服务(5K-每分钟10K请求)。 我发现,在mongoDB中,Auth命令占用大量流量,连接请求速率大约为每秒30-50次。 这会严重影响性能(锁定率高,内存管理不好) 如果我在一个盒子里做netstat(我总共有5-8个盒子),我看到每

  • 是一个杀手级静态文件服务器。 它可以服务于< code>node.js,如本例所示,但方式有限。 但显然无法代理。 我发现唯一可行的是按照这篇文章使用HAProxy前端——但这是2011年10月6日的文章。 这肯定是一个普遍的问题,但我没有找到一个非常普遍的解决方案。 (有关完整的解决方案和详细信息,请参见https://github.com/bangkok-maco/barebone-node)

  • 我只是想在我的OSX上运行nginx上的php。 我的php-fpm.conf文件 我的www.conf文件 在我的nginx.conf文件我得到了这个: 每次我打我的服务器我得到这个错误: 2017/12/31 01:45:25[crit]1102#0:*2 connect()到unix:/var/run/php fpm。连接到上游时sock失败(38:非套接字上的套接字操作),客户端:::1,

  • 我想创建能够与多个客户端连接的服务器,但我总是收到“套接字关闭”异常或从输入流中读取空值,以前我认为这是由于以错误的方式关闭套接字连接引起的,所以我发布了这个主题,但现在似乎这不是问题所在。 服务器方法 HandlerThread类 客户端模拟器 例外和问题 在客户端模拟器之前启动服务器,客户端模拟器没有任何异常,但是在服务器端,并没有收到所有数据,从控制台打印信息时,我看到“null”、“Hel

  • 在我的客户端服务器应用程序中,我发现了一个奇怪的错误。我得到了以下方法: 每个方法向客户端发送一个字节数组 如果我只调用其中的2个,一切都正常,客户端会得到所有发送的字节数组。但是如果我调用所有3个,只有第一个和第二个到达客户端,以下方法的顺序并不重要。但是服务器说它们都是发送的。使用方法向客户端iam写入包中的所有长度也是有意义的。奇怪的一点来了: 如果我添加一个

  • 问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问