6

我已经用 Apache 配置了 Varnish 3,它运行得很好。但是我无法在 Apache 日志中登录客户端 ip。我尝试了一些解决方案,但没有运气。现在我的 Apache 访问日志文件正在记录服务器 IP 而不是客户端 IP 地址。

以下是我的配置供您考虑:

清漆 VCL:(/etc/varnish/default.vlc):http ://pastebin.com/PuBqZ6fx

阿帕奇配置

/etc/httpd/conf/httpd.conf

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

阿帕奇虚拟主机

...... 其他东西 ...... ErrorLog 日志/fr-error-log CustomLog 日志/fr-custom-log varnishcombined ...... 其他东西 .....

注意:安装的 Varnish 版本是 varnish-3.0.2-1.el5.x86_64

谢谢。拉赫尔

4

3 回答 3

12

我认为您在 pastebin 示例中有一个有效的配置,这实际上应该可以解决问题:

if (req.restarts == 0) {
  if (req.http.X-Forwarded-For) {
    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
  } else {
    set req.http.X-Forwarded-For = client.ip;
  }
}

在您的 vcl_recv{} 中。

于 2012-04-05T12:06:28.870 回答
10

正如评论中提到的OP,解决方案是一个Apache模块。VarnishX-Forwarded-For默认添加标题。

然后像mod_rpaf (Apache 2.2) 或mod_remoteip(Apache 2.4) 这样的 apache 模块会将 remote_ip 值设置为X-Forwarded-For标头传入的值。

这提供了一个比简单地将 X-Forwarded-For 标头的值记录到 apache 日志中更强大的解决方案。例如,它允许您通过 Varnish 或直接访问 2 个 IP 上的同一个站点,并且该站点按您预期的方式运行并正确记录。

于 2013-06-05T11:24:53.080 回答
9

将此行添加到您的 vcl

sub vcl_recv {
  # Add a unique header containing the client address
  remove req.http.X-Forwarded-For;
  set    req.http.X-Forwarded-For = client.ip;

}

然后改变apache的logformat

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

现在在您的虚拟主机中

<VirtualHost *:8080>
  ServerName www.abc.com

  CustomLog /var/log/httpd/www.abc.com/access.log varnishcombined

</VirtualHost>
于 2012-12-19T00:53:59.507 回答