nginx config: Como encaminhar para portas diferentes com base no parâmetro de URL?

1

Eu sou novo no nginx. Abaixo está o que eu quero:

http://example.com/3000/lorem/ipsum -> http://example.com:3000/lorem/ipsum
http://example.com/3001/lorem/ipsum -> http://example.com:3001/lorem/ipsum
http://example.com/3002/lorem/ipsum -> http://example.com:3002/lorem/ipsum

Eu fiz algo para funcionar, mas acho que existem maneiras melhores:

location /3000/ {
    proxy_pass http://localhost:3000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /3001/ {
    proxy_pass http://localhost:3001/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

location /3002/ {
    proxy_pass http://localhost:3002/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Eu li muitos posts para resolver isso usando o regex, mas não consigo descobrir exatamente como é o uso.

    
por wdetac 05.07.2018 / 14:31

2 respostas

1

Abaixo corrigimos o problema:

location ~ ^/300(0|1|2) {
    rewrite ^/300(0|1|2)(/?)(.*) /$3 break;
    proxy_pass http://localhost:300$1;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
    
por 10.07.2018 / 10:39
1

Isso deve funcionar:

location ~ /(300[0-2])(/|)(\S+|)$ {
    proxy_pass http://127.0.0.1:$1/$3;
}

Observe que isso pode causar problemas se o número da porta não estiver no lado mais à esquerda no URI, como: example.com/lorem/ipsum/3000.html será proxied para localhost: 3000 / lorem / ipsum / .html que é lixo é claro.

    
por 06.07.2018 / 14:22

Tags