Nginx가 HTTPS 업스트림으로 역방향 프록시를 실행하면 502 잘못된 게이트웨이가 발생합니까?

Nginx가 HTTPS 업스트림으로 역방향 프록시를 실행하면 502 잘못된 게이트웨이가 발생합니까?

내 목표는 별도의 팀에서 구축한 백엔드 API를 실행하는 Jasmine(JavaScript BDD 테스트 프레임워크) 테스트를 작성하는 것입니다.

포트 9000에서 실행되는 Jasmine 서버가 있습니다. 해당 코드는 /web/으로 시작하는 상대 경로를 사용하여 AJAX 요청을 발행합니다. 이러한 요청이 백엔드로 전달되기를 원합니다.

지금까지 다음과 같이 업스트림 블록에 대한 역방향 프록시가 있습니다.

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

server {
  ...

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

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

'/'에 대한 트래픽은 제대로 작동하지만 AJAX 요청(예:

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

)은 502'입니다. 올바른 끝점에 도달했다고 생각하는데 SSL 오류가 있습니다. Nginx의 오류 로그는 내 의심을 확인하는 것 같습니다.

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/"

그러나 업스트림 블록을 다음과 같이 변경하면:

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

...그러면 404가 표시됩니다. Server Fault의 다른 곳에서도 유사한 구성이 작동하는 것을 본 적이 있다고 맹세할 수 있습니다. 예를 들어,이것매우 비슷한 질문입니다. 내가 무엇을 놓치고 있나요? 무엇이 잘못될 수 있나요? 모호하다면 죄송합니다. 자세한 내용을 추가해 드리겠습니다.

답변1

/web/을 제거해 보세요. 존재하지 않는 /web/web에 액세스하려고 했기 때문에 404가 발생하는 것 같습니다. Nginx 로그에서 더 많은 힌트를 찾을 수 있습니다.

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

server {
        ...

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

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

관련 정보