Nginx inverte o proxy para o upstream HTTPS obtendo 502 Bad Gateway?

5

Meu objetivo é escrever testes de Jasmine (uma estrutura de testes de JavaScript do BDD) que exercitem uma API de back-end criada por uma equipe separada.

Eu tenho um servidor Jasmine em execução na porta 9000. Esse código emite solicitações AJAX com um caminho relativo que começa com / web /. Eu quero que esses pedidos sejam direcionados para o backend.

Até agora, eu tenho um proxy reverso para um bloco upstream assim:

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

server {
  ...

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

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

O tráfego para '/' está funcionando bem, mas as solicitações do AJAX (por exemplo, para

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

) são 502'ing. Eu acredito que ele está atingindo o endpoint correto, mas há um erro SSL. O log de erros do Nginx parece confirmar minha suspeita:

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

No entanto, se eu alterar o bloco upstream para:

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

... então eu recebo 404s. Eu poderia jurar que eu vi configurações semelhantes funcionar em outro lugar no Server Fault. Por exemplo, isso é uma questão muito parecida. o que estou perdendo? O que poderia dar errado? Desculpe se isso é vago, estou feliz em adicionar mais detalhes.

    
por Jason Benn 16.12.2013 / 23:52

1 resposta

2

Tente remover / web /. Eu acho que você está recebendo 404 porque tentou acessar / web / web que não existe. Você deve ser capaz de encontrar mais dicas nos registros Nginx.

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

server {
        ...

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

    location /web/ {
        proxy_pass https://backend;
        ...
    }
}
    
por 16.12.2015 / 00:57