常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

关于wiki上Nginx:强过防火墙的文章的疑问:关于日志处理

 
发表新文章   回复文章    FreeBSD China -> 技术交流
阅读上一个主题 :: 阅读下一个主题  
作者 留言
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Fri 2015-04-24 19:14:51    发表主题: 关于wiki上Nginx:强过防火墙的文章的疑问:关于日志处理 引用并回复

https://wiki.freebsdchina.org/nginx_%E5%BC%BA%E8%BF%87%E9%98%B2%E7%81%AB%E5%A2%99

这篇文章非常好,学习了很多
仔细研究了下,目前发现一个问题就是关于日志的

这个文章里在front.conf里启用了日志
access_log /var/log/nginx/front-access.log main;
error_log /var/log/nginx/front-error.log;

然后再对访问进行过滤时,也启用了日志
error_log /var/log/nginx/human-static-error.log;
access_log /var/log/nginx/human-static-access.log cache;

error_log /var/log/nginx/human-script-error.log;
access_log /var/log/nginx/human-script-access.log main;

error_log /var/log/nginx/bot-static-error.log;
access_log /var/log/nginx/bot-static-access.log cache;

error_log /var/log/nginx/bot-script-error.log;
access_log /var/log/nginx/bot-script-access.log cache;

其中对于访问的处理又是最终使用proxy_pass转发到后端
proxy_pass http://backend;
其中backend的监听是
server unix:/tmp/nginx-local.sock;


最终的server配置又是

server {
listen unix:/tmp/nginx-local.sock;
access_log /var/log/nginx/yourdomain-access.log main;
error_log /var/log/nginx/yourdomain-error.log;


这样就出现一个很严重的问题,就是日志其实重复记录了多次,在访问过滤的时候记录了一次,然后prox_pass的时候又在最后的server里记录了


关于这个重复记录日志问题有没有什么解决方法?
返回页首
阅览会员资料 发送站内信件
harbinbeer
道士


注册时间: 2006-07-27
文章: 829

文章发表于: Fri 2015-04-24 19:23:37    发表主题: 引用并回复

如果觉得没用的日志可以关掉。
这么做是细化管理的需要,比如区分实际访问和有效访问。
其实zfs启用压缩后,日志没有那么恐怖。
返回页首
阅览会员资料 发送站内信件
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Fri 2015-04-24 20:40:56    发表主题: 引用并回复

harbinbeer 写到:
如果觉得没用的日志可以关掉。
这么做是细化管理的需要,比如区分实际访问和有效访问。
其实zfs启用压缩后,日志没有那么恐怖。


区分日志这个很有用。一般我是把静态和动态的分开,就是在php的解析里加个log部分,这样被攻击的时候基本只看动态日志就好了

但是这个文章里的做法,可以有效区分各种流量,但是不能把动态的单独区分出来。因为最终请求还是传送到了backend,重复太多了。

不知道Nginx有没有什么参数可以在处理proxy_pass的时候不记录重复日志?
类似于nginx对location里日志的处理,在location里做各种跳转,其实日志都是以最终的Location设置生效。
返回页首
阅览会员资料 发送站内信件
harbinbeer
道士


注册时间: 2006-07-27
文章: 829

文章发表于: Fri 2015-04-24 21:45:36    发表主题: 引用并回复

照葫芦画瓢,在网站配置里也区分动静态即可。
meteor8488 写到:
harbinbeer 写到:
如果觉得没用的日志可以关掉。
这么做是细化管理的需要,比如区分实际访问和有效访问。
其实zfs启用压缩后,日志没有那么恐怖。


区分日志这个很有用。一般我是把静态和动态的分开,就是在php的解析里加个log部分,这样被攻击的时候基本只看动态日志就好了

但是这个文章里的做法,可以有效区分各种流量,但是不能把动态的单独区分出来。因为最终请求还是传送到了backend,重复太多了。

不知道Nginx有没有什么参数可以在处理proxy_pass的时候不记录重复日志?
类似于nginx对location里日志的处理,在location里做各种跳转,其实日志都是以最终的Location设置生效。
返回页首
阅览会员资料 发送站内信件
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Sat 2015-04-25 21:13:35    发表主题: 引用并回复

harbinbeer 写到:
照葫芦画瓢,在网站配置里也区分动静态即可。
meteor8488 写到:
harbinbeer 写到:
如果觉得没用的日志可以关掉。
这么做是细化管理的需要,比如区分实际访问和有效访问。
其实zfs启用压缩后,日志没有那么恐怖。


区分日志这个很有用。一般我是把静态和动态的分开,就是在php的解析里加个log部分,这样被攻击的时候基本只看动态日志就好了

但是这个文章里的做法,可以有效区分各种流量,但是不能把动态的单独区分出来。因为最终请求还是传送到了backend,重复太多了。

不知道Nginx有没有什么参数可以在处理proxy_pass的时候不记录重复日志?
类似于nginx对location里日志的处理,在location里做各种跳转,其实日志都是以最终的Location设置生效。


我尝试用error_page结合internal named location来区分访问,失败了。。。难道只能用传统的proxy_pass方式?

具体提问
https://serverfault.com/questions/685539/nginx-location-within-named-location

看了下文档,@named location果然不支持嵌套

引用:
. The “@” prefix defines a named location. Such a location is not used for a regular request processing, but instead used for request redirection. They cannot be nested, and cannot contain nested locations. .


昨天晚上灵机一动想出来的解决方案失败了,555555
返回页首
阅览会员资料 发送站内信件
harbinbeer
道士


注册时间: 2006-07-27
文章: 829

文章发表于: Sat 2015-04-25 23:01:35    发表主题: 引用并回复

proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 Shocked
返回页首
阅览会员资料 发送站内信件
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Tue 2015-04-28 21:02:03    发表主题: 引用并回复

harbinbeer 写到:
proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 Shocked


这几天一个参数一个参数的研究这个文章,又发现一个问题

里面nginx加载了FILE_AIO模块,然后使用的是ZFS
同时又启用了sendfile

代码:
 aio                         sendfile;
  sendfile                    on;
  tcp_nopush                  on;
  directio                    4m;
  directio_alignment          4096;


但是根据这篇文章的说法,zfs是不支持directio的,而sendfile在zfs上又会导致重复缓存,建议是关闭sendfile
https://calomel.org/nginx.html
返回页首
阅览会员资料 发送站内信件
harbinbeer
道士


注册时间: 2006-07-27
文章: 829

文章发表于: Tue 2015-04-28 23:48:06    发表主题: 引用并回复

多谢提醒。
今晚头大,等抽空研究下calomel的文章,不过即便不支持好像也没发现什么副作用。

meteor8488 写到:
harbinbeer 写到:
proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 :shock:


这几天一个参数一个参数的研究这个文章,又发现一个问题

里面nginx加载了FILE_AIO模块,然后使用的是ZFS
同时又启用了sendfile

代码:
 aio                         sendfile;
  sendfile                    on;
  tcp_nopush                  on;
  directio                    4m;
  directio_alignment          4096;


但是根据这篇文章的说法,zfs是不支持directio的,而sendfile在zfs上又会导致重复缓存,建议是关闭sendfile
https://calomel.org/nginx.html
返回页首
阅览会员资料 发送站内信件
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Tue 2015-05-05 18:00:04    发表主题: 引用并回复

harbinbeer 写到:
多谢提醒。
今晚头大,等抽空研究下calomel的文章,不过即便不支持好像也没发现什么副作用。

meteor8488 写到:
harbinbeer 写到:
proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 Shocked


这几天一个参数一个参数的研究这个文章,又发现一个问题

里面nginx加载了FILE_AIO模块,然后使用的是ZFS
同时又启用了sendfile

代码:
 aio                         sendfile;
  sendfile                    on;
  tcp_nopush                  on;
  directio                    4m;
  directio_alignment          4096;


但是根据这篇文章的说法,zfs是不支持directio的,而sendfile在zfs上又会导致重复缓存,建议是关闭sendfile
https://calomel.org/nginx.html


关于这个文章还有个疑问。如果不通过proxy_pass的办法,还有没有什么其他选择可以对访问进行过滤分类呢? 总感觉如果单机的话,本机代理本机会导致性能下降。虽然访问更好控制,但是损失似乎有点大。

另外一个问题是
比如这个文章中很关键的鉴别伪装的浏览器,用cookie.conf做。
如果不对访问进行分类就加载cookie.conf,会导致google baidu的spider也被干掉。
返回页首
阅览会员资料 发送站内信件
meteor8488
半仙


注册时间: 2011-02-02
文章: 136

文章发表于: Tue 2015-05-05 19:46:04    发表主题: 引用并回复

我试着用下面的方法来处理假的bot

我发现有很多采集器用假的user-agent,然后xforwarded设置成google ip
这里就同时检测http_x_forwarded_for和user agent
如果user-agent出现bot,同时x-forward为空,则444
map $http_x_forwarded_for $xf {
default 1;
"" 0;
}
map $http_user_agent $fakebots {
default 0;
"~*bot" $xf;
"~*bing" $xf;
"~*search" $xf;
}
if ($fakebots) {
return 444;
}
上面这一段,我测试后是 如果伪造的agent访问论坛根目录,会得到444
但是如果访问具体的页面,则会出现内容可以加载,但是css不能加载的情况


下面这段是我今天晚上想到的来针对假冒user-agent来做验证,借用cookie.conf的内容

map $http_user_agent $ifbot {
default 0;
"~*rogerbot" 3;
"~*ChinasoSpider" 3;
"~*Yahoo" 1;
"~*archive" 1;
"~*search" 1;
"~*Googlebot" 1;
"~Mediapartners-Google" 1;
"~*bingbot" 1;
"~*msn" 1;


if ($ifbot = "0") {
set $humanfilter 1;
}
if ( $request_uri !~ "~mod\=swfupload\&action\=swfupload" ) {
set $humanfilter "${humanfilter}1";
}
if ($humanfilter = "11"){
rewrite_by_lua '
local random = ngx.var.cookie_random
if(random == nil) then
random = math.random(999999)
end
local token = ngx.md5("hello" .. ngx.var.remote_addr .. random)
if (ngx.var.cookie_token ~= token) then
ngx.header["Set-Cookie"] = {"token=" .. token, "random=" .. random}
return ngx.redirect(ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.request_uri)
end
';
}

但是我测试结果是,正常的google spider和百度spider依然会被干掉,诡异
返回页首
阅览会员资料 发送站内信件
harbinbeer
道士


注册时间: 2006-07-27
文章: 829

文章发表于: Sun 2016-01-31 01:02:03    发表主题: 引用并回复

meteor8488 写到:
harbinbeer 写到:
多谢提醒。
今晚头大,等抽空研究下calomel的文章,不过即便不支持好像也没发现什么副作用。

meteor8488 写到:
harbinbeer 写到:
proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 :shock:


这几天一个参数一个参数的研究这个文章,又发现一个问题

里面nginx加载了FILE_AIO模块,然后使用的是ZFS
同时又启用了sendfile

代码:
 aio                         sendfile;
  sendfile                    on;
  tcp_nopush                  on;
  directio                    4m;
  directio_alignment          4096;


但是根据这篇文章的说法,zfs是不支持directio的,而sendfile在zfs上又会导致重复缓存,建议是关闭sendfile
https://calomel.org/nginx.html


关于这个文章还有个疑问。如果不通过proxy_pass的办法,还有没有什么其他选择可以对访问进行过滤分类呢? 总感觉如果单机的话,本机代理本机会导致性能下降。虽然访问更好控制,但是损失似乎有点大。

另外一个问题是
比如这个文章中很关键的鉴别伪装的浏览器,用cookie.conf做。
如果不对访问进行分类就加载cookie.conf,会导致google baidu的spider也被干掉。


多启动几个nginx对机器影响不大,尤其是后端那层基本没什么特殊操作,性能损耗基本可以忽略。
至于真假机器人,主要还是针对一些post和search操作。采集什么的简单弄弄就得了,从理论上来说,能见就能采,我认为没必要在防范采集上消耗太多。
返回页首
阅览会员资料 发送站内信件
bleakwind
老妖


注册时间: 2005-01-07
文章: 1343
来自: The Matrix

文章发表于: Sun 2016-03-27 20:23:43    发表主题: 引用并回复

harbinbeer 写到:
meteor8488 写到:
harbinbeer 写到:
多谢提醒。
今晚头大,等抽空研究下calomel的文章,不过即便不支持好像也没发现什么副作用。

meteor8488 写到:
harbinbeer 写到:
proxy和site是两套服务……你要在site配置里重新调用map
另外,你不把所有配置贴上去,没人看的懂 Shocked


这几天一个参数一个参数的研究这个文章,又发现一个问题

里面nginx加载了FILE_AIO模块,然后使用的是ZFS
同时又启用了sendfile

代码:
 aio                         sendfile;
  sendfile                    on;
  tcp_nopush                  on;
  directio                    4m;
  directio_alignment          4096;


但是根据这篇文章的说法,zfs是不支持directio的,而sendfile在zfs上又会导致重复缓存,建议是关闭sendfile
https://calomel.org/nginx.html


关于这个文章还有个疑问。如果不通过proxy_pass的办法,还有没有什么其他选择可以对访问进行过滤分类呢? 总感觉如果单机的话,本机代理本机会导致性能下降。虽然访问更好控制,但是损失似乎有点大。

另外一个问题是
比如这个文章中很关键的鉴别伪装的浏览器,用cookie.conf做。
如果不对访问进行分类就加载cookie.conf,会导致google baidu的spider也被干掉。


多启动几个nginx对机器影响不大,尤其是后端那层基本没什么特殊操作,性能损耗基本可以忽略。
至于真假机器人,主要还是针对一些post和search操作。采集什么的简单弄弄就得了,从理论上来说,能见就能采,我认为没必要在防范采集上消耗太多。


防采集最好办法是Ajax. 不过这样对搜索引擎就不友好了,不过Google前两年说是研究针对Ajax的收录...

_________________
听不到你的声音,只有风声在想...
返回页首
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页 MSN Messenger
从以前的文章开始显示:   
发表新文章   回复文章    FreeBSD China -> 技术交流 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标