I\'ve configured Varnish 3 with Apache and it is running perfectly alright. However i\'m unable to get the Client ip logged in Apache logs. I tried a few solutions googling
As the OP mentioned in the comments, the solution is an Apache module. Varnish adds the X-Forwarded-For
header by default.
Then an apache module like mod_rpaf (Apache 2.2) or mod_remoteip (Apache 2.4) will set the remote_ip value to the one passed in by the X-Forwarded-For
header.
This provides a far more robust solution than simply logging the value of the X-Forwarded-For header into your apache logs. For example, it allows you to access the same site on 2 IPs, via Varnish or directly, and the site functions as you'd expect and is logged correctly.
Add this line to your 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;
}
Then change the logformat of apache
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
And now in your Virtualhost
<VirtualHost *:8080>
ServerName www.abc.com
CustomLog /var/log/httpd/www.abc.com/access.log varnishcombined
</VirtualHost>
I think you've had a working config in your pastebin example, this should actually do the trick:
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;
}
}
In your vcl_recv{}.