Назад | Перейти на главную страницу

Принудительно использовать HTTPS в AWS ELB

Я размещаю на 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, когда они не были уверены, как ее будут использовать.