NginX – 重写http_referer

我使用Nginx作为我的后端服务器的代理。 而我的应用程序将存储所有引用url到数据库。 为了减less数据库的空间,我想在某些情况下忽略一些引用者。

如果uri包含一些string,我想删除一些http_referer。

由于nginx不能在“if {…}”中使用[proxy_set_header Referer“”]

所以,我尝试使用“地图”,但它仍然不起作用。 这是我的configuration

http { .... map $http_referer $ref { default $http_referer; } .... } server { ...... if ($request_uri ~ .*XXXXXXX.*) { set $ref ""; } proxy_set_header Referer $ref; ...... } 
  • 我可以创build一个variables$ ref
  • 它可以通过使用“proxy_set_header Referer $ ref”将$ ref映射到头部,
  • 但是“if”不能改变$ ref的值

难道我们不能在“if”里面改变全局variables吗?

你可以试试这个代码

 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;