Назад | Перейти на главную страницу

Заставьте PHP-FPM прослушивать IP-адрес: порт вместо /var/run/php5-fpm.sock;

Так как сегодня я проводил нагрузочное тестирование своего сайта (используя blitz.io); несмотря на наличие большого количества оперативной памяти (более 50%) и мощности процессора (более 70%), результаты показали, что мой сайт начал отключаться при определенном количестве одновременных пользователей в секунду.

Журнал ошибок Nginx для моего сайта (/var/log/nginx/example.com.error.log) показал примерно следующее:

2013/02/12 19:03:57 [ошибка] 13749 # 0: * 3175 connect () to unix: /var/run/php5-fpm.sock не удалось (11: ресурс временно недоступен) при подключении к восходящему потоку, клиент: 54.123.456.46, сервер: example.com, запрос: «GET / HTTP / 1.1», восходящий поток: «fastcgi: // unix: /var/run/php5-fpm.sock:», хост: «example.com»

Ошибка в Google привела меня к этот ответ в котором говорится об использовании TCP \ IP-соединения вместо unix-сокета в качестве решения проблемы; как сокет unix "проблемы с высокими нагрузками хорошо известны".

Итак, как подсказывает ответ:

Теперь проблема в том, что я получаю 502 Bad Gateway ошибка при посещении моего веб-сайта. Да, я сделал reload Nginx и PHP-FPM. Что я делаю не так? (Абсолютный новичок здесь, изо всех сил стараюсь учиться на практике.)

В случае, если это актуально, когда я sudo service php5-fpm restart, Я получаю эту ошибку:

[FAIL] Restarting PHP5 FastCGI Process Manager: php5-fpm failed!

И это происходит только после того, как я внес вышеупомянутые изменения. Как я могу это исправить?

Пожалуйста, дайте мне знать, если мне понадобится дополнительная информация.


ОБНОВИТЬ

Файл /etc/nginx/sites-available/default говорит это:

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;

#   # With php5-fpm:
#   fastcgi_pass unix:/var/run/php5-fpm.sock;

Значит ли это, что если на моем сервере работает PHP-FPM, он ДОЛЖЕН, без выбора, используйте /var/run/php5-fpm.sock?

я использовал $ sudo php5-fpm -t команда, чтобы проверить, в порядке ли настройки PHP-FPM (если нет, она покажет мне некоторую ошибку / информацию).

Итак, вот как выглядел результат:

[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33
[13-Feb-2013 18:35:00] ERROR: failed to load configuration file '/etc/php5/fpm/php-fpm.conf'
[13-Feb-2013 18:35:00] ERROR: FPM initialization failed

Ошибка говорит, что что-то не так в строке 33 из /etc/php5/fpm/pool.d/www.conf, что бывает так: listen 127.0.0.1:9000 (не так ли уж случайное совпадение, правда?).

Увидев его, я сразу же сравнил его с другими строчками, и тут меня осенило, = (знак равенства) отсутствует!

Итак, это то, что должно быть: listen = 127.0.0.1:9000 и это все исправило!

Похоже (на основе 502 и сообщения об ошибке) служба php-fpm не запускается.

Может ли что-то еще использовать порт 9000? Чтобы проверить запуск:

sudo lsof -P | grep TCP | grep LISTEN

и ищи что-то вроде TCP localhost:9000 (LISTEN). Если есть, вы можете просто использовать другой порт, скажем 9001.

Хорошее место для проверки - журнал ошибок php-fpm. По умолчанию он может быть отключен. Если вы посмотрите свой файл конфигурации php-fpm (/etc/php5/fpm/php-fpm.conf в моей системе), вы найдете параметр error_log. Это путь к вашему журналу ошибок. Если это закомментировано, не комментируйте его, снова перезапустите службу php-fpm и проверьте, что говорится в содержимом файла журнала.

Вы можете использовать IP / порт или сокет Unix по своему выбору.

Это зависит от вашей конфигурации php-fpm, файл www.confв моей системе (Ubuntu 16.04) этот файл находится по адресу /etc/php/7.0/fpm/pool.d.

В этом файле вы можете найти директиву с именем listen, если вы установите эту директиву на /run/php/php7.0-fpm.sock, например, тогда в конфигурации вашего сайта nginx fastcgi_pass должно быть unix:/run/php/php7.0-fpm.sock;

Но если вы установите слушать 127.0.0.1:9000, затем fastcfg_pass должно быть 127.0.0.1:9000.

[13-Feb-2013 18:35:00] ERROR: [/etc/php5/fpm/pool.d/www.conf:33] value is NULL for a ZEND_INI_PARSER_ENTRY
[13-Feb-2013 18:35:00] ERROR: Unable to include /etc/php5/fpm/pool.d/www.conf from /etc/php5/fpm/php-fpm.conf at line 33

Не загружается www.conf потому что у него есть ошибка в строке 33, и поэтому, вероятно, он возвращается к значениям по умолчанию, которые используют сокет.