基于非路径的nginx url重写
我目前正在使用openshift托管多个应用程序,我希望能够使用nginx处理所有路由。假设我拥有域基于非路径的nginx url重写,nginx,Nginx,我目前正在使用openshift托管多个应用程序,我希望能够使用nginx处理所有路由。假设我拥有域https://project.us.company.comopenshift上的应用程序如下所示: https://foo-v1-project.eocp-apps.us.company.com https://foo-v2-project.eocp-apps.us.company.com https://project.us.company.com/bar/test --> https
https://project.us.company.com
openshift上的应用程序如下所示:
https://foo-v1-project.eocp-apps.us.company.com
https://foo-v2-project.eocp-apps.us.company.com
https://project.us.company.com/bar/test --> https://bar-v2-project.eocp-apps.us.company.com/test
我希望能够执行反向代理
并像这样重写:
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
我还需要一些逻辑,使其像这样工作:
https://foo-v1-project.eocp-apps.us.company.com
https://foo-v2-project.eocp-apps.us.company.com
https://project.us.company.com/bar/test --> https://bar-v2-project.eocp-apps.us.company.com/test
因此,如果没有版本,它应该默认为一个值(v2
)
# 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
}
是的,这很有效,谢谢!如果你做了
/foo/v
或/foo/v\uu
,唯一不起作用的就是边缘案例。我还添加了$is_args$args
以在需要时传递查询参数。。。哦,等等。正确的。好的,我可以修理那些边缘的箱子。