Estou tendo problemas ao forçar o HTTPS com um site que estou implantando no AWS Elastic Beanstalk.
É um aplicativo front-end usando o EmberJS. Ando em círculos há muitos dias tentando descobrir como redirecionar o tráfego http para https. Estou usando o Amazon Linux AMI na minha máquina EC2.
Cheguei à conclusão (ainda não tenho certeza se isso está correto) de que não é no Elastic Beanstalk que eu forço o HTTPS. Estou permitindo HTTP e HTTPS através do meu Elastic Beanstalk Load Balancer e estou tentando redirecionar para o servidor.
É aqui que estou tendo problemas. Estou encontrando muitas respostas sobre regras de reescrita sem as mod_rewrite
quais são baseadas no X-Forwarded-Proto
cabeçalho, mas esse arquivo não existe na minha máquina EC2 de acordo com uma pesquisa de localização.
Eu também tentei criar um arquivo de configuração dentro do .ebextensions
diretório, mas isso também não funcionou.
A principal coisa que estou tentando fazer é direcionar os usuários para https quando tentam acessar o endereço http. Quaisquer sugestões ou sugestões são muito apreciadas, obrigado!
EDIT: Estou usando o Debian jessie v1.4.1 de 64 bits executando o Python 3.4 (pré-configurado - Docker)
fonte
Respostas:
Eu acho que você precisa especificar qual ambiente do Elastic Beanstalk você usa (consulte: Plataformas suportadas ), porque um ambiente diferente tem uma configuração diferente.
Basicamente, você precisa personalizar:
Para personalizá-lo, você pode usar a CLI ou
.ebextensions
.Você pode verificar Habilitar HTTPS e HTTP-Redirect no AWS Elastic Beanstalk . Ele mostra como configurar o Elastic Beanstalk Single Docker Container para HTTPS e HTTP (redirecionar para HTTPS). Você pode ajustar a configuração conforme sua necessidade.
fonte
arn:aws:iam::123456789012:server-certificate/YourSSLCertificate
formato.ssl_certificate /opt/ssl/default-ssl.crt;
Quando eu começar a informação para o cert, dá-me um "caminho", mas é apenas "/"Também é possível fazer isso com mais facilidade, sem tocar no balanceador de carga, usando o
X-Forwarded-Proto
cabeçalho definido pelo ELB. Aqui está o que eu acabei fazendo:fonte
O Elastic Beanstalk não suporta várias portas de um contêiner de Docker único, portanto, você precisa lidar com isso no nível do proxy, conforme sugerido. No entanto, sua instância do EC2 não precisa saber sobre seu certificado, porque você pode encerrar a conexão SSL no balanceador de carga.
No seu
.ebextensions
diretório, crie uma configuração para o proxy nginx que contenha duas configurações do servidor; um que proxieshttp://docker
(a configuração padrão, porta 80) e outro que redireciona para https (eu escolhi a porta 8080)..ebextensions/01-nginx-proxy.config
:Crie uma segunda configuração para o balanceador de carga EB e grupos de segurança que os define da seguinte maneira:
.ebextensions/02-load-balancer.config
:(Nota: não esqueça de substituir SSLCertificateId e VpcId pelos seus valores).
Qualquer tráfego na porta 80 do balanceador de carga (HTTP) atingirá a porta 8080 na instância do EC2, que redireciona para HTTPS. O tráfego na porta 443 no balanceador de carga (HTTPS) acabará sendo atendido pela porta 80 na instância do EC2, que é o proxy do docker.
fonte
Estou usando o Terraform para ativar o redirecionamento HTTP para HTTPS no ElasticBeanstalk,
Acabei de adicionar uma regra de ouvinte adicional
fonte