这是一个由于特定客户要求而产生的非常丑陋的解决方法。
默认设置:像这样使用 proxy_pass 到后端(我已经删除了无用的项目)
server{
server_name customer.mysite.com;
location / {
proxy_pass http://backend.mysite.com/[customerId];
}
}
到目前为止一切都很简单,一切都重写,一切都很好。但是,现在的要求是,如果客户没有任何查询参数,我们应该添加一些。
- https://customer.mysite.com/-> 重定向至https://customer.mysite.com/?query=foo
- https://customer.mysite.com/?query=foo-> 应用常规规则
我最初的想法是使用第二条规则进行location = /
精确匹配,但文档并没有表明这种方法根本不关心查询参数。
那么,有没有办法在 nginx 中实现我需要的功能,还是我必须寻找其他方法?
答案1
要测试查询字符串是否缺失,您可以$args
使用块将变量与空字符串进行比较if
。要将此规则仅应用于 URI /
,请将其放在location = /
块内。
例如:
location / {
proxy_pass http://backend.example.com/customerId/;
}
location = / {
if ($args = "") { rewrite ^ /?query=foo last; }
proxy_pass http://backend.example.com/customerId/;
}
看这种警告关于 的使用if
。