Настроить 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 16

3 ответа:

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

  1. ssh в ваш экземпляр EC2
  2. скопируйте содержимое файла /etc / httpd / conf.д/Тут WSGI.conf в локальный файл под названием wsgi.conf, который будет помещен в базовую папку вашего приложения
  3. Отредактируйте локальную версию wsgi.conf и добавьте следующие правила перенаправления в теги

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

  5. сохраните файл
  6. Отредактируйте ваше .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'
    ...
    
  7. Разверните код.

  8. развернутая версия 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 во всех ваших средах,но это не повредит.

Плохие решения я видел

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

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

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

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

  4. Динамически отредактируйте конфигурационный файл 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>