Actualmente estoy usando OpenShift para alojar varias aplicaciones y quiero poder manejar todo el enrutamiento con nginx. Digamos que tengo el dominio https://project.us.company.com
y las aplicaciones en openshift son así:
https://foo-v1-project.eocp-apps.us.company.com https://foo-v2-project.eocp-apps.us.company.com
Quiero poder hacer un reverse proxy
y reescribir así:
https://project.us.company.com/foo/v1/test -> https://foo-v1-project.eocp-apps.us.company.com/test https://project.us.company.com/foo/v2/test1 -> https://foo-v2-project.eocp-apps.us.company.com/test1 https://project.us.company.com/bar/v1/test?limit=5 -> https://bar-v1-project.eocp-apps.us.company.com/test?limit=5 https://project.us.company.com/bar/v2/test/test2 -> https://bar-v2-project.eocp-apps.us.company.com/test/test2
También necesito algo de lógica para que funcione así:
https://project.us.company.com/bar/test --> https://bar-v2-project.eocp-apps.us.company.com/test
Entonces, sin una versión, debería tener un valor predeterminado ( v2
en este caso).
Prueba esto:
# Assuming only three apps for now: foo, bar, baz location ~ ^/((?:foo|bar|baz)(?:/v[0-9]+)?)$ { return 301 /$1/; } rewrite ^/(foo|bar|baz)/((?:[^v].*|v[^_0-9].*|v[0-9]+(?:[^/0-9].*)?|v_(?:[^/].*)?)?)$ /$1/v_/$2; # different default versions rewrite /foo/v_/(.*) /foo/v2/$1 last; rewrite /bar/v_/(.*) /bar/v4/$1 last; rewrite /baz/v_/(.*) /baz/v8/$1 last; location ~ /(foo|bar|baz)/(v[0-9]+)(/.*) { proxy_pass https://$1-$2-project.eocp-apps.us.company.com$3 }