Я просмотрел / пытался предыдущие предложения, найденные в Интернете, безрезультатно.
В настоящее время у меня есть установка 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-For
(и X-Forwarded-Proto
) заголовки; вам может не потребоваться явно указывать это в вашем nginx
конфигурация.
Надеюсь это поможет!