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

Настройте apache на эластичном бобовом стебле

Я развиваюсь с django на эластичном beanstalk, и я хочу внести два изменения в конфигурацию apache:

1. перенаправить www.domain.com на домен .com

2. redirect http://domain.com в https://domain.com p >

У меня нет опыта работы с конфигурацией apache, в googling это дало мне идею, что я должен поместить RewriteRules в файл .htaccess.

Пример: Как заставить https на эластичный beanstalk амазонки без проверки работоспособности

Я не мог найти инструкции о том, как это сделать с помощью конфигурации эластичного beanstalk (.ebextensions), я попытался просто поместить файл .htaccess в свой корневой файл и развернуть, но он не сработал.

Кто-нибудь знает, как можно добавить RewriteRules в эластичный бобовый стебель?

4b9b3361

Ответ 1

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

  • 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 /etc/httpd/conf.d/wsgi.conf'
    ...
    
  • Разверните код.

  • Развернутая версия wsgi.conf по адресу /etc/httpd/conf.d/wsgi.conf теперь включает необходимые правила перенаправления.

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

Источник: rickchristianson

Ответ 2

Имея 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 - это нормальное решение этой проблемы, а Elastic Beanstalk использует Apache, чтобы мы могли идти.

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

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

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

Ответ 3

Просто для справки для других, используя решение 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>