在我的系统更新之后,我在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.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中设置它们。形态
它们有这样的结构:
[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
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
在这里加上收听。应注释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
/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
>
指令user
和group
控制该池的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时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问