Proxy Reverso Nginx: Configurações Especiais para um Caminho no Servidor Upstream

1

O Nginx é usado como proxy reverso na frente de um servidor Node. O servidor do nó tem um caminho ( /ws ) onde WebSockets são usados, esse caminho precisa de configurações especiais. /ws não é um diretório, portanto, uma solicitação para ele não deve ter uma barra final. Qual é a maneira correta de configurar isso? A configuração a seguir não funciona, mas mostra o que se pretende.

location /service/ {
  proxy_read_timeout  30s;
  proxy_pass        http://service:8080/;

  # not working, requests are sent to http://service:8080/service/ws
  # instead http://service:8080/ws
  location /service/ws {  
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout  36000s;
  }
}
    
por user2372674 07.11.2017 / 12:06

1 resposta

1

Você está usando um local aninhado no momento e não tenho certeza de como proxy_pass é herdado pelo bloco interno. Você poderia experimentar dois blocos location independentes com um proxy_pass explícito em cada bloco:

location /service/ {
    proxy_read_timeout  30s;
    proxy_pass        http://service:8080/;
}
location /service/ws {  
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout  36000s;

    proxy_pass        http://service:8080/ws;
}
    
por 07.11.2017 / 16:14