Pregunta ¿Puede nginx escuchar en el puerto 80, pero enviar en sentido ascendente al backend utilizando SSL en 443?


Para el cumplimiento de PCI, mi aplicación está obligada a usar una conexión segura / encriptada entre el servidor proxy inverso y el servidor de aplicaciones back-end, mientras que la conexión que viene en el proxy inverso está en el puerto 80, es decir, el proxy inverso debe actuar como http-to -Convertidor de HTTP.

Un diagrama simple:

IIS7 <--- puerto 443 --- nginx <---- puerto 80 ---- Internet

Estoy evaluando el uso de nginx sobre squid para esto, y esto es lo que tengo en mi nginx.conf hasta ahora:

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream backend {
        server mybackendserver:443;
    }

    server {
        server_name www.mysite.com
        listen       80;
        ssl on;
        ssl_certificate /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;
        ssl_verify_client off;
        location = / {
                    proxy_pass  https://backend;
                proxy_set_header Host $http_host;
            proxy_set_header X_FORWARDED_PROTO https;
        }

    }

}

Lo anterior da: "400 Solicitud incorrecta La solicitud HTTP simple se envió al puerto HTTPS" cuando navego a www.misitio.com.

¿A dónde me voy mal? ¿Es esto incluso factible? ¿Es nginx mejor que el calamar para este propósito?

Gracias por adelantado, sol


6
2017-08-08 19:29


origen


"Para el cumplimiento de PCI ..." Apuesto a que no. - womble♦


Respuestas:


proxy_pass es capaz de hacer proxy a HTTPS, esto no es un problema.

Tienes un error en tu configuración. Quitar lineas

ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;

Estos están activando el servidor SSL en el lado Nginx, lo que significa que su Nginx espera una conexión SSL en el puerto 80. Dado que los navegadores envían el HTTP ordinario al puerto 80, Nginx se queja "400 Solicitud incorrecta La solicitud HTTP simple se envió al puerto HTTPS"


12
2017-08-09 07:08



¡Excelente! Esa es la respuesta que estaba buscando, gracias. - G Chuk
Acéptalo entonces :) - Alexander Azarov