Я запускаю локальный тестовый сервер на своем ноутбуке под управлением 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, поэтому я не выходил за терминальные выходы для примеров. Я сделаю это позже, если вы не найдете этот ответ полезным без него.
Удачи!