nginx proxy_pass duas portas em subpastas

1

Então eu tive meu último problema de "proxy reverso" corrigido com relação a "mapear" uma porta para uma subpasta. Obrigado novamente a essa incrível comunidade.

Eu consegui trabalhar com essa solução por um tempo, mas agora estou enfrentando um novo problema. A situação é:

Há uma configuração de página da Web (usando nginx) com esse url http://test.domain.com:8042/view.html . Eu precisava, por vários motivos, que essa porta se transformasse em uma subpasta e a conseguisse (com ajuda) e ganhasse http://test.domain.com/view/view.html .

O proxy_pass para isso é:

location ~/view(.*)$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_pass http://test.domain.com:8042$1;

Isso funciona incrível. Eu posso acessar a página acima de http://test.domain.com/view/view.html . Existem vários websockets nessa página, um também tem a porta 8042. Este funciona bem. No entanto, os outros websockets têm portas diferentes, e. 8159. Eu adicionei um proxy_pass respectivo à configuração do nginx:

location ~/cantrace(.*)$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_pass http://test.domain.com:8159$1;

Do Javascript, este websocket é chamado via

my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws');

mas isso não funciona. Nem faz

my_websocket = new WebSocket('ws://test.domain.com/view/cantrace/ws');

O que funciona, no entanto, é

http://test.domain.com:8042/view.html

e depois carrega os outros websockets em view.html com

my_websocket = new WebSocket('ws://test.domain.com/cantrace/ws');

que anteriormente não funcionava.

Então, claramente, o proxy_pass duplo com / view e / cantrace é um problema aqui. Existe uma maneira de contornar isso com o nginx?

Muito obrigado!

Patrick

    
por pAt84 06.08.2016 / 22:04

1 resposta

0

Eu tinha essa configuração para acessar dois servidores por trás de um proxy reverso. Acredito que sua diretiva proxy_passs não tenha um / à direita. Essa foi a minha configuração:

       location /server1 {
               proxy_pass http://server1:8081/;
               proxy_buffering off;
       }
       location /server2 {
               proxy_pass http://server2:8082/;
               proxy_buffering off;
       }

No seu caso, isso se traduziria em:

proxy_pass http://test.domain.com:8042/$1;
    
por 07.08.2016 / 10:26