Принудительно установить HTTPS на AWS ELB
В AWS ELB я размещаю небольшое веб-приложение на основе Java, упакованное в JAR, используя собственный домен. Я загружаю ZIP файл как:
myapp.zip
* myapp.jar
Я настроил сертификат с помощью AWS CM и могу получить доступ к своему приложению через оба http://www.example.com
так же как https://www.example.com
,
Теперь мне нужно всегда использовать HTTPS. И я совершенно заблудился, как это сделать.
Я видел несколько ответов типа "настроить свой nginx":
https://stackoverflow.com/questions/24603620/redirecting-ec2-elb-from-http-to-https https://aws.amazon.com/de/premiumsupport/knowledge-center/redirect-http-https-elb/ http://www.emind.co/how-to/how-to-force-https-behind-aws-elb/
Другие ответы идут в том же направлении.
Хотя я могу понять идею правила переписывания, как:
if ($http_x_forwarded_proto = 'http') {
return 301 https://www.example.com$request_uri;
}
Что мне не хватает, так это как добавить AWS ELB nginx.
То, что я пробовал в прошлом, было добавление .ebextensions\nginx\conf.d\my.conf
в мой ZIP архив:
myapp.zip
* myapp.jar
* .ebextensions
* nginx
* conf.d
* my.conf
Содержание:
if ($http_x_forwarded_proto = 'http') {
return 301 https://www.example.com$request_uri;
}
Это дает мне следующую ошибку:
2016/12/24 12:08:27 [emerg] 22709#0: "if" directive is not allowed here in /var/elasticbeanstalk/staging/nginx/conf.d/myconf:1
Я думаю, что Ситнакс my.conf
не является правильным. Я надеялся, что my.conf
расширит конфигурацию AWS ELB nginx, но, очевидно, это не так. И мне бы очень хотелось, чтобы в моей конфигурации не было полной конфигурации nginx. .ebextensions
, Я даже не знаю, где его взять.
2 ответа
Я наконец понял это. Я должен был поставить свою конфигурацию в \.ebextensions\nginx\conf.d\elasticbeanstalk\*.conf
, например \.ebextensions\nginx\conf.d\elasticbeanstalk\force-https.conf
,
Содержание:
if ($http_x_forwarded_proto = 'http') {
return 301 https://www.example.com$request_uri;
}
Это автоматически включается в конфигурационный файл AWS ELB:
# Elastic Beanstalk Nginx Configuration File
...
http {
...
server {
...
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
}
Так что нет необходимости копировать / переопределять весь nginx.conf
,
Я хотел бы предложить НАМНОГО лучшее решение, чтобы смотреть в будущее. Amazon ELB v1 использует nginx в качестве обратного прокси-сервера перед вашими контейнерами Docker. Вы должны взломать его, чтобы переписать экземпляр AWS, когда он загружается аналогично вашему решению. Тем не менее, с v2 вы можете отказаться от этого и просто использовать свой собственный nginx, который вы используете в любом случае. Гораздо удобнее делать практически все с v2, v1 вернулся в EBS, когда они не знали, как его использовать.