Назад | Перейти на главную страницу

AWS ELB + обратный прокси (Nginx) + ELB: принудительный SSL

Я просмотрел / пытался предыдущие предложения, найденные в Интернете, безрезультатно.

В настоящее время у меня есть установка ELB перед моим обратным прокси-сервером Nginx, который затем передает трафик на 3 разных ELB, которые находятся перед 3 отдельными веб-приложениями (работающими на EC2). Мне нужно убедиться, что трафик, поступающий на первый прокси-сервер ELB + Rev, всегда является SSL. Затем прокси-сервер rev направляет различные приложения в зависимости от маршрута.

Вот фрагмент моего файла nginx / sites-available / example.conf:

server {
 listen 80;
 server_name staging.example.com;
 return 301 https://staging.example.com$request_uri;
}

server {
 listen 443 ssl;
 server_name staging.example.com;
 ssl_certificate /location
 ssl_certificate_key /location


 location /app1 {
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_pass http://ELB
 }

}

При использовании вышеперечисленного и пробе предыдущей информации, найденной в Интернете, после внедрения этот первый ELB перестанет работать. Если бы я затем перешел непосредственно к прокси-серверу rev, трафик не прошел, но страница не вышла бы с ошибкой, она была бы просто пустой.

Вопросы: 1. Предполагая, что мои настройки прокси-сервера выше верны, как только трафик становится https и входит в прокси-сервер ELB / Rev, будет ли он продолжаться через https к другим ELB? Другими словами, эти ELB должны иметь открытый входящий 443, или 80 будет работать как трафик, а затем переключится на http? 2. Нужно ли мне изменять какие-либо настройки в моей конфигурации location / app1, особенно настройки прокси?

Во-первых, позвольте мне убедиться, что я правильно понимаю ваш дизайн:

--- HTTPS --> ELB -> nginx --- HTTP ---> ELB1 --> server1
                           --- HTTP ---> ELB1 --> server2
                           --- HTTP ---> ELB1 --> server3

Это правильно?

Предполагая над является правильно, тогда, чтобы гарантировать, что только HTTPS входит в этот первый / интерфейсный EBL, вы можете настроить этот интерфейсный ELB с помощью прослушивателя HTTPS на порту 443. Вот и все.

Что касается вашего первого вопроса, запросы, исходящие из ELB на ваш внутренний сервер ( внешний интерфейс nginx) будет HTTP. Вы должны сделать все возможное, чтобы настроить ELB для использования SSL для внутренних соединений.

Это означает, что ваши серверные ELB нуждаются в слушателях только на порту 80 для HTTP-запросов. (Или порт 8080, или любой другой порт, который вы хотите использовать этими внутренними ELB.)

Одно предложение, которое я мог бы добавить, заключается в том, что вы создаете отдельную группу безопасности «frontend-elb» и отдельную группу безопасности «backend-elb». Внешний интерфейс ELB (и интерфейс nginx instance!) должны использовать группу безопасности "frontelb-elb", а все бэкэнд-ELB (и бэкэнд-экземпляры webapp!) должны использовать группу безопасности "backend-elb". Группа безопасности "frontend-elb" должна разрешать входящие запросы отовсюду (при условии, конечно, что вы хотите, чтобы ваши службы были общедоступными). Однако группа безопасности "backend-elb" должна разрешить только входящие соединения от группы безопасности "frontend-elb". Это гарантирует, что единственный способ доступ к вашим веб-приложениям осуществляется через этот интерфейсный интерфейс ELB, который, в свою очередь, гарантирует, что только запросы HTTPS будут доходить до ваших веб-приложений.

Что касается твоего nginx конфигурация прокси, я считать выглядит нормально. Однако я должен отметить, что AWS ELB автоматически установить X-Forwarded-ForX-Forwarded-Proto) заголовки; вам может не потребоваться явно указывать это в вашем nginx конфигурация.

Надеюсь это поможет!