Можно ли использовать Nginx для прокси с такого URL-адреса:
http://example.com/service/1234/foo.php?...
во внутреннюю службу вроде этого:
http://example.com:1234/foo.php?...
То есть извлечь номер из URL-адреса и использовать его в качестве номера порта для того же сервера?
rewrite
похоже, ограничивается манипулированием частью URL-адреса после порта, и я не думаю, что proxy_pass
может получить доступ к подстроке регулярного выражения из него.
Конкретная проблема, которую я пытаюсь решить, заключается в том, чтобы все мои службы были доступны через порт 80, поскольку различные корпоративные и общедоступные сети блокируют экзотические порты, на которых фактически работают службы. Так что это должен быть обратный прокси, а не перенаправление.
Этот метод работает для одного порта:
location /service/5010 {
rewrite ^/service/5010/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:5010;
}
Но вопрос в том, как сделать 5010 просто параметром, извлеченным из URL.
Что-то вроде
location / {
set $proxy_port 8080;
if ($uri ~ "^/service/([0-9]+)/.*$")
{
set $proxy_port $1;
rewrite ^/service/[0-9]+/(.*)$ /$1 break;
}
proxy_pass http://127.0.0.1:$proxy_port;
}
по крайней мере, у меня это работает на Nginx 1.6.2