我有我的nginx设置阻止某些查阅者如此:
if ($http_referer ~* (site_name) ) { return 403; }
这工作正常,但是我想也阻止引用到日志文件。
我尝试添加
access_log /path/to/server/bad_domain.log;
在if语句中; 然而这是行不通的。
有任何想法吗?
谢谢。
编辑:
我也试过这个无济于事。
if ($http_referer ~* (site_name) ) { set $crawler 'yes'; return 403; } location ~ .* { if ($crawler = 'yes') { access_log /path/to/server/bad_domain.log; } }
编辑2:
试
map $http_referer $log_referer { domain1.com 1; default 0; } server { .. if ($http_referer = "1") { set $log_referer 1; } access_log /path/to/logs/bad_domain.log if=$log_referer; ...}
给我的输出
nginx: [emerg] unknown log format "if=$log_referer"
根据在这里和这里find的nginx文档,尝试使用映射规则将您的http引用器映射到特定值,然后根据该值login到特定文件。 把这张地图放到你的http上下文中(服务器上下文之外):
map $http_referer $log_referer { example.com 1; default 0; }
这发送到您的服务器,位置等。
access_log /path/to/bad_domain.log combined if=$log_referer;
你的第二次尝试[ 编辑2 ]是有正确的语法,但我认为错误发生在您使用NGINX的旧版本。 访问日志中的“ if ”是在NGINX 1.7中引入的,请参阅发行说明 。
如果你已经从Ubuntu的repo安装NGINX,那么他们正在运行版本1.4.x。 用-V运行nginx来知道你正在运行的是哪个版本。
$ nginx -V nginx version: nginx/1.8.0
我在下面的bash小提琴中设置了NGINXconfiguration:
https://thinapps.org/fiddle/lwcorkai27030iawscqklwonderquest
看一看! 知道如何获取最新版本的NGINX并使用条件日志logging。
我遇到了同样的问题,并通过joinaccess_log来解决
access_log /path/to/logs/bad_domain.log combined if=$log_referer;