Подтвердить что ты не робот

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

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

1 connect() для unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock failed (13: Permission denied) при подключении к upstream, client: xx.xxx.xx.xx, server: localhost, request: "GET/HTTP/1.1", вверх по течению: "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-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
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

user = vagrant
group = nginx

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

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

Ответ 4

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

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

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

user www-data;

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

Ответ 5

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

Моя конфигурация Vagrant/Ubuntu 16/Nginx 1.13/PHP-FPM 7.1

sudo vi /etc/nginx/nginx.conf

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

service nginx restart