NginX - 重写 http_referer

NginX - 重写 http_referer

我使用 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;

相关内容