Это может быть невозможной проблемой. Я все пробовал. Я чувствую, что там где-то есть парень в коммутаторе, закручивая усы.
Проблема:
У меня Amazon EC2 работает приложение. Он работает без проблем, когда есть только один экземпляр и нет балансировки нагрузки.
Но в моей рабочей среде у меня есть два идентичных экземпляра, которые работают за одним балансировщиком нагрузки и при выполнении определенных задач, таких как функция, которая создает PDF файл и прикрепляет его к электронной почте, ничего не происходит вообще и при использовании инструментов Google Developer с вкладкой "Сеть" я получаю сообщение об ошибке "504 Gateway Timeout" после того, как тайм-аут (я установил его на 30 секунд).
Моя база данных является внешней, на Amazon RDS.
Я думаю... Если бы я мог заставить клиента оставаться на связи с их начальным сервером, в который они вошли, эта проблема будет решена, потому что я понимаю, что время ожидания шлюза 504 происходит, когда экземпляр-1 пытается обратитесь к экземпляру-2, чтобы выполнить задачу.
Это происходит ТОЛЬКО КОГДА, используя балансировку нагрузки, но никогда не подключаясь прямо к одному из моих двух серверов.
Настройки балансировки нагрузки:
- У балансира нагрузки есть CRECORD на моем регистраторе, так что app.myapplication.com указывает на myloadbalancerDNSname.elb.amazonaws.com
- Балансировщик нагрузки имеет 2 здоровых экземпляра, каждый в одном регионе, но они находятся в разных зонах доступности.
- Балансировщик нагрузки использует те же группы безопасности, что и экземпляры (разрешить ВСЕ IP-адреса на портах 22, 80 и 443)
- Балансировщик нагрузки включил балансировку нагрузки в поперечнике.
- CORS (в Amazon S3) имеет возможность GET, POST, PUT, DELETE from * to * (я не знаю, как это связано с моими экземплярами, но в любом случае я сделал это в соответствии с инструкциями)
- У балансировщика нагрузки есть настроенные слушатели:
-
- Протокол балансировки нагрузки: порт балансировки нагрузки HTTP: 80 Протокол экземпляра: порт HTTP-экземпляра: 80
-
- Протокол балансировки нагрузки: порт балансировки нагрузки HTTPS: 443 Протокол экземпляра: порт HTTP-экземпляра: 80 (шифр выбран правильно для моего поставщика сертификатов, а поля SSL - 100%, верно).
Еще несколько идей:
Говоря, я не тестирую HTTPS, но вместо этого обычный HTTP. Я не уверен, что SSL настроен правильно, хотя мой поставщик сертификатов сказал, что это так. Причина, по которой я подозрительна, заключается в том, что когда я пытаюсь ввести https://app.myapplication.com, я получаю сообщение об ошибке "(неудачно) net:: ERR_CONNECTION_CLOSED" в Инструменты разработчика Google, на вкладке Сеть. Но это должно быть неприменимым, потому что у меня проблема даже при использовании обычного HTTP. Я могу устранить неисправность SSL позже.
Итак, чтобы повторить, моя проблема связана с проблемой "504 Gateway Timeout" при использовании некоторых функций, но также иногда случайным образом, а не загрузкой страницы (но редко). Эта проблема 504 происходит ТОЛЬКО КОГДА, используя балансировку нагрузки, но никогда не подключаясь прямо к одному из моих двух экземпляров.
Я не знаю, на какой вопрос спросить, потому что я следил за каждым документом в T, double и triple проверял все предложения по всему Интернету и НИЧЕГО.