Кажется, я не могу заставить https на уровне бесплатного использования эластичного бобового стебля.
Я попробовал следующее предложение в разделе Как принудительно использовать https на эластичном бобовом стебле 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 не учитывают заголовки Elastic Load Balancer X-Forwarded-Port и X-Forwarded-Proto, но и цикл перенаправления - это не то, что я собираюсь делать.
Пожалуйста помоги. Я новичок в AWS, Elastic Beanstalk и не очень знаком с правилами Apache. Я не совсем уверен, что делать дальше. Благодарю.
Ответы:
В этом ответе предполагается, что вы уже включили https в группе безопасности балансировщика нагрузки, добавили сертификат SSL в балансировщик нагрузки, перенаправили оба порта 80 и 443 балансировщиком нагрузки и указали свое доменное имя в среде Elastic Beanstalk с помощью Route 53. (или аналогичная служба DNS).
ПРИМЕЧАНИЕ. Этот ответ предназначен для сред Elastic Beanstalk, в которых используется Apache. Это может не работать для развертывания на основе докеров.
Все, что вам нужно сделать, это добавить следующее в один из ваших
.config
файлов в.ebextensions
каталоге вашего проекта :Объяснение
Это умеренно прямолинейно за пределами Elastic Beanstalk. Обычно добавляют правило перезаписи Apache, подобное следующему:
Или, если за балансировщиком нагрузки, как мы в этом случае:
Однако эти конфигурации работают только внутри
<VirtualHost>
блока. ИзменениеRewriteCond
к<If>
блоку позволяет ему работать должным образом за пределами<VirtualHost>
блока, что позволяет нам поставить в в автономном Apache конфигурационный файл. Обратите внимание, что стандартная установка Apache на CentOS (включая установку на ElasticBeanstalk) включает соответствие всех файлов/etc/httpd/conf.d/*.conf
, что соответствует пути к файлу, в котором мы храним этот файл.-n '%{HTTP:X-Forwarded-Proto}'
Часть состояния предотвращает его переадресации , если вы не за балансировки нагрузки, что позволяет иметь общую конфигурацию между производственной Evironment с балансировки нагрузки и 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.
источник
R=301
для того, чтобы отправить постоянное перенаправление.ssl_rewrite.conf
файл создается (проверено сeb ssh
) , но не редирект не происходит. : SЕсли вы размещаете свой сайт на S3, некоторые части этого ответа могут быть вам полезны.
Это сработало для меня:
Загрузите сертификат в AWS с помощью
aws
консольной команды. Структура команды:В приложении Elastic Beanstalk перейдите в Конфигурация -> Уровень сети -> Балансировка нагрузки и щелкните значок шестеренки .
Выберите безопасный порт слушателя , как 443 . Выберите Протокол как HTTPS . Выберите
CERTIFICATE_NAME
из шага 2 для идентификатора сертификата SSL . Сохраните конфигурацию.Зайдите в свою консоль . Щелкните Экземпляры EC2 . Щелкните « Балансировщики нагрузки» . Щелкните балансировщики нагрузки. Щелкните Экземпляры и прокрутите вниз, чтобы увидеть экземпляры EC2, назначенные этому балансировщику нагрузки. Если экземпляр EC2 имеет то же имя, что и URL-адрес вашего приложения (или что-то похожее), обратите внимание на DNS-имя для балансировщика нагрузки. Он должен быть в формате
awseb-e-...
Вернитесь к своей консоли . Щелкните CloudFront . Щелкните " Создать распространение" . Выберите распространение в Интернете .
Настроить раздачу. Установите в качестве исходного доменного имени DNS-имя балансировщика нагрузки, которое вы нашли на шаге 5 . Установите политику протокола Viewer для перенаправления HTTP на HTTPS . Установите для параметра Forward Query Strings значение Yes . Задайте для альтернативных доменных имен (CNAME) URL-адреса, которые вы хотите использовать для своего приложения. Установите сертификат SSL на тот, который
CERTIFICATE_NAME
вы загрузили на шаге 2 . Создайте свой дистрибутив.Щелкните имя своего распространения в CloudFront. Нажмите « Происхождение» , выберите свое начало и нажмите « Изменить» . Убедитесь, что ваша политика протокола Origin - Match Viewer . Вернись. Щелкните " Поведение" , выберите источник и щелкните " Изменить" . Измените заголовки переадресации на белый список и добавьте хост . Сохранить.
Примечание: я также написал более подробное руководство .
источник
elasticbeanstalk.conf
Файл здесь не должен вступать в игру, если вы не переопределяете настройки в приведенном выше руководстве.Самая высокая оценка не работает для меня .. директива <If> работает только с Apache 2.4+, но у ElasticBeanstalk есть версия 2.2.x.
Итак, следуя тому же совету, что и выше. Создайте файл с именем .ebextensions / https_rewrite.config со следующим содержимым
Мне кажется, это работает.
О том, как встроить этот файл в файл WAR, см. В этом ответе
источник
С новыми балансировщиками нагрузки приложений вы можете сделать это довольно тривиально ...
Убедитесь, что вы установили один из них во время настройки среды EB (я считаю, что по умолчанию все еще используется классический балансировщик нагрузки). Вы не можете изменить тип после создания среды, поэтому воссоздайте его.
Как только это будет сделано, перейдите в настройки EC2 -> Load Balancers. Щелкните балансировщик нагрузки, созданный для среды EB. Вы должны убедиться, что перед этой задачей настроили прослушиватель HTTPS, поэтому убедитесь, что вы слушаете HTTPS 443 с сертификатом SSL и перенаправляете трафик на свои экземпляры с HTTP на 80.
Затем добавьте нового слушателя, который слушает HTTP, и добавьте действие по умолчанию «Перенаправить на:». Убедитесь, что вы установили HTTPS в качестве протокола, 443 в качестве порта, «Исходный хост, путь, запрос» в качестве опции и, наконец, 301 в качестве кода ответа HTTP.
После добавления этого прослушивателя убедитесь, что вы обновили свою группу безопасности EC2 Load Balancer, чтобы принимать как HTTPS, так и HTTP-соединения, вы увидите небольшой предупреждающий знак на прослушивателе, чтобы напомнить вам!
Крис
источник
Изменить: решение Zags более общее и правильное. Я рекомендую его вместо моего (который характерен для среды Python)
Вот чистое и быстрое решение, которое я придумал, позволяющее избежать взлома wsgi.conf или использования CloudFront.
В вашем .ebextensions / some_file.config:
Мне кажется, это слишком просто, но, похоже, все работает нормально.
Также обратите внимание, что я явно перенаправляю HTTP вместо «не HTTPS».
источник
/etc/httpd/conf.d/https_redirect.conf
не обязательно должен существовать, см. ОтветЯ пытаюсь перенаправить эластичный beanstalk с помощью loadbalancer в 2018 году. Ни один из приведенных выше ответов не работает в моей среде. Я столкнулся с несколькими проблемами:
Я пробовал ответ, получивший наибольшее количество голосов, но мой кот - это версия 2.7. Не поддерживает.
Я использовал container_commands и скопировал настройку 00_applications. AWS просто игнорирует это.
Итак, наконец, я заработал, прочитав это: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html
Вот что я делаю:
Я воссоздал структуру папок:
И тогда это содержимое ssl.conf
Надеюсь, это поможет.
источник
nginx: [emerg] unknown directive "<VirtualHost"
в журналах EB после добавления этого. Кто-нибудь еще видел такое поведение?У меня это работает со следующей командой:
и без проверки https:
Похоже, что ELB меняет значение X-Forwarded-Proto на http (даже по протоколу TCP).
источник
Ни один из приведенных выше ответов не помог мне, но некоторые помогли мне выяснить ответ, который сработал для меня. Также я нашел приведенный ниже URL-адрес, который помог http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat -platform.html
Я создал файловую структуру, указанную в URL-адресе выше, чтобы изменить 2 файла httpd.conf 00_application.conf
скопируйте весь httpd.conf из вашего экземпляра и поместите его в свой код в .ebextention под структурой папок, упомянутой в приведенной выше ссылке. Затем просто добавьте строку ниже в этот файл в свой проект
Сделайте то же самое для 00_application.conf, скопируйте его из своего экземпляра и поместите в свою кодовую базу под .ebextention под httpd / conf.d / elasticbeanstalk / 00_application.conf Теперь отредактируйте этот файл и добавьте ниже между VirtualHost
Теперь разверните свой код. Он должен работать.
источник
На эластичном beanstalk вы можете просто добавить свою конфигурацию, чтобы AWS перезаписал их, это позволит вам перезаписать конфигурацию веб-сервера и отправить свою собственную конфигурацию.
Просто добавьте следующий файл по пути: .ebextensions \ httpd \ conf.d
Содержание файла:
'.Ebextensions' - это стандартная папка конфигурации в AWS, а остальные просто указывают, какой файл и папку вы хотите перезаписать. Если файла или папки не существует, просто создайте их.
источник
Мне было трудно понять это, поэтому после того, как я придумал решение, я написал подробное объяснение своего решения, чтобы, надеюсь, помочь кому-то другому. Это характерно для приложений Tomcat 8, Apache2 и Spring Boot. В github лаборатории AWS есть действительно полезные примеры ebextension .
Резюме того, что сработало для меня:
Вот пример приложения Spring Boot .
источник
У меня есть следующие конфигурации для эластичного beanstalk (64-разрядная версия Amazon Linux 2016.09 v2.3.1 с Tomcat 8 Java 8). Я создал каталог .ebextensions и добавил файл .config YAML с условиями перезаписи
Описанное выше решение Zagas (которое очень сложно) у меня не работает.
Для меня это решение имеет больше смысла, но и оно не работает. Ничего не происходит, и я не вижу файл «ssl_rewrite.conf» в каталоге «conf.d».
Третьим проверенным решением было добавление файлов «run.config» и «ssl_rewrite.conf» в каталог «.ebextendsion».
run_config содержит
ssl_rewrite.conf содержит
ssl_rewrite.conf создается в директории "conf.d", но перенаправление с http на https не работает.
Единственным сработавшим решением для меня было добавить следующие строки в "/etc/httpd/conf.d/elasticbeanstalk/00_application.conf"
но это временное решение, и если машина заменена, мое перенаправление https исчезнет.
источник
files:
, содержимое файла подcontent: |
и установите соответствующий режим, владельца и группу. ELB автоматически создаст для вас файл./etc/httpd/conf.d/elasticbeanstalk.conf
вместо этого редактировать ?На всякий случай кто-то еще борется:
Некоторое время я боролся, и, наконец, я нашел GitHub (от команды AWS) со всеми конфигурациями AWS, и приведенный ниже пример работает для перенаправления HTTP> HTTPS для Apache 2.2. (Конфиги для Apache 2.4 и Nginx см. По ссылке ниже).
Apache 2.2
Создайте файл в корневом каталоге вашего приложения: YOUR_PROJECT_ROOT / .ebextensions / httpd / conf.d / elasticbeanstalk.conf (в случае использования IntelliJ / Java убедитесь, что он добавлен в последний артефакт .WAR)
Добавьте следующие строки, чтобы включить перенаправление на виртуальном хосте:
Чтобы увидеть больше примеров для Apache 2.4 и Nginx, посетите этот репозиторий GitHub:
https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect/java-tomcat
Кроме того, доступно множество других полезных конфигураций и примеров.
С уважением
источник
Включение HTTPS через переменную среды
Мне нужно было применять HTTPS только для нашей производственной среды, а не для среды разработки и тестирования, которая также находится на Elastic Beanstalk, но не использует балансировщик нагрузки (и, следовательно, не может получить сертификат напрямую).
Я использую переменную окружения
USE_HTTPS
. Мы копируемssl_rewrite.conf
файл тогда и только тогда, когда дляUSE_HTTPS
него установлено значениеtrue
..ebextensions / файлы / ssl_rewrite.conf
.ebextensions / https.config
Обратите внимание, что если вы внесете изменения
USE_HTTPS
, вам необходимо повторно развернуть приложение, чтобы изменения вступили в силу. Вы также можете удалитьecho
команды изhttps.config
файла, если хотите.источник
У AWS также есть документация по этому поводу.
Если вы используете балансировщик нагрузки приложения, добавьте файл
http-to-https.config
в свою.ebextensions
папку, а затем добавьте следующую конфигурацию ( не забудьте указать ARN вашего сертификата https ):ПРИМЕЧАНИЕ. Убедитесь, что вы еще не добавили прослушиватель на порт 443 через консоль EB. Если вы это сделали, удалите прослушиватель перед добавлением файла .config.
Преимущество использования LB для этого заключается в том, что ваша конфигурация не зависит от используемого вами сервера, например, nginx, apache и т. Д.
источник
Я нашел здесь полезный ответ .
Все, что я сделал, это сделал путь проверки работоспособности,
/index.php
а не/
в процессе балансировки нагрузки приложения по умолчанию.источник
Почему бы вам просто не поместить файл .htaccess в корневую папку? Таким образом, вы можете просто протестировать и отладить его. И если вы включите его в .zip, он снова будет автоматически развернут во всех экземплярах.
Просто используйте
.htaccess
:источник
Обратите внимание, что ответ, получивший наибольшее количество голосов, устарел. Ответ Пола на самом деле правильный ответ. Ссылка, предоставленная в его ответе, принадлежит AWS (поэтому это рекомендуемый метод переопределения вашей конфигурации Apache для перенаправления с HTTP на HTTPS при запуске вашего приложения на Elastic Beanstalk).
Следует отметить одну очень важную вещь. Если вы развертываете более одного веб-приложения, то добавление папки .ebextensions в одно из ваших веб-приложений не сработает. Вы заметите, что ни одна из указанных вами конфигураций не записывается или не создается. Если вы развертываете несколько веб-приложений в среде Elastic Beanstalk, вам необходимо прочитать эту статью AWS Java Tomcat Deploy Multiple WAR files on Elastic Beanstalk
В общем, вам потребуется следующая структура, прежде чем запускать на ней команду eb для развертывания файлов WAR:
если папка .ebextentions существует внутри каждого файла WAR, вы заметите, что она полностью игнорируется и никакие изменения конфигурации производиться не будут.
Надеюсь, это поможет кому-то другому.
источник
Мы решили это на нашем сервере,
X-Forwarded-Proto
правильно обработав .Это наша конфигурация Grails, но она поможет вам с идеей:
источник
Чтобы расширить еще два ответа на этот вопрос https://stackoverflow.com/a/43026082/8775205 , https://stackoverflow.com/a/42035023/8775205 . Для пользователей с весенней загрузкой, которые развертывают свои сервисы на AWS с помощью ELB и нуждаются в пошаговом руководстве, вы можете добавить файл ****. Conf в src / main / webapp / .ebextensions / httpd / conf.d / вашего проекта. .
****. conf выглядит следующим образом. Заметил, что у меня есть тестовый сайт с единственным экземпляром, поэтому я добавляю условие для его исключения.
После этого не забудьте добавить «ресурс» в maven-war-plugin в свой pom.xml, чтобы получить указанную выше конфигурацию.
Наконец, зафиксируйте и отправьте свой код, дождитесь сборки кода AWS и codepipeline, чтобы забрать ваш код из вашего репозитория и развернуть его в среде beanstalk, или просто упакуйте свой проект в файл war и загрузите его в среду beanstalk AWS
источник
AWS не принимает символы подчеркивания (_) в заголовках, в то время как мы можем использовать (-). Итак, удалите подчеркивания из переменных заголовка, например: - header_var_val = "some value" замените его на headervarval = "some value" . Меня устраивает.
источник
Если вы используете среду с балансировкой нагрузки, вы можете следовать инструкциям по настройке HTTPS для среды AWS Elastic Beanstalk и в конце отключить порт HTTP.
Обратите внимание, что в настоящее время уровень бесплатного использования AWS включает такое же количество часов для эластичной балансировки нагрузки (ELB), что и для микро-экземпляра EC2.
источник
это простое решение
Отредактируйте локальную версию wsgi.conf и добавьте следующие правила перенаправления в теги <VirtualHost> </ VirtualHost>
Измените «/ status» на любую страницу, которую вы используете в качестве страницы проверки работоспособности .
Отредактируйте файл <app> .conf внутри вашего. ebextensions, чтобы добавить команду контейнера для копирования этой версии wsgi.conf поверх версии Amazon.
Разверните код.
Он должен работать, и файл будет правильно обновляться при каждом развертывании. Единственное, на что следует обратить внимание, это если Amazon изменит свое базовое содержимое файла wsgi.conf в будущем, ваша копия может перестать работать.
Автор rickchristianson
источник
.ebextensions
в своем развертывании, чтобы правильно вносить корректировки через сам эластичный бобовый стебель, поэтому он не побеждает его цель.