it-swarm.com.ru

владелец сокета nginx и php-fpm

После обновления моей системы я столкнулся с ошибкой шлюза в моих PHP приложениях, работающих на Nginx.

1 connect () для 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. хх»

Проблема вызвана неправильными разрешениями используемых сокетов php-fpm, на самом деле я вижу /var/run/php-fcgi.sock, принадлежащий root:root, но nginx и php-fpm используют в качестве пользователя www-data.

Я уже редактировал конфигурацию php-fpm в /etc/php-fpm.d/www.conf:

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 для настройки моих vhosts и моего 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
13
Fez Vrasta

Конфиг файлы 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

Директивы, на которые следует обратить внимание

  • Каждый пул должен использовать разные сокеты. Если у вас есть несколько пулов, использующих один и тот же сокет, вы получите проблемы.

  • Директивы user и group управляют пользователем/группой, от имени которой будет запускаться процесс FPM для этого пула. Они делают не указывают пользователя/группу сокета.

  • Директивы listen.owner и listen.group управляют пользователем/группой, которую сокет использует для этого пула.

  • Директивы пула (например, listen.*) будут работать только для пулов. Таким образом, вы не можете использовать их в глобальном разделе, вы должны указать их для каждого пула.

Разрешения сокета

Полномочия 0660 прекрасно подходят, когда listen.owner и listen.group совпадают с веб-сервером. Вы могли бы даже использовать 0600, но можно утверждать, что любой пользователь, который может работать в той же группе, что и веб-сервер, также может использовать сокет, поэтому я бы использовал 0660.

24
Jasper N. Brouwer

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

всем! Это тоже моя проблема . Я только что изменил своего пользователя fpm на vagrant, перезапустил мои пулы и ... все готово! Вот мой конф:

user = vagrant
group = nginx

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

Надеюсь, это может кому-то помочь.

1
jordan

Привет всем и спасибо за помощь, в моем случае с сервером Ubuntu 14.04 nginx и php5-fpm проблема с владельцем сокета php-fpm root была решена путем редактирования файла /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

На моей установке 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 тоже работает. 

0
Asle