Настроить Apache на упругом бобовый стебель
Я разрабатываю с django на эластичном бобовом стебле и хочу внести два изменения в конфигурацию apache:
1. перенаправление www.domain.com чтобы domain.com
2. перенаправление http://domain.com к https://domain.com
У меня нет опыта работы с конфигурацией apache, Гугл это дало мне идею, что я должен поставить RewriteRules .файл htaccess.
Пример: Как заставить https на amazon elastic beanstalk без сбоев в работе проверка
Я не смог найти инструкции о том, как это сделать с помощью конфигурации эластичного бобового стебля (.ebextensions), я попытался попросту сказать .htaccess файл в моем корневом файле и развернуть, но это не сработало.
Кто-нибудь знает, как можно добавить рерайтеры в эластичный бобовый стебель?
3 ответа:
Это простое решение
- ssh в ваш экземпляр EC2
- скопируйте содержимое файла /etc / httpd / conf.д/Тут WSGI.conf в локальный файл под названием wsgi.conf, который будет помещен в базовую папку вашего приложения
Отредактируйте локальную версию wsgi.conf и добавьте следующие правила перенаправления в теги
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
Измените " / status " на любую страницу, которую вы используете в качестве проверки работоспособности страница.
- сохраните файл
Отредактируйте ваше .conf файл внутри вашего .ebextensions каталог для добавления команды контейнера для копирования этой версии wsgi.conf над версией Amazon
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 /etc/httpd/conf.d/wsgi.conf' ...
Разверните код.
- развернутая версия wsgi.conf at /etc / httpd / conf.д/Тут WSGI.conf теперь будет включать необходимые правила перенаправления.
Он должен работать, и файл будет правильно обновляться для каждого развертывания. Единственное, что нужно смотреть ибо это если Amazon меняет свою базу wsgi.содержимое файла conf в будущем, то ваша копия может больше не работать.
Источник: риккристиансон
Имея
www.example.com
перейти кexample.com
может быть сделано с CNAME в DNS, если вы не заботитесь о том, что он на самом деле является перенаправлением. Если вам нужен редирект, вы можете добавить его в конфигурацию Apache ниже. Основной смысл этого ответа состоит в том, чтобы подробно описать, как вы изменяете конфигурацию Apache на Elastic Beanstalk (потому что делать это правильно не очень прямо вперед).Этот ответ предполагает, что вы уже включили https в группе безопасности балансировщика нагрузки, добавили сертификат SSL в нагрузку балансировщик, добавил 443 к портам, пересылаемым балансировщиком нагрузки, и указал ваше доменное имя в среде Elastic Beanstalk с помощью Route 53 (или эквивалентной службы DNS).
Все, что вам нужно сделать, это добавить следующее к одному из ваших
.conf
файлы в каталоге.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 config-это нормальное решение этой проблемы и эластичный Бобовый Стебель использует Apache, так что это путь, которым мы должны идти.
SSH в сервер и...: это полностью противоположно точке упругого бобового стебля и имеет так много проблем. Все новые экземпляры, созданные с помощью автоматического масштабирования, не будут иметь измененной конфигурации. Любая клонированная среда не будет иметь такой конфигурации. Любое количество разумных изменений среды уничтожит конфигурацию. Это как раз такой случай плохая идея.
Перезапишите конфигурацию Apache новым файлом: это входит в правильную область решения, но оставляет вас с кошмаром обслуживания, если Elastic Beanstalk изменяет аспекты настройки сервера (что они очень хорошо могут сделать). Также смотрите проблемы в следующем пункте.
Динамически отредактируйте конфигурационный файл Apache, добавив несколько строк: это неплохая идея. Проблема с этим заключается в том, что он не будет работать, если эластичный Beanstalk всегда меняет имя своего файла конфигурации Apache по умолчанию, и этот файл может быть перезаписан, когда вы меньше всего ожидаете: https://forums.aws.amazon.com/thread.jspa?threadID=163369
Просто для справки для других, используя решение Zags для перенаправления не-www на www, добавьте это в свой
.ebextensions/your_file.config
:files: "/etc/httpd/conf.d/www_rewrite.conf": mode: "000644" owner: root group: root content: | RewriteEngine On <If "'%{HTTP_HOST}' !~ /^www\./"> RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </If>