Так как сегодня я проводил нагрузочное тестирование своего сайта (используя 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 "проблемы с высокими нагрузками хорошо известны".
Итак, как подсказывает ответ:
Я заменил listen = /var/run/php5-fpm.sock
с участием listen 127.0.0.1:9000
в /etc/php5/fpm/pool.d/www.conf
Поскольку нет /etc/nginx/php_location
в моем дистрибутиве (Debian Wheezy) я ничего не сделал с этим.
Поскольку я использую fastcgi_pass unix:/var/run/php5-fpm.sock;
в файле конфигурации Nginx для моего сайта, т.е. /etc/nginx/sites-available/example.com, я заменил его на fastcgi_pass 127.0.0.1:9000;
Теперь проблема в том, что я получаю 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, и поэтому, вероятно, он возвращается к значениям по умолчанию, которые используют сокет.