Почему я получаю 502 при попытке доступа к ELB DNS - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь разместить приложение ASP.NET Core на экземпляре EC2 со следующей настройкой (сверху вниз).Учитывая приведенную ниже настройку, я получаю статус работоспособности для экземпляра EC2, а также для целевой группы.Кроме того, если я проверяю состояние службы Kestrel на сервере, я вижу входящие запросы от проверок состояния Целевой группы с 200 ответами.

Проблема, с которой я сталкиваюсь, заключается в том, что, если я получаю доступ к ELB,Конечная точка DNS, я получаю ответ 502 (Bad Gateway).Почему это?Тем более, что я вижу на веб-сервере поступающие запросы на проверку работоспособности и получил 200 ответов. Однако я не вижу запросов, которые я явно задаю к конечной точке DNS ELB. Это похоже на то, что запросы к конечной точке DNS ELB фактически никогда не достигают веб-сервера.

Еще одна вещь, котораяне принимайте во внимание, что у меня есть сервер перехода в общедоступной подсети в том же VPC, что и частная подсеть, в которой находится экземпляр EC2.Я могу сделать запрос от сервера перехода на частный IP-адрес и получить ответ 200 с моим логином html.Казалось бы, все на веб-сервере правильно;что-то не так с этим.

Маршрут 53

Я использую хост-зону Route 53 для своего домена.HZ имеет запись A, которая указывает на Elastic Load Balancer .

Elastic Load Balancer

Трафик из домена (по портам HTTP иHTTPS) направляется на Application Load Balancer , прослушивающий HTTP (80) и HTTPS (443).Трафик HTTPS имеет Certificate Manager , назначенный общедоступному SSL-сертификату.Трафик HTTPS заканчивается здесь и передается нижележащим экземплярам как HTTP.

Целевая группа ELB

У меня есть целевая группа, указывающая на указанный экземпляр.Для целевой группы я нацелился на страницу входа в запущенное приложение и ожидаю ответа 200.

Группа автоматического масштабирования

У меня есть ASG, которая указываетдля целевой группы ELB.

веб-сервер

Для веб-сервера я использую экземпляр Amazon Linux 2 AMI с Kestrel, работающим за обратным прокси-сервером Nginx.Служба Kestrel размещает приложение ASP.NET MVC, работающее через порт 5000 (HTTP).

Экземпляр EC2 находится в частной подсети.В том же VPC и AZ есть открытая подсеть с подключенным Интернет-шлюзом .

. Для конфигурации запуска приложения .NET Core я использую стандартные заголовки переадресации.

К экземпляру EC2 подключена группа безопасности, разрешающая трафик HTTP и HTTPS из группы безопасности ELB и трафик SSH из переключателя, расположенного в общедоступной подсети в том же VPC.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я обнаружил, что моя конфигурация Nginx конфликтует с конфигурацией ELB. В итоге я восстановил nginx.conf в исходное состояние и предоставил более четко определенные пользовательские конфигурации в папке conf.d (здесь я создал файл .conf специально для моего приложения, которое маршрутизирует трафик так, как я хочу).

Я также сделал следующее, чтобы упростить свои намерения по роли каждой пьесы:

  1. Поскольку SSL завершается на ALB, я изменил Kestrel, чтобы он больше не прослушивал трафик 443 (HTTPS); он только слушает 80 (HTTP) трафика. На данный момент это нормально, потому что нет других членов VPC, которые представляли бы угрозу безопасности из-за трафика HTTP, проходящего мимо ELB. Выше ELB все все еще зашифровано.

  2. Я добавил слушателя ELB, который прослушивает как трафик 443, так и 80, и перенаправляет его целевой группе, которая нацелена только на 80 (помните, Kestrel теперь ищет только трафик на 80).

  3. Мне также нужно было изменить startup.cs на , а не UseHttpRedirection; снова SSL заканчивается на ELB.

Сочетание всех этих вещей решило мою проблему.

0 голосов
/ 03 февраля 2019

Интересно, так ли это, потому что заголовок, отправленный в NGINX, слишком велик?Вы можете увеличить допустимый размер в NGINX, изменив следующие настройки:

nginx.conf

http{
...
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
large_client_header_buffers 4 16k;
...
}

default.conf

location /{
    ...
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    ...
}
...