¿Cómo configurar el proxy inverso SSL usando nginx?

¿Cómo configurar el proxy inverso SSL usando nginx?

Relacionado con mi pregunta sobrecómo configurar un proxy inverso usando nginx, ahora estoy atascado al configurar uno que además requiere una conexión SSL.

Tengo un contenedor acoplable que proporciona el puerto SSL 4430 asignado a mi sistema host. El servidor web utiliza un certificado autofirmado.

En mi /etc/hostsarchivo, he definido:

127.0.0.1 app.local

Y la configuración de mi servidor nginx se ve así:

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;
    }
}

Cuando accedo a mi aplicación web, https://127.0.0.1::4430funciona bien. Sin embargo, la primera vez recibo una advertencia sobre el certificado, que luego debo permitir.

Sin embargo, al conectarme a través de http://app.localo https://app.local, mi navegador muestra:

SSL connection error
ERR_SSL_PROTOCOL_ERROR

También esperaba que apareciera la advertencia del certificado, que luego podría permitir.

¿Cómo hacer que funcione el proxy inverso cuando se usa SSL con nginx?

Respuesta1

Para terminar SSL en nginx:

a) La sección del servidor debe especificar el puerto y 'ssl'

listen 192.168.2.26:443 ssl;

b) El bloque del servidor también especifica certificados y parámetros SSL

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

ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;

Respuesta2

Estás cerca, creo (soy nuevo en Nginx), pero tu segundo bloque de servidor necesita un poco más... Tengo uno en mi servidor con esto:

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;

Tenga en cuenta lo siguiente:

  1. La directiva de escucha especifica ssl.
  2. Se especifican el certificado y la clave del certificado. El certificado debe estar en un lugar de fácil acceso porque se envía a todas las personas que acceden a su sitio. La clave está en un lugar donde sólo los usuarios que la necesitan puedan acceder a ella.

El ipv6, el juego de caracteres y el cuerpo máximo del cliente son líneas que tengo en mi servidor pero que no son necesarias para lo que estás haciendo aquí. Puedes nombrarlos como quieras y colocarlos en cualquier lugar, así que no te obsesiones con el nombre o la ubicación exactos del archivo si guardas el tuyo en otro lugar. Así es como me gusta hacerlo y mi ls -lresultado es:

-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

información relacionada