
Meu objetivo é escrever testes Jasmine (uma estrutura de teste JavaScript BDD) que exercitem uma API de back-end construída por uma equipe separada.
Eu tenho um servidor Jasmine rodando na porta 9000. Esse código emite solicitações AJAX com um caminho relativo que começa com/web/. Quero que essas solicitações sejam direcionadas para o back-end.
Até agora, 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 AJAX (por exemplo, para
http://localhost:50000/web/internal?action=network-statistics
) estão 502'ing. Acredito que esteja atingindo o endpoint correto, mas há um erro de 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 recebo 404s. Poderia jurar que vi configurações semelhantes funcionarem em outro lugar no Server Fault. Por exemplo,esseé uma pergunta muito semelhante. o que estou perdendo? O que poderia dar errado? Desculpe se isso é vago, ficarei feliz em adicionar mais detalhes.
Responder1
Tente remover /web/. Acho que você está recebendo 404 porque tentou acessar /web/web que não existe. Você deve encontrar mais dicas nos logs do Nginx.
upstream backend {
server api-dev.example.com:443;
}
server {
...
location / {
proxy_pass http://localhost:9000;
...
}
location /web/ {
proxy_pass https://backend;
...
}
}