У меня проблемы с настройкой HTTPS на AWS Elastic Beanstalk.Моя текущая проблема заключается в том, что, хотя HTTPS работает, пользователь должен включить номер порта.
Моя цель - заставить "example.xyz" перенаправить на "https://example.xyz". На данный момент мне нужно перейти по адресу: "example.xyz:433", чтобы получить доступ к EB.
В настоящее время я только пытаюсь, чтобы HTTPS работал для EB Load Balancer.общайтесь с EC2 через HTTP. В идеале, я бы использовал сквозное шифрование, но вы знаете, что это шаг за шагом.
Настройка:
- Node.js v8.11.1 на 64-битной версии Amazon Linux / 4.5.0
- Классический балансировщик нагрузки
- Мои журналы отправляются в CloudWatch
- У меня есть свой собственный домен - купленный по маршруту 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
Результирующая настройка порта (from EB console):
- 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.Вот примеры, которые я использовал:
Apache:
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>
Nginx:
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 на эластичном бобовом стебле?
Источник 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/, что для меня является еще одним признаком того, что перенаправление работает.
Кто-нибудь может подсказать, как это решить?Дайте мне знать, если вам нужна дополнительная информация.
Приветствия