Подтвердить что ты не робот

Как заставить https на эластичный бобовый шток?

Я не могу заставить https на свободном уровне использования эластичного бобового стебля.

Я пробовал следующее предложение в Как заставить https на эластичный beanstalk Amazon без проверки работоспособности

Использование этого правила перезаписи Apache

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/status$ 
RewriteCond %{REQUEST_URI} !^/version$ 
RewriteCond %{REQUEST_URI} !^/_hostmanager/ 
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Когда я пытаюсь это сделать, HTTP-запросы не перенаправляются на https, как хотелось бы. Вместо этого страница http загружается нормально. Я также попытался использовать заголовок X-Forwarded-Port с тем же результатом.

Я также пробовал следующее правило перезаписи

RewriteCond %{SERVER_PORT} 80
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

И это правило вызывает цикл перенаправления. Таким образом, казалось бы, что правила перезаписи apache не собирают заголовки балансировки эластичной нагрузки X-Forwarded-Port и X-Forwarded-Proto, но и цикл перенаправления - это не то, что я собираюсь сделать.

Пожалуйста, помогите. Я новичок в AWS, Elastic Beanstalk и не очень хорошо знаком с правилами Apache. Я не слишком уверен, куда идти отсюда. Спасибо.

4b9b3361

Ответ 1

Этот ответ предполагает, что вы уже включили https в группе безопасности балансировки нагрузки, добавили сертификат SSL в балансировщик нагрузки, добавили 443 в порты, перенаправленные балансировщиком нагрузки, и указали свое доменное имя в среде Elastic Beanstalk с помощью Route 53 (или эквивалентная служба DNS).

ПРИМЕЧАНИЕ. Этот ответ относится к средам с эластичным beanstalk, которые используют Apache. Он также может не работать для развертывания на докере.

Все, что вам нужно сделать, это добавить в один из ваших .config файлов в каталог .ebextensions вашего проекта следующее:

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            RewriteEngine On
            <If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
            RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
            </If>

Описание

Это умеренно прямо за пределами эластичного бобового стебля. Обычно добавляется правило перезаписи Apache, например:

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

Или, если за балансиром нагрузки, как и в этом случае:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Однако эти конфигурации работают только в блоке <VirtualHost>. Изменение блока RewriteCond на <If> позволяет корректно работать за пределами блока <VirtualHost>, что позволяет нам вставить автономный конфигурационный файл Apache. Обратите внимание, что стандартная установка Apache в CentOS (включая настройку на ElasticBeanstalk) включает все файлы, соответствующие /etc/httpd/conf.d/*.conf, которые соответствуют пути файла, в котором мы храним этот файл.

Часть условия -n '%{HTTP:X-Forwarded-Proto}' предотвращает перенаправление, если вы не находитесь за балансировщиком нагрузки, что позволяет вам иметь общую конфигурацию между производственной средой с балансировщиком нагрузки и https и промежуточную среду, которая представляет собой единый экземпляр и не имеет https. Это не обязательно, если вы используете балансировщики нагрузки и https во всех своих средах, но это не повредит.

Плохие решения, которые я видел

Я видел много плохих решений этой проблемы, и стоит прочесть их, чтобы понять, почему это решение необходимо.

  • Использовать Cloudfront:. Некоторые люди предлагают использовать не кэшированную настройку Cloudfront перед Elastic Beanstalk для перенаправления HTTP на HTTPS. Это добавляет совершенно новую услугу (что добавляет сложности), что не совсем подходит (Cloudfront - это CDN, это не правильный инструмент для принудительного HTTPS для наследуемого динамического контента). Конфигурация Apache - это нормальное решение этой проблемы, а Elastic Beanstalk использует Apache, чтобы мы могли идти.

  • SSH на сервер и...: Это совершенно противоречит точке Elastic Beanstalk и имеет так много проблем. Любые новые экземпляры, созданные автомасштабированием, не будут иметь модифицированную конфигурацию. Любая клонированная среда не будет иметь конфигурацию. Любое количество разумного набора изменений среды уничтожит конфигурацию. Это такая плохая идея.

  • Перезаписать конфигурацию Apache с новым файлом: Это попадает в правильную область решения, но оставляет вас в кошмаре обслуживания, если Elastic Beanstalk изменяет аспекты настройки сервера (что они очень хорошо может сделать). Также см. Проблемы в следующем элементе.

  • Динамически редактировать конфигурационный файл Apache, чтобы добавить несколько строк: Это достойная идея. Проблемы с этим в том, что он не будет работать, если Elastic Beanstalk когда-либо изменяет имя своего конфигурационного файла Apache по умолчанию и что этот файл может быть перезаписан, когда вы меньше всего ожидаете: https://forums.aws.amazon.com/thread.jspa?threadID=163369

Ответ 2

EDIT: пока мне нравится этот ответ, сейчас очень старый. AWS придумал новые сервисы (например, Certificate Manager), которые делают часть этого ответа устаревшей. Кроме того, использование папки .ebextensions с Apache является более чистым способом обработки этого перенаправления, как описано выше.

Если вы размещаете свой сайт на S3, часть этого ответа может по-прежнему вам полезна.


Это сработало для меня:

  • Загрузите сертификат в AWS, используя консольную команду aws. Структура команды:

    aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/
    
  • В приложении Elastic Beanstalk перейдите в Конфигурация Сетевой уровень Балансировка нагрузки и нажмите кнопку значок передачи.

  • Выберите Безопасный порт прослушивателя как 443. Выберите Протокол как HTTPS. Выберите CERTIFICATE_NAME от шаг 2 для идентификатора сертификата SSL. Сохраните конфигурацию.

  • Перейдите в консоль . Нажмите Экземпляры EC2. Нажмите Балансировщики нагрузки. Нажмите балансировку нагрузки. Нажмите Экземпляры и прокрутите вниз, чтобы просмотреть экземпляры EC2, назначенные этому балансировщику нагрузки. Если экземпляр EC2 имеет то же имя, что и ваш URL-адрес приложения (или что-то близкое), обратите внимание на DNS Name для балансировки нагрузки. Он должен быть в формате awseb-e-...

  • Вернитесь в консоль . Нажмите CloudFront. Нажмите Создать рассылку. Выберите дистрибутив Веб.

  • Настройте дистрибутив. Задайте свое Имя домена происхождения в DNS-имя балансира нагрузки, которое вы нашли в шаге 5 . Установите Протокол протокола просмотра на Перенаправить HTTP на HTTPS. Установите строки прямого запроса на Да. Установите Альтернативные имена доменов (CNAME) на URL-адреса, которые вы хотите использовать для своего приложения. Установите сертификат SSL на CERTIFICATE_NAME, который вы загрузили в шаг 2. Создайте свой дистрибутив.

  • Нажмите на имя своего дистрибутива в CloudFront. Нажмите Происхождение, выберите источник и нажмите Изменить. Убедитесь, что Протокольная политика происхождения < соответствует. Возвращаться. Нажмите Поведение, выберите источник и нажмите Изменить. Измените Переслать заголовки на белый список и добавьте Хост. Сохранить.

Примечание: Я также написал более длинное руководство.

Ответ 3

Самое лучшее для меня не работает. <If> директива работает только с Apache 2.4+, но ElasticBeanstalk имеет версию 2.2.x.

Итак, следуя тому же совету, что и выше. Создайте файл с именем .ebextensions/https_rewrite.config со следующим содержимым

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            LoadModule rewrite_module modules/mod_rewrite.so
            RewriteEngine On
            # This will enable the Rewrite capabilities
            RewriteCond %{HTTPS} !=on
            # This checks to make sure the connection is not already HTTPS
            RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Кажется, это работает для меня.

О том, как создать этот файл в вашем файле WAR, см. в этом :

Ответ 4

Изменить: Решение Zags более общее и правильное. Я рекомендую его по моему (что специфично для python env)

Здесь вы найдете чистое и быстрое решение, которое позволяет избежать взлома wsgi.conf или использования CloudFront

В вашем .ebextensions/some_file.config:

# Redirect HTTP to HTTPS
  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      <Directory /opt/python/current/app/>
      RewriteEngine on
      RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
      RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      </Directory>

Я чувствую, что это слишком легко, но, похоже, работает нормально.

Также обратите внимание, что я явно перенаправляю HTTP вместо "не HTTPS".

Ответ 5

Я пытаюсь перенаправить эластичный beanstalk с loadbalancer в 2018 году. Ни один из вышеперечисленных ответов не работает в моей среде. Несколько проблем, которые я использовал:

  • Я пробовал самый проголосовавший ответ, но мой кот - версия 2.7. Он не поддерживает.

  • Я использовал команду container_commands и скопировал параметр 00_applications. AWS просто игнорирует его.

Итак, наконец, я начал работать, читая это: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html

Вот что я делаю:

Я воссоздал структуру папок:

.ebextensions 
 - httpd
  -conf.d
   -ssl.conf

И вот это содержимое ssl.conf

<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  <Proxy *>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>

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

Ответ 6

Он работает для меня следующей командой:

RewriteCond %{HTTP:X-Forwarded-Port} !=443

и без проверки https:

RewriteCond %{HTTP:X-Forwarded-Proto} !https

Похоже, что ELB меняет значение X-Forwarded-Proto на http (даже по протоколу TCP).

Ответ 7

Ни один из вышеперечисленных ответов не работал у меня, но некоторые помогли мне разобраться в ответе, который сработал у меня Также я нашел приведенный ниже URL-адрес, который помог http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html

Я создал структуру файлов, упомянутую в вышеприведенном URL, чтобы изменить 2 файла httpd.conf 00_application.conf

скопируйте весь httpd.conf из вашего экземпляра и поместите его в свой код под .ebextention в структуре папок, упомянутой в приведенной выше ссылке. Затем просто добавьте строку ниже этого файла в свой проект

LoadModule rewrite_module modules/mod_rewrite.so

Сделайте то же самое для 00_application.conf, скопируйте его из своего экземпляра и поместите его в свою базу кода под .ebextention в httpd/conf.d/elasticbeanstalk/00_application.conf Теперь отредактируйте этот файл и добавьте ниже между VirtualHost

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Теперь разверните свой код Он должен работать.

Ответ 8

Мне было трудно понять это, поэтому после того, как я придумал решение, я написал подробное объяснение моего решения, надеюсь, поможет кто-нибудь другой. Это относится к приложениям Tomcat 8, Apache2 и Spring Boot. Есть действительно полезные примеры ebextension в лабораторных гидах AWS.

Резюме того, что сработало для меня:

  • Создайте файл в /src/main/webapp/.ebextensions/httpd/conf.d/elasticbeanstalk.conf
  • Добавить rewrite conds/rules с осторожностью, чтобы включить "LoadModule rewrite_module modules/mod_rewrite.so"
  • Развертывание в AWS EBS

Вот пример Spring загрузочного приложения.

Ответ 9

На эластичном beanstalk вы можете просто добавить свою конфигурацию, чтобы AWS переписать их, это позволит вам перезаписать конфигурацию веб-сервера и отправить свою собственную конфигурацию.

Просто добавьте следующий файл в путь:.ebextensions\httpd\conf.d

Содержимое файла:

<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>

".ebextensions" - это стандартная папка конфигурации в AWS, а остальные просто указывают на файл и папку, которые вы хотите перезаписать. Если файл или папка не существует, просто создайте их.

Ответ 10

У меня есть следующие конфигурации для эластичного бобового стека (64-битный Amazon Linux 2016.09 v2.3.1 с Tomcat 8 Java 8). Я создал каталог .ebextensions и добавил файл YAML.config с условиями перезаписи

Загас решение, описанное выше (что очень сложно), не работает для меня.

  • Потому что условие "Если" неизвестно
  • Из-за Apache 2.2 у меня нет mod_rewrite.so, включенного в мой файл httpd.conf.

Это решение имеет для меня больше смысла, но и это не работает. Ничего не происходит, и я не вижу файл "ssl_rewrite.conf" в каталоге "conf.d".

Третьим решением было добавить файлы "run.config" и "ssl_rewrite.conf" в каталог ".ebextendsion".

run_config содержит

container_commands:
copy-config:
command: "cp .ebextensions/ssl_rewrite.conf /etc/httpd/conf.d"

ssl_rewrite.conf содержит

LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

ssl_rewrite.conf создается под "conf.d" directcotry, но перенаправление с http на https не работает.

Единственное работающее решение для меня заключалось в том, чтобы добавить следующие строки в "/etc/httpd/conf.d/elasticbeanstalk/00_application.conf"

<VirtualHost *:80>
......
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
......
</VirtualHost>

но это временное решение, и если машина заменена, мое перенаправление https исчезнет.

Ответ 11

Включение HTTPS через переменную среды

Мне нужно было применять HTTPS только для нашей продакшен среды, а не для разработки и промежуточных версий, которые также находятся на Elastic Beanstalk, но не используют балансировщик нагрузки (и поэтому не могут быть назначены сертификату напрямую).

Я использую переменную окружения USE_HTTPS. Мы ssl_rewrite.conf файл ssl_rewrite.conf тогда и только тогда, когда USE_HTTPS имеет значение true.

.ebextensions/файлы/ssl_rewrite.conf

RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</If>

.ebextensions/https.config

files:
  "/home/ec2-user/https_setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      echo "USE_HTTPS env var: ${USE_HTTPS,,}"
      outfile=/etc/httpd/conf.d/ssl_rewrite.conf
      if [ "${USE_HTTPS,,}" == "true" ]; then
        echo "Configure SSL rewrite"
        cp .ebextensions/files/ssl_rewrite.conf $outfile
        chmod 644 $outfile
        chown root:root $outfile
      else
        [ -f $outfile ] && rm $outfile
        echo "Do not use SSL"
        exit 0
      fi

container_commands:
  01_https_setup:
    command: "/home/ec2-user/https_setup.sh"

Обратите внимание, что если вы измените USE_HTTPS, вам необходимо USE_HTTPS приложение, чтобы изменения вступили в силу. Вы также можете удалить команды echo в файле https.config если хотите.

Ответ 13

Почему бы вам просто не поместить файл .htaccess в корневую папку? Таким образом, вы можете просто протестировать и отладить его. И если вы включите его в .zip, он будет автоматически развернут во всех экземплярах снова.

Просто используйте .htaccess:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Ответ 14

Обратите внимание, что самый проголосовавший ответ немного устарел. Ответ А Павла на самом деле правильный ответ. Ссылка, предоставленная в его ответе, - AWS (так что рекомендуемый способ переопределить вашу конфигурацию Apache, чтобы перенаправить с HTTP на HTTPS при запуске приложения на Elastic Beanstalk).

Есть одна очень важная вещь. Если вы развертываете более одного веб-приложения, добавление папки .ebextensions внутри одного из ваших веб-приложений не будет работать. Вы заметите, что Non из сконфигурированных конфигураций записывается или создается. Если вы развертываете несколько веб-приложений в среде эластичного beanstalk, вам необходимо прочитать эту статью AWS Java Tomcat Развертывание нескольких файлов WAR на Elastic Beanstalk

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

MyApplication.zip
├── .ebextensions
├── foo.war
├── bar.war
└── ROOT.war

Если внутри каждого файла WAR существует папка .ebextentions, вы заметите, что она полностью игнорируется, и никакие изменения конфигурации не будут выполнены.

Надеюсь, это поможет кому-то еще.

Ответ 15

Мы решили это на нашем сервере, правильно обработав X-Forwarded-Proto.

Это наш конфигуратор Grails, но он поможет вам с идеей:

    grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
    grails.plugin.springsecurity.portMapper.httpPort = 80
    grails.plugin.springsecurity.portMapper.httpsPort = 443
    grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
    grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'
    grails.plugin.springsecurity.secureChannel.definition = [
        [pattern: '/**', access: 'REQUIRES_SECURE_CHANNEL']
    ]

Ответ 16

Чтобы продлить еще два ответа на этот вопрос fooobar.com/questions/124626/..., fooobar.com/questions/124626/.... Для пользователей, загружающих spring, которые развертывают свои службы на AWS с помощью ELB, и вам необходимо пошаговое руководство, вы можете добавить файл conf.conf в src/main/webapp/.ebextensions/httpd/conf.d/in ваш проект.

<Предварительно > <код > ЦСИ --главный ----Ява ----Ресурсы ---- WebApps ------. ebextensions -------- HTTPD ---------- confd ------------ ****. Конф Код >

****. conf выглядит следующим образом. Заметил, что у меня есть сайт для тестирования с одним экземпляром, поэтому я добавляю условие, чтобы исключить его.

  < VirtualHost *: 80 >  Модули LoadModule rewrite_module/mod_rewrite.so
  RewriteEngine On  RewriteCond% {HTTP: X-Forwarded-Proto}! Https  RewriteCond% {HTTP_USER_AGENT}! ELB-HealthChecker  RewriteCond% {HTTP_HOST}! Testexample.com #excludes тестовый сайт  RewriteRule (. *) Https://% {HTTP_HOST}% {REQUEST_URI}
  < Прокси > >    Отказаться, разрешить    Разрешить от всех  </прокси >
  ProxyPass/http://localhost: 8080/retry = 0  ProxyPassReverse/http://localhost: 8080/  ProxyPreserveHost on
  ErrorLog/var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>
Код>

После этого не забудьте добавить "ресурс" в maven-war-plugin в свой pom.xml, чтобы получить вышеуказанную конфигурацию.

<Предварительно > <код > < плагин >    < идентификатор_группа > org.apache.maven.plugins </GroupID>    < артефакт > Maven-плагин войны </артефакт >    < & конфигурация GT;        <webResources>            & Л; ресурс >              <! - некоторый другой ресурс, настроенный вами самостоятельно →            </ресурс >            & Л; ресурс >               < & каталога GT; SRC/основная/WebApps/.ebextensions </каталог >                <TargetPath> .ebextensions </TargetPath>                & Л; фильтрация > истинно </фильтрации >            </ресурс >        </webResources>    </конфигурации >    < & версии GT; 2.1.1 </& версии GT;  </плагин > Код >

Наконец, скопируйте и подтолкните свой код, подождите код и код кода AWS, чтобы забрать свой код из своего репозитория и развернуть в beanstalk-среду или просто упаковать свой проект в военный файл и загрузить его в среду beanstalk AWS.

Ответ 17

AWS не принимает unserscores (_) в headders, в то время как мы можем использовать (-), So Удалить подчеркивания из переменных заголовка, например: - header_var_val = "some value" заменить его headervarval = "some value". Меня устраивает.

Ответ 18

На всякий случай все еще борется:

Я боролся в течение некоторого времени и, наконец, я нашел GitHub (из команды AWS) со всеми конфигурациями AWS, а приведенный ниже пример работает для перенаправления HTTP> HTTPS для Apache 2.2. (Для конфигураций для Apache 2.4 и Nginx см. Ссылку ниже).

Apache 2.2

  1. Создайте файл в корневом каталоге вашего приложения: YOUR_PROJECT_ROOT/.ebextensions/httpd/conf.d/elasticbeanstalk.conf (В случае использования IntelliJ/Java убедитесь, что он добавлен в финальный артефакт 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

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

С уважением

Ответ 19

С новым Application Load Balancers вы можете сделать это довольно тривиально сейчас...

Убедитесь, что вы установили один из них во время настройки среды EB (по-прежнему используется классический балансировщик нагрузки). Вы не можете изменить тип после создания среды, поэтому создайте его заново

После этого перейдите в настройки EC2 → Балансировщики нагрузки. Нажмите на балансировщик нагрузки, который вы создали для своей среды EB. Вы должны убедиться, что вы настроили прослушиватель HTTPS перед этой задачей, поэтому убедитесь, что вы прослушиваете HTTPS 443 с сертификатом SSL и перенаправляете трафик на ваши экземпляры с HTTP на 80.

Затем добавьте новый прослушиватель, который прослушивает HTTP, и добавьте действие по умолчанию "Redirect to:". Убедитесь, что вы установили HTTPS в качестве протокола, 443 в качестве порта, "Исходный хост, путь, запрос" в качестве опции и, наконец, 301 в качестве кода ответа HTTP.

После добавления этого прослушивателя убедитесь, что вы обновили свою группу безопасности EC2 Load Balancer, чтобы принимать как HTTPS, так и HTTP-соединения, вы увидите небольшой предупреждающий знак на слушателе, чтобы напомнить вам!

Крис

Ответ 20

Я просто развернул .htaccess, ничего особенного:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ответ 21

Если вы используете среду с балансировкой нагрузки, вы можете следовать инструкциям Конфигурирование HTTPS для среды AWS Elastic Beanstalk и в конце отключить HTTP порт.

Обратите внимание, что в настоящее время AWS Free Usage Tier содержит такое же количество часов для балансировки эластичной нагрузки (ELB), что и для EC2 Micro Instance.

Ответ 22

это простое решение

  • ssh в ваш экземпляр EC2
  • скопируйте содержимое файла /etc/httpd/conf.d/wsgi.conf в локальный файл wsgi.conf, который будет помещен в базовую папку вашего приложения.
  • Отредактируйте локальную версию wsgi.conf и добавьте следующие правила переадресации в <VirtualHost> </Теги VirtualHost >

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
    
  • Измените "/статус" на любую страницу, которую вы используете, на странице проверка работоспособности.

  • Сохранить файл
  • Отредактируйте свой <app> .conf внутри вашего каталога ebextensions, чтобы добавить команду контейнера для копирования этой версии wsgi.conf поверх версии Amazons

    container_commands:
    01_syncdb:
      command: "django-admin.py syncdb --noinput" leader_only: true
    02_collectstatic:
      command: "django-admin.py collectstatic --noinput"
    03_wsgireplace:
      command: 'cp wsgi.conf ../wsgi.conf'
    ...
    
  • Разверните код.

  • В развернутой версии wsg.conf по адресу /etc/httd/conf.d/wsgi.conf теперь будут указаны необходимые правила перенаправления.

Он должен работать, и файл будет соответствующим образом обновлен для каждого развертывания. Единственное, на что нужно обратить внимание, это то, что Amazon изменит содержимое своего базового файла wsgi.conf в будущем, тогда ваша копия может перестать работать.

Autor rickchristianson