![NginX - 重写 http_referer](https://linux22.com/image/709278/NginX%20-%20%E9%87%8D%E5%86%99%20http_referer.png)
我使用 Nginx 作为后端服务器的代理。我的应用程序会将所有 referer url 存储到数据库中。为了减少数据库的空间,我想根据某些条件忽略一些 referer。
如果 uri 包含某些字符串,我想删除一些 http_referer。
由于 nginx 不能在 "if{...}" 中使用 [proxy_set_header Referer ""] ,
因此,我尝试使用“map”,但仍然不起作用。这是我的配置
http {
....
map $http_referer $ref {
default $http_referer;
}
....
}
server {
......
if ($request_uri ~ .*XXXXXXX.*) {
set $ref "";
}
proxy_set_header Referer $ref;
......
}
- 我可以创建一个变量 $ref
- 它可以通过使用“proxy_set_header Referer $ref”将 $ref 映射到 header
- 但是“if”不能改变 $ref 的值
我们不能改变“if”里面的全局变量吗?
答案1
你可以尝试这个代码
map $http_referer $ref {
default $http_referer;
~*(badref.com) 1;
}
以及服务器部分
if ($ref = '1') {
set $ref "";
}
proxy_set_header Referer $ref;
若要在一个条件下检查 $request_uri 和 $http_referer,你可以使用
map $http_referer$request_uri $ref {
default $http_referer;
~*.*badref.com.*XXXXXXX.* "";
}
proxy_set_header Referer $ref;