Я обновляю nginx до 1.4.7 и php до 5.5.12 , после этого я получил ошибку 502 . До обновления все отлично работает.
Nginx-error.log
2014/05/03 13:27:41 [crit] 4202#0: *1 connect() to unix:/var/run/php5-fpm.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/php5-fpm.sock:", host: "xx.xx.xx.xx"
nginx.conf
user www www;
worker_processes 1;
location / {
root /usr/home/user/public_html;
index index.php index.html index.htm;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/home/user/public_html$fastcgi_script_name;
include fastcgi_params;
}
Ответы:
У меня была похожая ошибка после обновления php. PHP исправил ошибку безопасности, когда
o
имелrw
разрешение на файл сокета./etc/php5/fpm/pool.d/www.conf
или/etc/php/7.0/fpm/pool.d/www.conf
, в зависимости от вашей версии.Раскомментируйте все строки разрешений, например:
Перезапустите fpm -
sudo service php5-fpm restart
илиsudo service php7.0-fpm restart
Примечание : если ваш веб-сервер работает от имени пользователя, отличного от www-data, вам необходимо соответствующим образом обновить
www.conf
файлисточник
sudo usermod -aG www-data nginx
позволяет nginx получить доступ к файлуВсе исправления, упомянутые в настоящее время здесь, в основном, снова и снова дают дыру в безопасности.
В итоге я добавил следующие строки в файл конфигурации PHP-FPM.
Убедитесь, что www-data - это пользователь, от имени которого работает работник nginx. Для Debian это www-данные по умолчанию.
Выполнение этого не приводит к проблеме безопасности, которую должно было исправить это изменение .
источник
ps aux|grep nginx
/var/run/php5-fpm.sock
, так как он был уже созданwww-data
. Просто хедз-ап ...Решение @ Xander работает, но не сохраняется после перезагрузки.
Я обнаружил , что мне пришлось изменить ,
listen.mode
чтобы0660
в/etc/php5/fpm/pool.d/www.conf
.Образец с www.conf:
Редактировать: Согласно @Chris Burgess, я изменил это на более безопасный метод.
Я удалил комментарий для listen.mode, .group и .owner:
/ var / run содержит только информацию о работающей системе с момента последней загрузки, например, вошедшие в систему пользователи и работающие демоны. ( http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure ).
Примечание:
Мои
php5-fpm -v
отчеты:PHP 5.4.28-1+deb.sury.org~precise+1
. Проблема действительно произошла и после недавнего обновления.источник
listen.acl_groups
установлено,listen.owner
иlisten.group
игнорируются. Я установилlisten.acl_groups =
, затем проблема 502 / разрешения исчезла. Обнаружив его после раскомментированияlisten.
строк, как указано выше, проблема 502 не исчезла, и былоsystemctl status php-fpm
показано предупреждениеWARNING: [pool www] ACL set, listen.owner = 'nobody' is ignored
.Если вы попробовали все в этом посте, но не смогли заставить PHP работать, это то, что исправило это для моего случая:
Убедитесь, что эти строки не закомментированы в /etc/php5/fpm/pool.d/www.conf:
Убедитесь, что / etc / nginx / fastcgi_params выглядит следующим образом:
Эти две строки отсутствовали в моем / etc / nginx / fastcgi_params, убедитесь, что они есть!
Затем перезапустите php5-fpm и nginx. Должен сделать свое дело.
источник
На самом деле, «listen.mode» должен быть: «0660», а не «0666», как «Другое для записи» или «Другое для чтения», здесь никогда не будет хорошим выбором.
Поэтому постарайтесь выяснить, под каким пользователем / группой работает ваш веб-сервер. Я использую CentOs, и он запускается от имени пользователя "nginx". Поэтому добавьте в свой php-fpm.conf:
наконец перезапустите php-fpm
источник
www-data
.Проверьте, какой пользователь запускает nginx. Начиная с Ubuntu 12.04, nginx запускается пользователем nginx, который не является членом группы www-data.
и перезапуск демонов nginx и php5-fpm решает проблему.
источник
В качестве альтернативы расширению прав доступа в вашей конфигурации php, вы можете изменить пользователя, указанного в вашей конфигурации nginx.
В первой строке вашего выдержки из nginx.conf пользователь и группа указаны как www и www соответственно.
Между тем, ваш php config, вероятно, указывает пользователя и группу www-данных:
Вы можете изменить строку в вашем nginx.conf на любую из следующих, затем:
источник
Необходимо также учитывать ваши индивидуальные пулы FPM, если таковые имеются.
Я не мог понять, почему ни один из этих ответов не работал для меня сегодня. Это был сценарий «установил и забыл» для меня, когда я забыл, что listen.user и listen.group дублируются для каждого пула.
Если вы использовали пулы для разных учетных записей пользователей, как я, где каждая учетная запись пользователя владеет своими процессами и сокетами FPM, установка только параметров конфигурации listen.owner и listen.group по умолчанию для nginx просто не будет работать. И очевидно, что позволить 'nginx' владеть ими всем тоже недопустимо.
Для каждого пула убедитесь, что
В противном случае вы можете оставить владение бассейном и тому подобное в одиночку.
источник
Я только что получил эту ошибку снова сегодня, когда я обновил свой компьютер (с обновлениями для PHP) под управлением Ubuntu 14.04 . Файл конфигурации дистрибутива
/etc/php5/fpm/pool.d/www.conf
в порядке и не требует никаких изменений в настоящее время.Я обнаружил следующие ошибки:
Странно было то, что у меня есть 2 сайтов , работающих , которые используют PHP-FPM на этой машине один был отлично работает , а другой (Крошечный Крошечные RSS установки) дал мне 502, где и были отлично работает до того .
Я сравнил оба конфигурационных файла и обнаружил, что их
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
не хватает для затронутого сайта.Оба файла конфигурации теперь содержат следующий блок и снова работают нормально:
Обновить
Следует отметить, что Ubuntu поставляет два файла параметров, связанных с fastcgi, а также фрагмент конфигурации, который доступен начиная с Vivid, а также в версии PPA . Решение было обновлено соответственно.
Разница между файлами параметров fastcgi:
Фрагмент конфигурации в
/etc/nginx/snippets/fastcgi-php.conf
источник
Следующее простое исправление сработало для меня, обойдя возможные проблемы с разрешениями в сокете.
В вашей конфигурации nginx установите fastcgi_pass на:
Вместо того
Это должно соответствовать параметру listen = в /etc/php5/fpm/pool.d/www.conf, поэтому также установите это значение:
Затем перезапустите php5-fpm и nginx.
И
Для получения дополнительной информации см .: https://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm/
источник
Проблема в моем случае заключалась в том, что веб-сервер Nginx работал от имени пользователя nginx, а пул работал от имени пользователя www-data.
Я решил проблему, изменив пользователя, в котором работает Nginx, в
/etc/nginx/nginx.conf
файле (в вашей системе он может быть другим, у меня Ubuntu 16.04.1)Изменить:
user nginx;
чтобы:
user www-data;
затем перезапустите Nginx:
service nginx restart
источник
Просто, но работает ..
источник
Я исправил ту же проблему в Amazon Linux AMI 2016.09 (Centos 7), выполнив следующие действия.
Откройте ваши файлы www.conf (Пример: sudo nano /etc/php-fpm.d/www.conf) Наконец, найдите строки, которые устанавливают listen.owner и listen.group, и измените их значения с «nobody» на «nginx». «:
Наконец, найдите строки, которые устанавливают пользователя и группу, и измените их значения с «apache» на «nginx»:
Перезапустите php-fpm (sudo service php-fpm restart)
источник
Самое важное, что пользователь использует nginx, тогда вам нужно указать и его
в вашем nginx.conf
в вашем www.conf
в вашем случае пользователь и группа "www", поэтому просто замените его.
источник
Если у вас разные пулы для каждого пользователя, убедитесь, что пользователь и группа установлены правильно в файле конфигурации. Вы можете найти пользователя nginx в файле /etc/nginx/nginx.conf. Группа nginx такая же, как и у пользователя nginx.
источник
Также проверьте SELINUX (/ etc / selinux):
выключи это:
источник
В моем случае php-fpm вообще не работал, поэтому мне просто нужно было запустить службу 😂
источник
Просто посмотрите
/etc/php5/php-fpm.conf pid = /var/run/php5-fpm.pid
файл IS PIDВ файле
/etc/php5/fpm/pool.d/www.conf
listen = /var/run/php5-fpm.sock
IS SOCKET fileесли вы pid равным listen (
pid = /var/run/php5-fpm.sock and listen = /var/run/php5-fpm.sock
) -> неверные настройки и закончите настройку/etc/php5/fpm/pool.d/www.conf
источник
У меня была похожая ошибка.
Все рекомендации не помогли.
Помогла только замена www-данных на nginx:
/var/www/php/fpm/pool.d/www.conf
источник
Просто добавьте, что в CentOS (и, возможно, в Red Hat и Fedora) файл, для которого необходимо изменить разрешения, находится по адресу:
источник
После обновления с Ubuntu 14.04 lts до Ubuntu 16.04 lts я нашел еще одну причину этой ошибки, которую я не видел раньше.
Во время процесса обновления я каким-то образом полностью потерял свой исполняемый файл php5-fpm. Все файлы конфигурации были целы, и мне потребовалось некоторое время, чтобы понять, что на
service php5-fpm start
самом деле процесс не запускается, так как он не показывает никаких ошибок.Мой момент пробуждения наступил, когда я заметил, что в нем нет файла сокета
/var/run/php5-fpm.sock
, как это должно быть, и при этом неnetstat -an
отображались процессы, прослушивающие порт, который я использовал в качестве альтернативы, пытаясь решить эту проблему. Поскольку файл / usr / sbin / php5-fpm также не существовал, я, наконец, был на правильном пути.Чтобы решить эту проблему, я обновил php с версии 5.5 до 7.0.
apt-get install php-fpm
сделал трюк как побочный эффект. После этого и установки других необходимых пакетов все нормализовалось.Однако это решение может иметь свои проблемы . Поскольку php развился совсем немного, возможно, что программное обеспечение сломается невообразимым образом. Поэтому, хотя я и пошел по этому пути, вы можете захотеть сохранить версию, которая вам нравится, еще ненадолго.
К счастью, кажется, что есть хороший способ для этого , как описано на сайте «Настройка Windows»:
Более точное решение, каким бы оно ни было, я не пробовал. Я ожидаю, что следующие несколько дней скажут мне, должен ли я иметь.
источник
Я несколько раз менял ОС на своем сервере, пытаясь получить наиболее удобную систему.
Раньше он работал очень хорошо в большинстве случаев, но, наконец, я получил ошибку 502 Gateway.
Я использую сокет php fpm для каждой учетной записи вместо того, чтобы хранить один и тот же для всех. Таким образом, если происходит сбой, по крайней мере, другие приложения продолжают работать.
Раньше у меня были пользовательские и групповые www-данные. Но это изменилось на моем Debian 8 с последней версией Nginx 1.8 и php5-fpm.
Пользователь по умолчанию - nginx, также как и группа. Чтобы убедиться в этом, лучше всего проверить файлы / etc / group и / etc / passwd. Они не могут лгать.
Именно там я обнаружил, что теперь у меня есть nginx в обоих и больше нет www-данных.
Возможно, это может помочь некоторым людям, все еще пытающимся выяснить, почему сообщение об ошибке продолжает появляться.
Это сработало для меня.
источник
Тем, кто перепробовал все в этой теме и до сих пор застрял: это решило мою проблему. Я обновил /usr/local/nginx/conf/nginx.conf
Раскомментируйте высказывание
user
сделай
www-data
так чтобы стало:user www-data;
Сохраните его (требуется root-доступ)
Перезапустите nginx
источник
Если у вас есть декларации
и
в разных конфигурационных файлах, root будет владельцем этого файла.
источник