Como configurar o proxy reverso SSL usando o nginx?

1

Relacionado à minha pergunta sobre como configurar um proxy reverso usando nginx , agora estou preso ao configurar um que também requer uma conexão SSL.

Eu tenho o contêiner docker que fornece a porta SSL mapeada 4430 para meu sistema host. O servidor da web está usando um certificado autoassinado.

No meu arquivo /etc/hosts , defini:

127.0.0.1 app.local

E minha configuração do 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 eu acesso minha webapp usando https://127.0.0.1::4430 , tudo funciona bem. Eu recebo um aviso sobre o certificado pela primeira vez, que eu tenho que permitir.

Ainda quando se conecta 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 o aviso de certificado fosse exibido, o que eu poderia permitir.

Como fazer o proxy reverso funcionar ao usar SSL com nginx?

    
por k0pernikus 13.10.2015 / 15:12

2 respostas

3

Para finalizar o 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 certs e ssl params

ssl_certificate      new-cert.cer;
ssl_certificate_key  new-cert.key;

ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
    
por 13.10.2015 / 22:51
2

Você está perto, eu acho (sou novo no Nginx também), mas o segundo bloco de servidores precisa de um pouco mais ... Eu tenho um no 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 de escuta especifica ssl.
  2. O certificado e a chave do certificado são especificados. O certificado deve estar em um local de fácil acesso porque é enviado para todos que acessam seu site. A chave está em um local onde apenas os usuários que precisam dela 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ê poderia nomear qualquer coisa e colocá-los em qualquer lugar, então não fique preso ao nome ou ao local exato se você armazenar o seu em outro lugar. É assim que eu gosto de fazer, e minha saída ls -l é:

-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
    
por 13.10.2015 / 20:37