Принудительно установить 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, когда они не знали, как его использовать.

Другие вопросы по тегам