Конфигурация ELB и Apache для веб-сайта HTTPS

Я настраиваю ELB для веб-сайта https, и у меня есть вопросы, касающиеся конфигурации портов...

Сейчас у меня такая конфигурация портов на ELB:

  • 80 (HTTP) переадресация на 80 (HTTP)
  • 443 (HTTPS) пересылка на 80 (HTTP)

И в моем случае у меня есть эта конфигурация Apache:

  • запросы к *:80 перенаправляются на https://www.mywebsite
  • *: настроено 443

Очевидно, это работает, но правильно ли это?

спасибо за помощь

Селин

PS: Когда я начал настраивать ELB, я указал 443 для переадресации на 443, но тогда мне пришлось отвечать на странные вопросы для аутентификации...


person Céline Aussourd    schedule 18.06.2013    source источник


Ответы (2)


Конфигурация, описанная в вопросе, не сработала, потому что она создала бесконечное перенаправление: 443 (ELB) переадресация на 80 (Apache) переадресация на 443 (ELB) переадресация на 80 (Apache) переадресация на 443 (ELB) и т. д.

Итак, я изменил конфигурацию ELB, чтобы иметь:

  • 443 (HTTPS) переадресация на 443 (HTTPS)
  • 80 (HTTP) переадресация на 80 (HTTP)

Когда я создал прослушиватель 443 (HTTPS), пересылающий на 443 (HTTPS), я не смог ответить на вопросы, касающиеся аутентификации. Когда я смотрю на описание ELB, я вижу «Внутренняя аутентификация: отключена».

Проверка работоспособности выполняется по протоколу HTTPS:443.

(Я также изменил группу безопасности экземпляра: только балансировщик нагрузки может получить доступ к экземпляру через порты 80 и 443)

Обновление:

Другое решение — открыть на экземпляре только порт 80:

  • 80 (HTTP) переадресация на 80 (HTTP)
  • 443 (HTTPS) пересылка на 80 (HTTP)

но использовать X-Forwarded-Proto, чтобы определить, использовал ли клиент HTTP или HTTPS, и перенаправить на HTTPS, только если X-Forwarded-Proto = http

Пример с Апачем:

<VirtualHost *:80>
    ...
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    ...
</VirtualHost>

Строка RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker была добавлена, чтобы проверка ELB не перенаправлялась. См. https://serverfault.com/questions/470015/how-should-i-configure-my-elb-health-check-when-using-namevirtualhosts-and-redir для других решений, касающихся проверки работоспособности.

Документация AWS, касающаяся X-Forwarded-Proto: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/x-forwarded-headers.html#x-forwarded-proto

person Céline Aussourd    schedule 19.06.2013
comment
Отличный ответ. Убедитесь, что прослушиватель ELB порта 80 указан как HTTP с сертификатом не указан — если вы укажете HTTPS, вы получите: 400 Bad Request — простой HTTP-запрос отправлен на HTTPS-порт - person storm_m2138; 22.06.2018

Это правильный способ сделать это. Вы можете настроить ELB для обработки SSL-завершения.

В некоторых случаях соответствия необходимо зашифровать весь путь до экземпляра. Если это не относится к вам, то вам не нужно вносить никаких изменений.

person datasage    schedule 18.06.2013