Relacionado à minha pergunta sobrecomo configurar um proxy reverso usando nginx, agora estou preso ao configurar um que requer adicionalmente uma conexão SSL.
Eu tenho um contêiner docker que fornece a porta SSL 4430 mapeada para meu sistema de host. O servidor web está usando um certificado autoassinado.
No meu /etc/hosts
arquivo, defini:
127.0.0.1 app.local
E a configuração do meu servidor nginx se parece com:
server {
listen 80;
server_name app.local;
location / {
return https://$host$request_uri;
}
}
server {
listen 443;
server_name app.local;
location / {
proxy_pass https://127.0.0.1:4430;
}
}
Quando acesso meu webapp, https://127.0.0.1::4430
ele funciona bem. Recebo um aviso sobre o certificado na primeira vez, o que devo permitir.
No entanto, ao conectar-me a ele por meio de http://app.local
ou https://app.local
, meu navegador mostra:
SSL connection error
ERR_SSL_PROTOCOL_ERROR
Eu também esperava que aparecesse o aviso do certificado, o que eu poderia permitir.
Como fazer o proxy reverso funcionar ao usar SSL com nginx?
Responder1
Para encerrar SSL no nginx:
a) A seção do servidor precisa especificar a porta e 'ssl'
listen 192.168.2.26:443 ssl;
b) O bloco do servidor também especifica certificados e parâmetros SSL
ssl_certificate new-cert.cer;
ssl_certificate_key new-cert.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
Responder2
Você está perto, eu acho (sou novo no Nginx), mas seu segundo bloco de servidor precisa de um pouco mais ... Eu tenho um em meu servidor com isto:
listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
Observe o seguinte:
- A diretiva listen especifica SSL.
- O certificado e a chave do certificado são especificados. O certificado deve estar em local de fácil acesso, pois é enviado a todos que acessam seu site. A chave está em um local onde apenas os usuários que dela necessitam podem acessá-la.
O ipv6, charset e client max body são linhas que tenho em meu servidor, mas não são necessárias para o que você está fazendo aqui. Você pode nomeá-los como quiser e colocá-los em qualquer lugar, portanto, não se preocupe com o nome ou local exato do arquivo se armazenar o seu em outro lugar. É assim que gosto de fazer e meu ls -l
resultado é:
-rw-r--r-- 1 root root 1887 Oct 8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct 8 13:47 /etc/ssl/private/example.com.key