É possível usar o Nginx como proxy de um URL como este:
http://example.com/service/1234/foo.php?...
para um serviço interno como este:
http://example.com:1234/foo.php?...
Ou seja, extrair um número da URL e usá-lo como o número da porta para o mesmo servidor?
rewrite
parece limitado a manipular a parte do URL após a porta e não acho que proxy_pass
possa acessar uma substring regex a partir dele.
O problema específico que estou tentando resolver é ter todos os meus serviços acessíveis na porta 80, já que várias redes corporativas e públicas bloqueiam as portas exóticas nas quais os serviços realmente são executados. Então tem que ser um proxy reverso, não um redirecionamento.
Este método funciona para uma única porta:
location /service/5010 {
rewrite ^/service/5010/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:5010;
}
Mas a questão é como tornar o 5010 apenas um parâmetro extraído do URL.