Как победить ошибку 504 Gateway Time-out на VPS?

  • 19 Ответов
  • 2054 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
Здравствуйте!

На админской части сайта после запуска в ней по всей видимости тяжелой задачи по подхватыванию и распознаванию 180 подгруженных через ftp картинок, теперь отображается 504 Gateway Time-out с подписью nginx. В логе ошибок примерно такое
2016/01/11 13:28:14 [error] 7678#0: *1227364 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 62.76.80.15, server: mysite.ru, request: "GET /administrator HTTP/1.1", upstream: "http://mysite.ru:81/administrator", host: "www.mysite.ru"
Пытался увеличить лимиты в nginx.conf и делал service nginx restart после этого, но то ли слабо повысил, то ли ещё что, админка пока не открывается

Как можно разобраться в причине ошибки и её устранить? Может надо весь VPS перезагрузить и все заработает?

*

Онлайн voland

  • ********
  • 9334
  • [+]520 / [-]101
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
Ничего не надо делать.
ну ошибка, дальше работаем.

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
Ничего не надо делать.
ну ошибка, дальше работаем.
так мне надо в админку, а она открывается этой ошибкой :)


*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
Логи nginx посмотрите. И нагрузку на VPS в это время.
в логах указано то, что я привел в первом посте. А как узнать нагрузку на VPS на какой-то конкретный момент в прошлом?
Вот вывод текущего top:

*

Оффлайн dmitry_stas

в другом браузере пускает в админку?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
в другом браузере пускает в админку?
похоже я словил кэш :) сбросил кэш хрома и заработало, полдня ушло... :) все, зарубил себе на носу

P.S.вопрос про нагрузку в любой момент прошлого остается актуальным

*

Оффлайн dmitry_stas

скорее не кеш, а в сессии сохранилось (и не удалилось, потому что 504) что-то, из-за чего каждый раз заново был запуск
по всей видимости тяжелой задачи по подхватыванию и распознаванию 180 подгруженных через ftp картинок
и так по кругу.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

504 Gateway Time-out с

возможно, поможет предотвратить появление этой ошибки увеличение  max_execution_time (_http://php.net/manual/ru/info.configuration.php#ini.max-execution-time) для твоего PHP.
для конкретного скрипта можно используй set_time_limit() (_http://php.net/manual/ru/function.set-time-limit.php)
К примеру, в той функции, что загружает твои картинки - укажи set_time_limit(150) и обработай снова запрос. Посмотри на результат.

для всего сайта - напиши в httaccess
php_value max_execution_time 60
Глобально - измени max_execution_time в php.ini

Так же попробуй изменить max_input_time (_http://php.net/manual/ru/info.configuration.php#ini.max-input-time)

в логах указано то, что я привел в первом посте. А как узнать нагрузку на VPS на какой-то конкретный момент в прошлом?
Вот вывод текущего top:


Устанави на ВПС отличную утилиту мониторинга производительности системы с веб-интерфейсом. Советую Munin (munin-monitoring.org). У нее простые настройки.. ест мало памяти, дает обширную информацию, как по производительности самой системы (память, процессор, кэш, процессы в памяти, аптайм, запросы, хосты.. и прочее.. так же достаточно просто расширить функционал - установив дополнительные счетчики. Счетчики доступны на оф. сайте или в сети в виде текстовых файлов с алгоритмами.. ) Статистику смотришь через веб-интерфейс с любого браузера и с любой точки мира. (для этого просто установи веб-сервер, если не установлен..  и помести все файлы Munin в файловую систему веб-сервера, настрой .httaccess для доступа к статистике по учетным данным.)
« Последнее редактирование: 12.01.2016, 02:31:45 от Yura Vakulenko »

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
скорее не кеш, а в сессии сохранилось (и не удалилось, потому что 504) что-то, из-за чего каждый раз заново был запуски так по кругу.
Доброго утра! Спасибо. И как в этом случае надо выходить из ситуации?

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
для всего сайта - напиши в httaccess
php_value max_execution_time 60
Глобально - измени max_execution_time в php.ini
Спасибо за дельный совет, попробую воспользоваться как зависнет снова. Хотя вопрос, как я запущу задачу сновыми настройками php, если у меня снова будет 504 ошибка на весь экран?..
То, что вы в цитате посоветовали относится к Апачи. Для этого мне надо разобраться сначала, Апачи или Nginx у меня висит на админке. Прошу в этом помочь разобраться. Вот кусок настроек nginx.conf:
Спойлер
[свернуть]

*

Онлайн voland

  • ********
  • 9334
  • [+]520 / [-]101
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
PHP обрабатывается апачем, потом через нгинкс
Когда нгинкс не дожидается ответа (по дефолту 30 сек) он сам отдает 504
При это апач может дальше обрабатывать скрипт и может даже успешно его завершить если он успеет во временные рамки апача, по совету выше это 60 секунд.

Как вариант для выполнения долгих задач - временно (лучше временно) выставить секунд 600 (или сколько там точно хватит) и обращаться на сайт напрямую в апач по адресу site.ru:81/administrator

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
спасибо
Когда нгинкс не дожидается ответа (по дефолту 30 сек) он сам отдает 504
за это отвечает параметр proxy_read_timeout в настройках nginx?
Как вариант для выполнения долгих задач - временно (лучше временно) выставить секунд 600 (или сколько там точно хватит) и обращаться на сайт напрямую в апач по адресу site.ru:81/administrator
выставить для чего, где вы имели в виду?

*

Онлайн voland

  • ********
  • 9334
  • [+]520 / [-]101
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
спасибоза это отвечает параметр proxy_read_timeout в настройках nginx?
Не помню, почитайте доки

выставить для чего, где вы имели в виду?
php_value max_execution_time - вот этот параметр, чтоб скрипт отработал

*

Оффлайн dmitry_stas

server {
...
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
...
}
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

server {
...
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
...
}

так как у вас работают одновременно 2 вебсервера - вам нужно одновременно производить настройки времени выполнения скриптов на 2-х серверах... и таким образом, чтобы они были одинаковыми.. чтобы и в апатч было, к примеру 600 сек. и в нджинкс - 600 сек..  а то выйдет именно таким образом, как написал ниже темны лорд Воланд )
---------------
PHP обрабатывается апачем, потом через нгинкс
Когда нгинкс не дожидается ответа (по дефолту 30 сек) он сам отдает 504
При это апач может дальше обрабатывать скрипт и может даже успешно его завершить если он успеет во временные рамки апача, по совету выше это 60 секунд.
-------------
а для того, можно  воспользоваться функц. ini-set() _http://php.net/manual/ru/function.ini-set.php что во время выполнения скрипта (функции.. ) изменяет глобальные значения конфиг. PHP. т.е. они будут одинаковыми для обоих серверов сразу..

вот, к примеру.. загружаете вы 2000 картинок на сервер в 1 раз..  это у вас выполняет функция upload_images()
откройте код этой функции и укажите в самом начале..
ini_set('max_execution_time', '600');
ini_set('max_execution_time', '600');
ini_set('memory_limit', '256M');
ini_set('mysql.connect_timeout', '600');
ini_set('default_socket_timeout', '600');


больше опций и о опциях можно почитать тут.. _http://php.net/manual/en/ini.list.php
Узнать о текущих настройках поможет функция ini_get_all()

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
---------------
PHP обрабатывается апачем, потом через нгинкс
Когда нгинкс не дожидается ответа (по дефолту 30 сек) он сам отдает 504
При это апач может дальше обрабатывать скрипт и может даже успешно его завершить если он успеет во временные рамки апача, по совету выше это 60 секунд.
-------------
а для того, можно  воспользоваться функц. ini-set() _http://php.net/manual/ru/function.ini-set.php что во время выполнения скрипта (функции.. ) изменяет глобальные значения конфиг. PHP. т.е. они будут одинаковыми для обоих серверов сразу..
Судя по сообщению Воланда php отрабатывается только апачем, я nginx ждет готовый ответ. Поэтому я как-то не понимаю как функция ini-set повлияет на таймауты nginx
Люди добрые, просветите, зачем в файле настроек nginx введены две секции настроек с разным location? location / - это фронтенд, а location ~*(administrator|comprofiler)* - админка? смысл в более грамотном перераспределении ресурсов сервера?
Второй вопрос - правильно я понимаю, что и во фронте, и в админке у меня работает всегда связка apache+nginx?
« Последнее редактирование: 12.01.2016, 18:58:45 от borro »

*

Онлайн voland

  • ********
  • 9334
  • [+]520 / [-]101
  • СКАЙП утерян! Пишите в телеграм @volandku
    • Просмотр профиля
    • webstudio.pro
Есть отдача странички пользователю - нгинкс
А есть собственно выполнение скрипта - если это масштабирование картинок, оно может завершиться, а может и нет - за это апач отвечает.
Но если апач (+пхп) будет думать больше чем ждет нгинкс, то пользователь не узнает успех выполнения, а увидит 504.

Разжевано вроде уже больше некуда!

*

Оффлайн borro

  • ******
  • 1269
  • [+]21 / [-]0
  • желаю вам счастья
    • Просмотр профиля
    • Сайты, дизайн
Есть отдача странички пользователю - нгинкс
А есть собственно выполнение скрипта - если это масштабирование картинок, оно может завершиться, а может и нет - за это апач отвечает.
Но если апач (+пхп) будет думать больше чем ждет нгинкс, то пользователь не узнает успех выполнения, а увидит 504.

Разжевано вроде уже больше некуда!
Спасибо, это я уже понял. У меня немного другие вопросы были :)

*

Оффлайн dmitry_stas

зачем в файле настроек nginx введены две секции настроек с разным location? location / - это фронтенд, а location ~*(administrator|comprofiler)* - админка? смысл в более грамотном перераспределении ресурсов сервера?
Второй вопрос - правильно я понимаю, что и во фронте, и в админке у меня работает всегда связка apache+nginx?
можно и так сказать. я например по /administrator/ защиту от ботов настроил, отдаю им 404. у кого как. зачем конкретно у вас - без содержимого location не скажешь

Второй вопрос - правильно я понимаю, что и во фронте, и в админке у меня работает всегда связка apache+nginx?
99% что да
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций