I have an immensely annoying problem with my phpmyadmin. It appeared out of the blue. No changes that I am aware of have been been to my dedicated server.
When i try to execute any query or show a view that takes more than 1 second to execute in my browser (firefox on windows 7, ie behaves the same), i get the following error:
the queries can or don’t need to have count(*). they work on tables with 5m — 50m rows.
sometimes the same error shows up when i click any link in phpmyadmin, such as «Browse», «Server» or «Structure».
php scripts cronned to run much more intensive queries on the same dedicated server work flawlessly.
Веб-сервер Nginx часто работает не только в качестве самого веб-сервера для отдачи контента, но и в качестве прокси, когда он вступает только посредником. Такая ситуация наблюдается намного чаще, чем можно было бы ожидать. Например, при работе с php-fpm и другими модулями динамических языков.
Именно в таком режиме может наблюдаться ошибка 504 gateway time out Nginx. В нашей сегодняшней статье мы попытаемся разобраться почему она возникает и как с ней бороться. Разберем несколько способов решения и причин.
Содержание
- Что значит 504 gateway time out Nginx?
- Как исправить 504 gateway time out Nginx?
- Выводы
Что значит 504 gateway time out Nginx?
Как я уже сказал, такая ошибка возникает, когда сервер Nginx работает в режиме прокси. Например, при использовании php-fpm или Apache. Дословно, она означает, что превышено время ожидания ответа от сервера. В нашем случае, превышено время ожидания ответа от php-fpm. Рассмотрим несколько причин такого поведения:
- Скрипт PHP или на другом языке полностью завис и уже не вернет никакого ответа;
- Скрипт работает очень долго, но в Nginx настроен интервал на сброс соединения если целевой сервер не ответил на запрос за отведенный строк;
- Сервер перегружен и не успевает обслужить всех клиентов, вернуть ответы на все запросы Nginx;
Дальше рассмотрим что можно сделать если вы встретились с ошибкой 504 gateway time out Nginx.
Как исправить 504 gateway time out Nginx?
Самый первый вариант — это если вашему серверу, php-fpm или apache не хватает ресурсов системы, например, памяти или процессора. Вы можете посмотреть свободную память с помощью команды free:
Нагрузку на процессор можно узнать командой htop:
Естественно, если вы видите, что PHP занимает все процессорное время, то значит проблема в ресурсах сервера. Вы можете покопаться в движке своего сайта, пытаться оптимизировать те или иные моменты, об этом будет отдельная статья или же выбрать более мощный VPS сервер.
Второй вариант — это если так и было запланировано, чтобы скрипт работал долго. В таком случае нужно настроить Nginx, чтобы он дождался ответа от Apache или php-fpm. Для решения проблемы в случае с php-fpm нужно только добавить две строчки в блок настройки fastgci:
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
Здесь 300 означает 300 секунд, для большинства скриптов, этого будет вполне достаточно, но вы можете еще больше увеличить значение если это нужно. Также ошибка 504 может возникать, когда Nginx используется в качестве прокси для Apache или любого другого веб-сервера, тогда нужно еще настроить время ожидания для прокси. Добавьте эти строки в секцию server:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Тут уже мы задаем таймаут 600 секунд для различных видов действий — подключения, отправки данных, чтения данных и так далее. После завершения настройки Nginx стоит перезапустить:
sudo systemctl restart nginx
Последний вариант, который мы рассмотрим — это скрипт завис. Если вы сами запускаете скрипт, то сразу увидите что зависло, но если такая ошибка встречается у пользователей, то это уже более серьезная проблема. Вы можете посмотреть встречаются ли вашим пользователям такие ошибки и где они встречаются с помощью команды:
fgrep -i » 504 » /var/log/nginx/access.log
Более подробную информацию иногда можно увидеть в error.log:
fgrep -i » 504 » /var/log/nginx/error.log
Дальше, если проблема именно в php-fpm, вы можете отследить какие скрипты выполняются медленно с помощью встроенной функции slow-log. Для ее активации добавьте следующие строки в конфигурацию вашего пула:
sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s
Здесь 5 секунд, означает, что в лог файл будут добавляться скрипты, которые выполняются дольше пяти секунд. Вы можете менять это значение по своему усмотрению. В логе вы сможете увидеть не только сами скрипты, но и трассировку методов, которые привели к проблемам:
Дальше останется только разобраться что с этим делать, например, оптимизировать скрипты или отключить лишние плагины.
Выводы
В этой статье мы рассмотрели как исправить 504 gateway time out Nginx 1.2 7, а также почему может возникнуть эта ошибка. Надеюсь, эта информация была полезной для вас.
Я настроил ispmanager, водрузил с его помощью nginx, вебсервер у меня работает как Apache MPM-ITK, а так же используется менеджер процессов PHP-FPM FastCGI
Увеличил до 80 мегабайт размер максимально загружаемого файла, чтобы можно было через phpmyadmin загрузить архив базы данных, который весит 32 мегабайта (сама база
Но при загрузке такого небольшого, казалось бы файла (при доступном ограничении 80 Мб) — мой phpmyadmin вылетает с ошибкой «504 Gateway Time-out, nginx/1.10.1»
Исследуя дальше эту тему, выяснил, что что Nginx не может достаточно долго получить ответ от сервиса PHP-FPM. Чтобы избавиться от этой ошибки, попробовал поднять время ожидания.
Обнаружил, что можно для отдельно взятого домена настраивать параметры nginx (для этого в ispmanager под root-ом, в списке доменов можно кликнуть на «Конфиг»)
Вписал там в разделе location @php параметр fastcgi_read_timeout 600;
после перезагрузки nginx с консоли командой
service nginx restart
результат остался прежним.
Что-то мне подсказывает, что я настроил время ожидания для домена, но скорее всего к phpmyadmin’y эти настройки не относятся и его нужно настраивать отдельно (что в переводе на русский — «сомнения»).
Уважаемый All, как мне заставbnm phpmyadmin принимать большие дампы, в случае, когда на сервере крутится nginx?
Источник: