注意到varnishncsa日志的一些奇怪行为,我将其推入ELK堆栈。
为了维护准确的客户端IP地址,我的清漆配置中包含以下内容: ``` //保存原始值 set req.http.X-Varnish-Orig-Forwarded-For = req.http.X-Forwarded-For; set req.http.X-Varnish-Orig-clientip = client.ip;
// Check / normalise forwarded for header for below C logic
if(req.http.CloudFront-Viewer-Country) {
// Cloudfront request? Note: This header must be configured in CF settings
// Remove right most IP address, it belongs to CF
set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For, ",.(?:[0-9]{1,3}\.){3}[0-9]{1,3}$", "");
}
// Remove all but the right most IP
set req.http.X-Forwarded-For = regsub(req.http.X-Forwarded-For, ".*,\s", "");
即。删除cloudfront IP并保留正确的客户端地址。
但是,我注意到在logstash中这不是正在发生的事情...... CloudFront IP总是会通过...
我的varnishncsa日志格式设置为:logformat ="%{X-Forwarded-For} i%l%u%t \"%r \" %s%b \"%{Referer} i \" \"%{用户代理} I \" \"%{X - 转发,原} I \""
下面是一个示例日志:
85.101.101.101,54.240.145.45 - - [31 / Oct / 2016:14:55:53 +1100]" GET http://example.com/stuff/things&349394 HTTP / 1.1" 200 65733" https://example.com&ttl=30&unique_id=1" " Amazon CloudFront" " HTTPS"
正如您所看到的,54.240是一个AWS地址,即。 CloudFront ...我的vark日志grok设置为解析x-forwarded-for并将最后一个IP设置为客户端ip。显然,随着CloudFront的到来,它不应该投入扳手来设置正确的客户端IP ......
知道这里出了什么问题吗?对我来说,似乎varnishncsa在我的清漆配置中的vcl_recv逻辑有机会运行之前发送它的日志记录......?但那没什么意义。在执行请求的哪个部分,varnishncsa日志会起作用?我会假设最后一次.....?