2013-11-23 3 views
1

Мой домен указывает на приложение Beanstalk (DNS ALIAS). Я уже установил SSL-сертификаты на моем экземпляре Beanstalk. Итак: http://www.mysite.com -> Beanstalk приложение с HTTP https://www.mysite.com -> Beanstalk приложение с HTTPSКак настроить Beanstalk + Nginx для перенаправления http на https?

Я хотел бы перенаправить все запросы HTTP к HTTPS. Так http://www.mysite.com ->https://www.mysite.com

Я уже пытался создать контейнер AWS реализовать что-то вроде «сервер {слушать 80, возвращение 301 https://www.mysite.com/ $ REQUEST_URI;}», но он не работает.

Я уже провел несколько часов в Google, пытаясь найти некоторые рекомендации относительно того, как это сделать. Я нашел некоторые подсказки, такие как 301 переадресация, переписать ... но я не могу применить какое-либо решение к моему экземпляру Beanstalk EC2.

Возможно, мне нужно более подробное объяснение того, как это сделать. Не мог бы кто-нибудь помочь мне, пожалуйста?

PS: одна вещь, которую я пытаюсь понять, заключается в том, что Балансировщик нагрузки говорит, что порт 80 балансировки нагрузки указывает на порт 80 экземпляра и порт балансировки нагрузки 443 (HTTPS) также указывает на порт 80 экземпляра, но с сертификатом Cipher/SSL. Ну, когда я просматриваю конфигурационные файлы nginx на моем экземпляре EC2, я нахожу только «сервер {listen 8080», а не «слушать 80».

Спасибо всем.

+0

Где вы в состоянии найти правильный способ сделать это? –

ответ

4

Я нашел это решение онлайн.

Добавить .ebextensions/00_nginx_https_rw.config

files: 
    "/tmp/45_nginx_https_rw.sh": 
    owner: root 
    group: root 
    mode: "000644" 
    content: | 
     #! /bin/bash 

     CONFIGURED=`grep -c "return 301 https" /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf` 

     if [ $CONFIGURED = 0 ] 
     then 
      sed -i '/listen 8080;/a \ if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } \n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf 
      logger -t nginx_rw "https rewrite rules added" 
      exit 0 
     else 
      logger -t nginx_rw "https rewrite rules already set" 
      exit 0 
     fi 

container_commands: 
    00_appdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact 
01_configdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact 
    02_rewrite_hook_perms: 
    command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 
    03_rewrite_hook_ownership: 
    command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 
+0

не работают в моем случае: '' '[error] 9579 # 0: * 7 вверх по течению преждевременно закрытого соединения при чтении заголовка ответа вверх, клиент: 80.215.204.109, server:, request:" GET /favicon.ico HTTP /1.1 ", upstream:" http://127.0.0.1:8081/favicon.ico ", host:" domainname.fr ", referrer:" http: // domainname.fr''' Любое предложение? используя один экземпляр – Gura

+0

Работал для меня! Спасибо :) –

3

Основываясь на приведенном выше коде, это код, который я использовал для перенаправления запросов HTTP на HTTPS для автономного (т.е. не за балансировки нагрузки) Docker изображение:

files: 
    "/tmp/000_nginx_https_redirect.sh": 
    owner: root 
    group: root 
    mode: "000644" 
    content: | 
     #!/bin/bash 
     sed -i 's/80;/80;\n return 301 https:\/\/$http_host$request_uri;\n/' /etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf 

container_commands: 
    00_appdeploy_rewrite_hook: 
    command: cp -v /tmp/000_nginx_https_redirect.sh /opt/elasticbeanstalk/hooks/appdeploy/enact 
    01_configdeploy_rewrite_hook: 
    command: cp -v /tmp/000_nginx_https_redirect.sh /opt/elasticbeanstalk/hooks/configdeploy/enact 
    02_rewrite_hook_perms: 
    command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/000_nginx_https_redirect.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/000_nginx_https_redirect.sh 
    03_rewrite_hook_ownership: 
    command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/000_nginx_https_redirect.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/000_nginx_https_redirect.sh 
0

Я не был уверен, что если ответ user3888643 был еще правильный, так как AWS обновил путь некоторые из своих собственных сценариев установки запуска на упругом Beanstalk ранее в этом году, но я только что проверил с поддержкой AWS, это по-прежнему рекомендуемое решение. Добавить файл в .ebextensions, например .ebextensions/00_nginx_https_rw.config со следующим содержанием

files: 
    "/tmp/45_nginx_https_rw.sh": 
    owner: root 
    group: root 
    mode: "000644" 
    content: | 
     #!/usr/bin/env bash 
    CONFIGURED=`grep -c "return 301 https" /opt/elasticbeanstalk/support/conf/webapp.conf` 

    if [ $CONFIGURED = 0 ] 
    then 
     sed -i '/ location \/ {/a \ if ($http_x_forwarded_proto = "http") { \n  return 301 https://$host$request_uri;\n }' /opt/elasticbeanstalk/support/conf/webapp.conf 
     logger -t nginx_rw "https rewrite rules added" 
     exit 0 
    else 
     logger -t nginx_rw "https rewrite rules already set" 
     exit 0 
    fi 

container_commands: 
    00_appdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact 
    01_configdeploy_rewrite_hook: 
    command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact 
    02_rewrite_hook_perms: 
    command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 
    03_rewrite_hook_ownership: 
    command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh 
    04_reload_nginx: 
    command: /etc/init.d/nginx reload 

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

[Instance: i-0c767ece] Command failed on instance. 
Return code: 6  
Output: nginx: [warn] duplicate MIME type "text/html" in /etc/nginx/nginx.conf:38 nginx: 
[emerg] unknown directive "...." in /etc/nginx/conf.d/000_config.conf:4 
nginx: configuration file /etc/nginx/nginx.conf test failed. 
container_command 04_reload_nginx in .ebextensions/ssl_redirect.config failed. 
For more detail, check /var/log/eb-activity.log using console or EB CLI. 

Похоже, каждый экземпляр еще копией ранее развернутый файл в /etc/nginx/conf.d/, так что я должен был пойти в каждый экземпляр и удалить мои предыдущие конфигурационные файлы в/и т.д. /nginx/conf.d, как только я это сделал, развертывание прошло отлично.

0

Для тех, кто не использует балансировщик нагрузки, блок if от user3888643's answer не работает.Так что я удалил его полностью (не уверен, если это решение имеет какие-либо проблемы), и это работает для меня:

sed -i '/listen 8080;/a \ if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf 

к:

sed -i '/listen 8080;/a \ return 301 https://$host$request_uri;\n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf