Como configurar o proxy reverso SSL usando nginx?

Como configurar o proxy reverso SSL usando nginx?

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/hostsarquivo, 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::4430ele 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.localou 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:

  1. A diretiva listen especifica SSL.
  2. 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 -lresultado é:

-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

informação relacionada