владелец nginx и php-fpm

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

*1 connect() to unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock failed (13: Permission denied) while connecting to upstream, client: xx.xxx.xx.xx, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock:", host: "xx.xx.xx.xx" 

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

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

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

но это не решает проблему, и когда я перезапускаю nginx и php-fpm, сокеты создаются с помощью root:root как user / group.

Единственное, что я нашел, чтобы исправить это, – это изменить владельца сокетов на 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 

Файлы конфигурации FPM будут читать

/etc/php-fpm.conf – это файл конфигурации, который будет читать FPM (на CentOS). Если вы хотите, чтобы FPM также читал другие файлы конфигурации, вам нужно сказать об этом.

Вы можете сделать это, поставив строку include=/etc/php-fpm.d/*.conf /etc/php-fpm.conf в нижней части /etc/php-fpm.conf . Затем он будет читать все в каталоге /etc/php-fpm.d (который заканчивается на .conf ).

Затем поместите глобальные директивы и строку include в /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.owner и listen.group совпадают с веб- listen.group . Вы даже можете использовать 0600, но можно утверждать, что любой пользователь, который может работать в той же группе, что и веб-сервер, также может использовать сокет, поэтому я бы использовал 0660.

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 

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

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

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

Привет всем и спасибо за помощь, в моем случае с сервером Ubuntu 14.04 nginx и php5-fpm проблема с владельцем сокета php-fpm от root была решена путем редактирования файла /etc/php5/fpm/pool.d/www.conf Uncomment линии:

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

Из чистой установки владелец и группа nginx являются www-данными. Я думаю, что лучше всего посмотреть /etc/nginx/nginx.conf и убедиться, что в первой строке:

 user www-data; 

И используйте пользователя по умолчанию, Chears!

Просто сделайте это еще что-нибудь

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

 sudo vi /etc/nginx/nginx.conf 

Изменить пользователя первой строки nginx => user www-data

 service nginx restart