Помилка Nginx + php-fpm “504 Gateway Time-out” з майже нульовим завантаженням (на тестовому сервері)


29

Після налагодження протягом 6 годин - я відмовляюся від цього: |

У нас є nginx + php-fpm + mysql в локальній мережі з майже 100 wordpress (створені та використовуються різними дизайнерами / розробниками, які працюють над налаштуванням тестового wordpress)

Ми використовуємо nginx без жодних проблем вже давно.

Сьогодні раптом - nginx почав повертати "504 тайм-аут шлюзу" невдало ...

Я перевірив журнал помилок nginx для віртуального хоста ...

2010/09/06 21:24:24 [error] 12909#0: *349 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *349 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:11 [error] 12909#0: *443 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 21:25:12 [error] 12909#0: *443 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:08:32 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:33 [error] 12909#0: *1025 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:09:40 [error] 12909#0: *1064 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:44 [error] 12909#0: *1313 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"
2010/09/06 22:24:53 [error] 12909#0: *1313 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.1, server: rahul286.rtcamp.info, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "rahul286.rtcamp.info"

Під час запуску php-fpm на порт 9000 через режим TCP, я запустив "netstat | grep 9000" і помітив щось незвичне ... (Вставте тут частковий вихід для зручності читання)

tcp        9      0 localhost:9000          localhost:36094         CLOSE_WAIT  14269/php5-fpm  
tcp        0      0 localhost:46664         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36135         CLOSE_WAIT  -               
tcp     1257      0 localhost:9000          localhost:36125         CLOSE_WAIT  -               
tcp        9      0 localhost:9000          localhost:36102         CLOSE_WAIT  14268/php5-fpm  
tcp        0      0 localhost:46662         localhost:9000          FIN_WAIT2   -               
tcp      745      0 localhost:9000          localhost:46644         CLOSE_WAIT  -               
tcp        0      0 localhost:46658         localhost:9000          FIN_WAIT2   -               
tcp     1265      0 localhost:9000          localhost:46607         CLOSE_WAIT  -               
tcp        0      0 localhost:46672         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1257      0 localhost:9000          localhost:36119         CLOSE_WAIT  -               
tcp     1265      0 localhost:9000          localhost:46613         CLOSE_WAIT  -               
tcp        0      0 localhost:46646         localhost:9000          FIN_WAIT2   -               
tcp     1257      0 localhost:9000          localhost:36137         CLOSE_WAIT  -               
tcp        0      0 localhost:46670         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1265      0 localhost:9000          localhost:46619         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46668         ESTABLISHED -               
tcp        0      0 localhost:46648         localhost:9000          FIN_WAIT2   -               
tcp     1336      0 localhost:9000          localhost:46670         ESTABLISHED -               
tcp        9      0 localhost:9000          localhost:36108         CLOSE_WAIT  14274/php5-fpm  
tcp     1336      0 localhost:9000          localhost:46684         ESTABLISHED -               
tcp        0      0 localhost:46674         localhost:9000          ESTABLISHED 12909/nginx: worker
tcp     1336      0 localhost:9000          localhost:46666         ESTABLISHED -               
tcp     1257      0 localhost:9000          localhost:46648         CLOSE_WAIT  -               
tcp     1336      0 localhost:9000          localhost:46678         ESTABLISHED -               
tcp        0      0 localhost:46668         localhost:9000          ESTABLISHED 12909/nginx: wo             

Наведено безліч пар "CLOSE_WAIT" та "FIN_WAIT2", як зазначено нижче (у вихідному висновку):

tcp     1337      0 localhost:9000          localhost:46680         CLOSE_WAIT  -               
tcp        0      0 localhost:46680         localhost:9000          FIN_WAIT2   -

Зверніть увагу на порт 46680 вище.

Я ввімкнув журнал помилок повільних запитів mysql, але він не працював.

Відтепер перезапуск php5-fpm щохвилини за допомогою cronjob (див. Команду нижче), підтримуючи все "гладко", але я ненавиджу печворк і хочу вирішити це ...

1 * * * * service php5-fpm restart > /dev/null

Я широко шукав в Google - не отримав допомоги. Як уже згадувалося, це тестовий сервер у локальній мережі, завантаження процесора ніколи не переступає 0,10, а також використання пам'яті також нижче 25% (у системі встановлено 2 Гб оперативної пам’яті та ubuntu-сервер). Отже, якщо ви знайдете заплутаний час, щоб допомогти мені. принаймні крапля натяк.

Заздалегідь дякую за допомогу.

-Рахул

(зверніть увагу - це репостінг - http://forum.nginx.org/read.php?11,127694 )

Оновлення: я знайшов відповідь, яка розміщена нижче.

Відповіді:


31

Я знайшов відповідь у своєму дописі на форумі nginx - http://forum.nginx.org/read.php?2,127854

У моєму випадку відповідь полягає у встановленні:

request_terminate_timeout=30s

у конфігурації php-fpm (зазвичай /etc/php5/fpm/php-fpm.conf)

Зверніть увагу, ви можете використовувати й інші значення, крім 30-х.

Я використовував це, щоб відповідати моєму значенню в головному php.iniфайлі, який:

max_execution_time = 30

Дякую всім. :-)


5
Ця конфігурація може бути також знайдена у файлі www.conf. Дякуємо за відповідь, але, здається, це зробило трюк.
eddiemoya

2
Це директива басейну рівня, ви отримаєте повідомлення про помилку при спробі поставити його в PHP-fpm.conf в [global]розділ. Він працює там лише у тому випадку, якщо ви також маєте там свої конфігурації пулу. Також: request_terminate_timeout документи .
tanius

Якщо це правильна відповідь, яку я ДУЖЕ ПОТРІБНО, то ця п’ятниця буде найкращою за 2015 рік.
Філіп

2
Я виявив, що введення request_terminate_timeout=30sу мій php-fpm.confфайл спричинило помилку (111 з'єднання відмовлено). Коли я перемістив його до свого www.confфайлу, він працював.
AJB

У CentOS 7.2 під час використання php7 запит_terminate_timeout розміщено у: /etc/php-fpm.d/www.conf
надавків

16

Ось як воно вирішило мою проблему:

внести наступні зміни в /etc/nginx/nginx.conf в http {section

proxy_connect_timeout  600s;
proxy_send_timeout  600s;
proxy_read_timeout  600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

а потім перезапустіть nginx

/etc/init.d/nginx перезапуск


2
Так, це насправді не схоже на те, що це має щось спільне з проблемою, яку має людина, яка задає питання.
HopelessN00b

3
але, на щастя, це мені було потрібно :)
luchaninov

Це не вирішило мою проблему, але це дозволило мені побачити фактичну помилку замість повідомлення про час очікування, що призвело до фактичної проблеми.
Майкл

4

Якщо ви використовуєте php 5.3, збільште відставання.

Якщо ви використовуєте php 5.2, підкріпіть патч, щоб збільшити розмір відставання від 128.

Також використовуйте unix-сокет, а не розетку TCP. unix: /tmp/php5-cgi.sock (або відповідний шлях)


Я повинен був би погодитися, особливо з використанням unix socket.
Метт

Дякую karmawhore за відповідь. Я знайшов рішення у списку розсилки nginx.
rahul286

@ rahul286 який відповідав? Я зацікавлений!
breiti

@breiti дивіться мою ансер нижче - serverfault.com/a/179136/17440
rahul286

3

Щиро дякую

request_terminate_timeout = 30 с

Це прекрасно працює для мене

але мені довелося вставити рядок у цей файл: "/etc/php5/fpm/pool.d/www.conf", тобто у "Робочому розділі".

PHP 5.3.21-1 - Wordpress 3.5.1

http://php-fpm.org/wiki/Configuration_File


У мене було поєднання факторів, які призводять до помилки 502, ваш рецепт зробив магічний трюк! велике спасибі!
Хорхе Вісенте Мендоса

2

у моєму випадку (те саме повідомлення про помилку nginx) деякі проблемні сценарії php не закінчуються виконувати і чекати чогось, в результаті чого більше не буде php5-fpm дітей для nginx вибору.

виправити:

  1. додати обмеження строку виконання інших згаданих це повідомлення. request_terminate_timeout=30s
  2. підвищити кількість дітей. і все працювало як шарм. pm.max_spare_servers=16 pm.min_spare_servers=2

тепер усе працювало як шарм.


У мене в PHP-скрипті був тривалий запит на зовнішнє з'єднання. Шукайте ці тривалі завдання і поставте для них тайм-аут.
Алі Надалізаде

1

У мене була така ж проблема, і я вирішив її, повністю видаливши Apache:

yum remove httpd

Після цього я рекомендую перезавантажити і PHP, і NGINX:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

1
Тоді у нас на сервері не було апачей. Радий знати ваш випадок, оскільки це може допомогти нам у майбутньому.
rahul286

0

У мене ж проблема виникла після видалення rabbitmq з сервера. Нічого з вищезазначеного не було корисним, перевстановлення всіх модулів php5 не вирішило проблему. У мене на цьому сервері був Debian 8.2. Надія буде комусь корисною.


-1

Це також може допомогти людям:

Залежно від того, яка ваша установка, ви повинні переглянути параметри конфігурації fastcgi, а також php ... в моєму випадку (я використовую apache2 + php5-fpm), а час_виконання max_виконання також залежить від того, як довго модуль fastcgi чекає відповіді ( -відпуск-час) ...

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer


навіщо використовувати apache2 ?? Я маю на увазі, що ви можете використовувати nginx безпосередньо для взаємодії з php5-fpm. Не потрібно використовувати Apache, коли у вас є nginx!
rahul286

Якщо ви використовуєте nginx, якщо інші НЕ використовують nginx, сподіваємось, це допоможе їм. :-) ... Я натрапив на цю сторінку, шукаючи Apache2 + php5-fpm, пов'язане питання
farinspace

добре. Я думав, що ви використовуєте Nginx разом з Apache для скриптів PHP, як якийсь pople використовував його в минулому.
rahul286
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.