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

AWS Beanstalk перенаправляет все приложение с http на https

Балансировщик нагрузки aws перенаправляет все запросы https на экземпляр ec2 через порт 80. Мне нужно каким-то образом перенаправить весь HTTP-запрос на https.

До сих пор я понял, что вам нужно как-то изменить экземпляр ec2 с помощью правил перенаправления, а затем сохранить экземпляр как новый AMI и указать beanstalk на новый AMI.

Я нашел следующее правило перезаписи, но, к сожалению, не знаю, что с ним делать.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

Я ssh'd в свой экземпляр ec2 и пошел /etc/httpd/ и это все, что я сделал. Я совершенно потерялся в том, что мне оттуда делать.

  1. Могу ли я изменить файл или создать новый?
  2. Если мне нужно изменить или создать новый файл, где бы он был или как бы я его назвал и куда бы он пошел?
  3. Может ли кто-нибудь предоставить точное содержимое файла
  4. Что мне делать после создания / изменения этого файла? Могу ли я просто перейти на страницу ec2, установить флажок рядом с моим экземпляром, щелкнуть действия и, наконец, создать изображение?

Если да, то что все это значит? Я не знаю, какие у меня здесь настройки.

Наконец, я предполагаю, что я просто захожу в конфигурацию на своей панели инструментов beanstalk и просто указываю свой env beanstalk на мой новый AMI и перезапускаю сервер. Это звучит правильно?

Если кто-то знает, как это сделать, или веб-сайт, подробно описывающий процесс, я бы оценил это.

Хочу отметить, что я использую Java-приложение на Tomcat. Я не уверен, повлияет ли настраиваемый AMI на увеличение размеров серверов.

так что тебе нужно сделать несколько вещей

  1. в вашем балансировщике нагрузки должны быть определены оба слушателя, то есть для порта 80 и порта 443
  2. в экземпляре ec2, в /etc/httpd/conf.d/elasticbeanstalk.conf - добавьте свое правило перезаписи в раздел виртуального хоста
  3. После этого, когда это сработает, вы можете захотеть создать образ ami, чтобы эти настройки сохранялись в образе ami, который вы можете использовать позже для создания дополнительных экземпляров.

Хотя это не то, о чем вы просили, мы делаем это через CloudFront. Это намного проще, чем то, что вы предлагаете, и вы получаете все дополнительные преимущества CloudFront CDN, чтобы облегчить нагрузку на ваши экземпляры beanstalk ec2.

Сначала настройте распространение с происхождение который указывает на ваш балансировщик нагрузки beanstalk (вы также можете создать собственное происхождение, указывающее на ваше доменное имя эластичного beanstalk). Затем создайте поведение с «Политикой протокола просмотра» на «Перенаправить HTTP на HTTPS».

Единственная загвоздка в том, что вам может понадобиться повторно загрузить ваш ssl-сертификат, чтобы добавить «путь», чтобы его можно было использовать в CloudFront.

aws iam upload-server-certificate --server-certificate-name certificate_object_name --certificate-body file://public_key_certificate_file --private-key file://privatekey.pem --certificate-chain file://certificate_chain_file  --path cloudfront_path

Для тех, кто какое-то время боролся, я нашел GitHub (от команды AWS) со всеми конфигурациями AWS, и это работает для перенаправления для Apache 2.2. (Конфиги для Apache 2.4 и Nginx см. По ссылке ниже).

Apache 2.2

  1. Создайте файл в корневом каталоге вашего приложения: КОРНЕВОЙ_ПРОЕКТ / .ebextensions / httpd / conf.d / elasticbeanstalk.conf (При использовании Java IntelliJ убедитесь, что он добавлен в последний артефакт .WAR)

  2. Добавьте следующие строки, чтобы включить перенаправление на виртуальном хосте:

    <VirtualHost *:80>
        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:8080/ retry=0
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost on
    
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
    </VirtualHost>
    

Чтобы увидеть больше примеров для Apache 2.4 и Nginx, посетите этот репозиторий GitHub:

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/java-tomcat

Кроме того, доступно множество других полезных конфигураций и примеров.

С уважением

Создайте файл с именем elasticbeanstalk.conf внутри папки /src/main/webapp/.ebextensions/httpd/conf.d/ в каталоге вашего проекта.

Скопировать и вставить этот код в файл elasticbeanstalk.conf.

Удалите следующие строки.

     Order deny,allow
     Allow from all

И поставьте вместо этого эту строчку.

     Require all granted

Измените строку

   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

к

   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Теперь сохраните файл, упакуйте свой проект и разверните его.