Nginx从日志

时间:2018-04-07 09:47:57

标签: nginx logging

我在Raspian发行版上安装了nginx服务器,我想从access_log中排除我的本地IP,我尝试在网络上找到的所有东西,但没办法让它工作......

我尝试了这个解决方案:

map $remote_addr $log_ip { "192.168.2.1" 0; "192.168.2.2" 0; default 1; }

然后

access_log /var/log/nginx/proxy.log main if=$log_ip;

但是Nginx没有开始(状态告诉我它不会识别if=$log_ip;

我必须完全解释我想要的:

  • 我有一个私人网站,我的覆盆子上托管了一个auth访问权限(这个网站只是个人网站)

  • 它在Nginx下运行,受Fail2ban保护,如果需要,它会扫描日志文件并禁止IP。

  • 现在我想优化日志文件尽可能精简(我有一个创建ramdisk的模块并将所有日志放在它上面并在将它们写入磁盘后这是为了节省太多卡片写访问权)

  • 所以我不需要记录我的本地IP,但我想保持fail_ban的access_log正常工作。

2 个答案:

答案 0 :(得分:0)

将以下规则添加到ngnix config的http{}上下文中。

    map $remote_addr $ip_anonym1 {
 default 0.0.0;
 "~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" $ip;
 "~(?P<ip>[^:]+:[^:]+):" $ip;
}

map $remote_addr $ip_anonym2 {
 default .0;
 "~(?P<ip>(\d+)\.(\d+)\.(\d+))\.\d+" .0;
 "~(?P<ip>[^:]+:[^:]+):" ::;
}

map $ip_anonym1$ip_anonym2 $ip_anonymized {
 default 0.0.0.0;
 "~(?P<ip>.*)" $ip;
}

log_format anonymized '$ip_anonymized - $remote_user [$time_local] ' 
   '"$request" $status $body_bytes_sent ' 
   '"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log anonymized;

这不会删除您的IP,但可以创建匿名IP而不是实际IP。

希望这有帮助。

答案 1 :(得分:0)

我找到了解决方案,我运行的是旧版本的Nginx(1.6.2),我刚刚更新了最新版本并且有效......

Nginx 1.7.0+允许在access_log指令本身中使用if条件。