Forçar HTTPS no AWS ELB

4

Eu hospedo uma pequena aplicação Web JAR baseada em Java no AWS ELB usando um domínio personalizado. Eu faço upload de um arquivo ZIP como:

myapp.zip
* myapp.jar

Configurei um certificado usando o AWS CM e consigo acessar meu aplicativo por meio de http://www.example.com e também de https://www.example.com .

Agora preciso forçar HTTPS sempre . E eu estou completamente perdida em como fazer isso.

Eu vi várias respostas como "configure your 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/

Outras respostas seguem na mesma direção.

Embora eu possa entender a ideia da regra do regravador como:

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

O que eu sinto falta é como adicionar esse nginx da AWS ELB.

O que tentei por último foi adicionar .ebextensions\nginx\conf.d\my.conf ao meu arquivo ZIP:

myapp.zip
* myapp.jar
* .ebextensions
  * nginx
    * conf.d
      * my.conf

Conteúdo:

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

Isso me dá o seguinte erro:

2016/12/24 12:08:27 [emerg] 22709#0: "if" directive is not allowed here in /var/elasticbeanstalk/staging/nginx/conf.d/myconf:1

Eu acho que o sytnax de my.conf não está certo. Eu esperava que my.conf estendesse a configuração nginx do AWS ELB, mas aparentemente isso não acontece. E eu realmente gostaria de evitar a configuração completa do nginx no meu .ebextensions . Eu nem sei onde consegui-lo.

    
por lexicore 24.12.2016 / 13:17

2 respostas

7

Eu finalmente descobri. Eu tive que colocar minha configuração em \.ebextensions\nginx\conf.d\elasticbeanstalk\*.conf , por exemplo \.ebextensions\nginx\conf.d\elasticbeanstalk\force-https.conf .

O conteúdo é:

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

Isso é incluído no arquivo de configuração do AWS ELB automaticamente:

# Elastic Beanstalk Nginx Configuration File
...
http {
    ...
    server {
        ...
        # Include the Elastic Beanstalk generated locations
        include conf.d/elasticbeanstalk/*.conf;
    }
}

Portanto, não é necessário copiar / substituir todo o nginx.conf .

    
por 24.12.2016 / 14:14
-1

Eu gostaria de propor uma solução MUITO melhor para olhar no futuro. O Amazon ELB v1 usa o nginx como um proxy reverso antes dos contêineres do Docker. Você precisa cortá-lo para fazer as reescritas na instância do AWS quando ele for inicializado de maneira semelhante à sua solução. No entanto, com v2 você pode abandonar isso e apenas usar seu próprio nginx que você está executando de qualquer maneira. É muito mais prático fazer quase tudo com a v2, a v1 estava de volta durante a infância do EBS quando eles não sabiam como ela seria usada.

    
por 25.01.2017 / 00:23