web-dev-qa-db-ja.com

nginxおよびphp-fpmソケット所有者

システムの更新後、PHP Nginxで実行されているアプリの不正なゲートウェイエラーが発生しました。

1 unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sockへのconnect()は、アップストリーム、クライアント:xx.xxx.xx.xx、サーバー:localhostへの接続中に失敗しました(13:許可が拒否されました) 、リクエスト: "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を使用して、仮想ホストと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
15
Fez Vrasta

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
6
AnthumChris

みなさん!それも私の問題です。 fpmユーザーをvagrantに変更し、プールを再起動すると...完了です!ここに私のconfが来ます:

user = vagrant
group = nginx

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

それが誰かを助けることを願っています。

1
jordan

私のインストールでは、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についてはわかりません。 66も機能すると思います。

1
Asle

こんにちは。Ubuntuサーバー14.04 nginxとphp5-fpmの場合、rootによるphp-fpmソケット所有者の問題は、ファイル/etc/php5/fpm/pool.d/www.confを編集して解決しました台詞:

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

明確なインストールから、nginxの所有者とグループはwww-dataです。ベストプラクティスは、/ etc/nginx/nginx.confを見て、最初の行が次のとおりであることを確認することだと思います。

user www-data;

そして、デフォルトのユーザーであるChearsを使用してください!

0
Dimitrios

それ以外は何でもできます

My Config Vagrant/Ubuntu 16/Nginx 1.13/PHP-FPM 7.1

Sudo vi /etc/nginx/nginx.conf

最初の行を変更しますuser nginx => user www-data

service nginx restart
0
Tidytrax

ここにlisten.acl_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
0
jpcaparas