2010-07-13 2 views
6

У меня есть серверное приложение, которое работает в облаке EC2 Amazon. От моего клиента (браузера) я делаю HTTP-запрос, который загружает файл на сервер, который затем обрабатывает файл. Если много обработки (большой файл ), сервер всегда разыгрывает с ошибкой продолжения 504 всегда ровно через 120 секунд. Хотя я получаю эту ошибку, сервер продолжает обрабатывать запрос и завершает его (проверяется путем проверки базы данных), но я не вижу конечного результата на моем клиенте из-за таймаута.HTTP 504 таймаут через ровно 120 секунд

Я не знаю, почему это происходит. Кто-нибудь сталкивался с аналогичным 504 таймаутом? Есть ли какой-то промежуточный прокси-сервер, который не в моем контроле, который отключен?

+0

Не могли бы вы решить проблему? – Tony

ответ

0

Возможно, что таймауты браузера во время выполнения скрипта.

1

Предполагая, что возвращается правильный код состояния, проблема заключается в том, что промежуточный прокси-сервер отключается. «Сервер, действуя как шлюз или прокси, не получил своевременного ответа от восходящего сервера, указанного в URI». (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) Скорее всего, это указывает на то, что исходный сервер имеет какую-то проблему (т. е. занимает много времени для обработки вашего запроса), поэтому он не отвечает быстро.

Возможно, лучшим решением является повторное создание вашего серверного приложения, чтобы он отвечал кодом статуса «303 See Other»; то ваш клиент может получить данные в более поздней точке данных, как только сервер будет обработан и создаст конечный результат.

Редактировать: Еще одна идея состоит в том, чтобы повторно создать серверное приложение, чтобы оно отвечало кодом статуса 413 Request Entity Too Large, когда размер объекта запроса слишком велик. Это позволит избавиться от ошибок, хотя это может сделать ваше приложение менее полезным, если оно может обрабатывать только «маленькие» файлы «

Другие возможные решения:.

  • Увеличение значения тайм-аута прокси-сервера (если это под вашим контролем)
  • сделать запрос на другой сервер (если есть другой, более быстрый сервер с таким же приложением)
  • Сделайте свой запрос по-разному (если это возможно), так что вы посылаете меньше данных в то время
+0

Любые идеи для решения проблемы? Мой сервер отключается через 30 секунд. Тот же сценарий, загружающий большие файлы в Amazon EC2 – Tony

+0

Кроме перечисленных в списке? Простите, нет. –

5

У меня есть аналогичная проблема, и в моем случае я считаю, что это связано с соединением между Эластичной балансировкой нагрузки (ELB) и экземпляром EC2.

Для долгосрочного решения я перейду с ответом на состояние 303 «Ответ на исходный код + обратная обработка», предложенным james.garriss выше.

Для краткосрочного решения может быть возможно, чтобы поддержка Amazon увеличила тайм-аут ELB (см. Их ответ в https://forums.aws.amazon.com/thread.jspa?messageID=491594&#491594). К сожалению, похоже, что нет никакого способа изменить таймаут самостоятельно через API или консоль.

[Обновление] AWS теперь позволяет вам обновлять тайм-аут простоя либо через конфигурацию консоли, CLI или .ebextensions. См. http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html (спасибо @ Daniel Patz за обновление)

+2

Похоже, теперь вы можете настроить тайм-аут самостоятельно: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html –