¿El proxy inverso de Nginx a HTTPS ascendente obtiene 502 Bad Gateway?

¿El proxy inverso de Nginx a HTTPS ascendente obtiene 502 Bad Gateway?

Mi objetivo es escribir pruebas de Jasmine (un marco de prueba de JavaScript BDD) que ejerciten una API de back-end creada por un equipo independiente.

Tengo un servidor Jasmine ejecutándose en el puerto 9000. Ese código emite solicitudes AJAX con una ruta relativa que comienza con /web/. Quiero que esas solicitudes se dirijan al backend.

Hasta ahora, tengo un proxy inverso para un bloque ascendente como este:

upstream backend {
  server api-dev.example.com;
}

server {
  ...

  location / {
    proxy_pass http://localhost:9000;
    ...
  }

  location /web/ {
    proxy_pass https://backend/web/;
    ...
  }
}

El tráfico a '/' funciona bien, pero las solicitudes AJAX (por ejemplo, a

http://localhost:50000/web/internal?action=network-statistics

) son 502'ing. Creo que está llegando al punto final correcto pero hay un error de SSL. El registro de errores de Nginx parece confirmar mi sospecha:

2013/12/13 16:55:28 [error] 1885#0: *257 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream, client: 127.0.0.1, server: localhost, request: "GET /web/internal/stats?action=network-statistics&request=null HTTP/1.1", upstream: "https://50.18.192.173:80/web/internal/stats?action=network-statistics", host: "localhost:50000", referrer: "http://localhost:50000/"

Sin embargo, si cambio el bloque ascendente a:

upstream backend {
  server api-dev.example.com:443;
}

…luego obtengo 404. Podría jurar que había visto configuraciones similares funcionar en otros lugares de Server Fault. Por ejemplo,estees una pregunta muy similar. ¿Qué me estoy perdiendo? ¿Qué podría estar saliendo mal? Lo siento si esto es vago, estaré feliz de agregar más detalles.

Respuesta1

Intente eliminar /web/. Creo que obtienes 404 porque intentó acceder a /web/web que no existe. Debería poder encontrar más pistas en los registros de Nginx.

upstream backend {
        server api-dev.example.com:443;
}

server {
        ...

    location / {
        proxy_pass http://localhost:9000;
        ...
    }

    location /web/ {
        proxy_pass https://backend;
        ...
    }
}

información relacionada