Я запускаю локальный тестовый сервер на своем ноутбуке под управлением Ubuntu 16.10. Я запускал Apache2, но я решил переключиться на NginX. У меня пять сайтов, один – просто HTML, другие – PHP 7.
Сайт, который является просто HTML, отлично работает. Сайты PHP не работают. Сначала сайты на основе PHP возвращали 403 Forbidden
ошибку, как описано в этом вопросе, который я задал ранее .
Однако после некоторых экспериментов и просмотра документации в Интернете, возможно, проблема заключалась в том, что файлы конфигурации NginX для каждого сайта указывали на index.html
, а не index.php
. Итак, я изменил файлы конфигурации из этого:
location / { try_files $uri $uri/ /index.html; }
… к этому:
location / { try_files $uri $uri/ /index.php; }
К сожалению, это изменило только ту ошибку, которую я получаю. Теперь, когда я загружаю один из моих сайтов PHP, я получаю ошибку 502 Bad Gateway
, и это то, что появляется в /var/log/nginx/error.log
:
2017/01/07 17:28:26 [crit] 6308#6308: *9 connect() to unix:/var/run/php7.0-fpm.sock failed (2: No such file or directory) while connecti ng to upstream, client: 127.0.0.1, server: local_examle.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php7.0-fpm. sock:", host: "local_example.com"
Я думал, что php7.0-fpm установлен и настроен правильно, но я думаю, что NginX и PHP не работают вместе в моей системе.
Как устранить эту ошибку Bad Gateway
и заставить мои PHP-сайты работать на NginX?
Вы получаете ошибку, потому что nginx
– запрос прокси к несуществующей конечной точке. В принципе, он никогда не доходит до PHP. Это то, что нам нужно исправить.
Что говорит нам, что ошибка заключается в следующем:
[crit] 6308#6308: *9 connect() to unix:/var/run/php7.0-fpm.sock
php-fpm
php-fpm
принимает соединения в То, что я делаю, это проверка процесса php-fpm
в списке процессов. Это говорит мне, началось ли php-fpm
.
В терминале введите:
ps aux | grep php
Это показывает вам список php-процессов. Если PHP-FPM не существует, значит, он никогда не запускался, поэтому вы можете запустить его с помощью
sudo service php7.0-fpm start
. Я предположил, что имя службы php7.0-fpm
.
Если php-fpm
IS есть, вы всегда можете посмотреть на дескрипторы файлов, которые он открыл. Сюда входят файлы конфигурации, библиотеки, сетевые подключения и UNIX-сокеты.
Во-первых, вам нужно найти process ID
или PID вашего процесса php-fpm
. Выход ps aux | grep php
ps aux | grep php
предоставит вам список, вы хотите посмотреть на процесс, владельцем которого является root
( обычно он говорит, что если вы использовали значения по умолчанию для 16.04).
Мы будем перечислять дескрипторы открытых файлов, используя sudo lsof -p 123456
где 123456
– это идентификатор процесса, который вы получили от ps aux | grep php
ps aux | grep php
.
Прокрутите список вниз, вы ищете «unix» или «tcp», чтобы увидеть, что он делает.
Мы можем изменить указанное значение, или вы можете его сохранить. Причина. Я столкнулся с трудностями, чтобы показать эти несколько полезных команд, чтобы подчеркнуть, что вы всегда можете спросить свою систему, что происходит.
Если вы знаете, где находится конфигурационный файл для вашего пула (обычно /etc/php/7.0/fpm/pool.d/www.conf
тогда откройте его и найдите директиву для listen
. Измените это или сохраните его, но используйте его в fastcgi_pass
nginx
стоимость.
Я написал много, но это всего лишь несколько команд, которые вы в конце концов узнаете, если будете продолжать использовать Linux. Это ничего сложного, поэтому я надеюсь, что это не отвлечет вас от этого метода обслуживания PHP. Я бы опубликовал больше информации, но в настоящий момент я не рядом с машиной Linux, поэтому я не выходил за терминальные выходы для примеров. Я сделаю это позже, если вы не найдете этот ответ полезным без него.
Удачи!