我使用 nginx 作为多个 Rails 应用程序的反向代理(使用 Nixy)。如果缺少,我需要重写一些请求以在 url 前面注入一个字符串。
例如:如果我有http://proxy_ip/app_name/some/root我不想修改任何东西,但如果我有http://proxy_ip/some/root我想转换http://proxy_ip/app_name/some/root
我试过rewrite ^ /app_name/$uri;但它不起作用,我不知道如何有条件地进行重写。
我使用 nginx 作为多个 Rails 应用程序的反向代理(使用 Nixy)。如果缺少,我需要重写一些请求以在 url 前面注入一个字符串。
例如:如果我有http://proxy_ip/app_name/some/root我不想修改任何东西,但如果我有http://proxy_ip/some/root我想转换http://proxy_ip/app_name/some/root
我试过rewrite ^ /app_name/$uri;但它不起作用,我不知道如何有条件地进行重写。
您可以使用地图来检测缺少的应用程序名称,然后返回 301 以及缺少的应用程序名称。
map $uri $prepend_app_name {
~^/some/root(/.*)?$ app_name;
}
server {
if ($prepend_app_name) {
return 301 /$prepend_app_name$uri;
}
# ...
}
查看评论,如果尝试使用 if 语句,请记住 nginx 文档的建议:https ://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/