Nginx redirection vers le port spécifié dans l'URL

Est-il possible d'utiliser Nginx à proxy à partir d'une URL comme celle-ci:

http://example.com/service/1234/foo.php?... 

à un service interne comme celui-ci:

 http://example.com:1234/foo.php?... 

C'est-à-dire, extraire un numéro de l'URL et l'utiliser comme numéro de port sur le même server?

rewrite semble limitée à la manipulation de la partie de l'URL après le port, et je ne pense pas que proxy_pass puisse accéder à une sous-string Regex.

Le problème spécifique que j'essaie de résoudre est que tous mes services sont accessibles sur le port 80, puisque divers réseaux publics et d'entreprise bloquent les ports exotiques sur lesquels les services fonctionnent réellement. Il doit donc s'agir d'un proxy inverse, et non d'une redirection.

Cette méthode fonctionne pour un seul port:

 location /service/5010 { rewrite ^/service/5010/(.*)$ /$1 break; proxy_pass http://127.0.0.1:5010; } 

Mais la question est de savoir comment rendre le 5010 juste un paramètre extrait de l'URL.

Quelque chose comme

  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; } 

Au less, cela fonctionne pour moi sur Nginx 1.6.2