Я размещаю на AWS ELB небольшое веб-приложение с пакетом JAR на основе Java, используя собственный домен. Я загружаю 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
. Я даже не знаю, где это взять.
Я наконец понял это. Мне пришлось поместить свою конфигурацию в \.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, когда они не были уверены, как ее будут использовать.