Я должен включить: 433 для доступа к HTTPS на AWS Elastic Beanstalk

У меня возникли проблемы с настройкой HTTPS на AWS Elastic Beanstalk. Моя текущая проблема заключается в том, что хотя HTTPS работает, пользователь должен указать номер порта.

Моя цель — заставить «example.xyz» перенаправляться на «https://example.xyz. На данный момент мне нужно перейти по адресу: «example.xyz:433», чтобы получить доступ к EB.

В настоящее время я только пытаюсь использовать HTTPS для балансировщика нагрузки EB. Он будет связываться с EC2 через HTTP. В идеале у меня было бы сквозное шифрование, но, знаете ли, шаг за шагом.

Настраивать:

  • Node.js v8.11.1 на 64-разрядной версии Amazon Linux/4.5.0
  • Классический балансировщик нагрузки
  • Мои журналы отправляются в CloudWatch
  • У меня есть свой домен - куплен через Route 53.
  • Я перенаправил трафик с домена на свой AWS EB, используя ALIAS:

     name: ""
     Type: A IPv4 (default)
     Routing Policy: Simple (default)
     Evaluate Target Health: No
    
  • Я установил сертификат с помощью ACM

  • Я использовал следующий *.config, чтобы мой балансировщик нагрузки прослушивал HTTPS:

    option_settings:
      aws:elb:listener:433:
        SSLCertificateId: arn:aws:acm:us-east-X:XXXXXXXX:certificate/XXXXXXXXX
        ListenerProtocol: HTTPS
        InstancePort: 80
    

Результирующая настройка порта (из консоли EB):

- Port: 80
- Protocol: HTTP
- Instance Port: 80
- SSL: ---
- Enabled: On

и

- Port: 433
- Protocol: HTTPS
- Instance Port: 80
- SSL: XXXXX
- Enabled: On

Я использовал Apache и Nginx, чтобы попробовать это. Покопавшись в Интернете, я нашел инструкции, как получить эти серверы для принудительного преобразования HTTP в HTTPS. Вот примеры, которые я использовал:

Апач:

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>

Нгинкс:

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

      CONFIGURED=`grep -c "return 301 https" /opt/elasticbeanstalk/support/conf/webapp_healthd.conf`

      if [ $CONFIGURED = 0 ]
        then
          sed -i '/listen 80;/a \    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /opt/elasticbeanstalk/support/conf/webapp_healthd.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

Источник Apache: https://stackoverflow.com/questions/14693852/how-to-force-https-on-elastic-beanstalk

Источник Nginx: https://adamjstevenson.com/tutorials/2017/02/02/configuring-and-forcing-https-for-aws-elastic-beanstalk.html


Оба сервера, похоже, имеют некоторую проблему, однако я не смог получить доступ к журналам Apache, поскольку они не появились в моем CloudWatch.

Но вот поведение, которое я наблюдаю вместе с логами с сервера nginx:

1) Перейти к: example.xyz:433

Работает правильно, браузер говорит, что мы в безопасности. Выход из Nginx:

172.31.16.42 - - [16/May/2018:07:54:34 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36" "171.6.246.51"

Обратите внимание, что прямая настройка 304 для nginx работает


2) Перейти к: example.xyz

Запрос вращается целую вечность, в конечном итоге время ожидания истекает.

Нет выхода из системы. Но когда запрос в конечном итоге истекает, адресная строка заполняется: https://example.xyz/, что мне является еще одним признаком того, что перенаправление работает.


Кто-нибудь может подсказать, как с этим разобраться? Дайте мне знать, если вам нужна дополнительная информация.

Ваше здоровье


person Josh Renton    schedule 16.05.2018    source источник
comment
Вы используете порт 433. HTTPS больше 443.   -  person Evyatar Meged    schedule 16.05.2018
comment
@EvyatarMeged вау, какая глупая опечатка. Спасибо, я попробую это. #нуб-лайф   -  person Josh Renton    schedule 16.05.2018
comment
Это сработало (конечно). Спасибо, что нашли время.   -  person Josh Renton    schedule 16.05.2018
comment
Рад помочь =)   -  person Evyatar Meged    schedule 16.05.2018


Ответы (1)


Тупо использовал 433 вместо 443. Вот и разобрался. Спасибо @Evyatar Meged за указание на это.

person Josh Renton    schedule 16.05.2018