Configure Nginx como proxy inverso con SSL ascendente

40

Intento configurar un servidor Nginx como proxy inverso para que las solicitudes https que recibe de los clientes se envíen también al servidor ascendente a través de https.

Aquí está la configuración que uso:

http {

    # enable reverse proxy
    proxy_redirect              off;
    proxy_set_header            Host            $http_host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  $proxy_add_x_forwarded_for;

    upstream streaming_example_com 
    {
          server WEBSERVER_IP:443; 
    }

    server 
    {
        listen      443 default ssl;
        server_name streaming.example.com;
        access_log  /tmp/nginx_reverse_access.log;
        error_log   /tmp/nginx_reverse_error.log;
        root        /usr/local/nginx/html;
        index       index.html;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_certificate /etc/nginx/ssl/example.com.crt;
        ssl_certificate_key /etc/nginx/ssl/example.com.key;
        ssl_verify_client off;
        ssl_protocols        SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers RC4:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;


        location /
        {
            proxy_pass  https://streaming_example_com;
        }
    }
}

De todos modos, cuando intento acceder a un archivo usando proxy inverso, este es el error que obtengo en los registros de proxy inverso:

20/03/2014 12:09:07 [error] 4113079 # 0: * 1 SSL_do_handshake () falló (SSL: error: 1408E0F4: rutinas SSL: SSL3_GET_MESSAGE: mensaje inesperado) mientras el protocolo de enlace SSL hacia arriba, cliente: 192.168.1.2, servidor: streaming.example.com, solicitud: "GET /publishers/0/645/_teaser.jpg HTTP / 1.1", aguas arriba: " https://MYSERVER.COM:443/publishers/0/645/_teaser.jpg " , host: "streaming.example.com"

¿Alguna idea de lo que estoy haciendo mal?

Alex Flo
fuente
¿Intentó sin usar el upstreammódulo poniendo directamente WEBSERVER_IP en la directiva proxy_pass para ver si obtiene el mismo error?
Benoit
No, no probé esto, pero como se explica a continuación, la opción lo proxy_ssl_session_reuse off;hizo funcionar como se esperaba.
Alex Flo
10
Elimine SSLv3 de los protocolos compatibles. No es seguro y no debe usarlo: ssl_protocols SSLv3
user220703

Respuestas:

30

Encontré cuál fue el error, necesitaba agregar proxy_ssl_session_reuse off;

Alex Flo
fuente
1
Gracias. Para aquellos que aún pueden tener problemas después de usar esta configuración, recuerde usar https en lugar de solo http al comienzo de la URL dada como parámetro en proxy_pass. De lo contrario, nginx no cifrará el tráfico enviado a la cadena ascendente y seguirá recibiendo el mismo mensaje de error.
Lucio Mollinedo
1

En mi caso, estaba tratando de invertir el proxy de un sitio web detrás de Cloudflare. Tengo el mismo error en /var/log/nginx/error.log. Intenté muchas soluciones y esta me funcionó:

proxy_ssl_server_name on;

sí, incluso en 2019, algunos servicios todavía necesitan SNI para distinguir entre sitios alojados.

iBug
fuente