Перенаправлять IP-адрес клиента на сервер
Я настроил лак в качестве прокси для перенаправления HTTP-запроса на серверы, работающие под Apache. Я хотел бы иметь IP-адреса клиентов в моих логах apache вместо IP-адреса сервера лака. Вот мой файл конфигурации лака:
backend $my_backend {
.host = "192.168.0.103";
.port = "80";
}
sub vcl_recv {
} else if (req.http.host == "$my_domain_name") {
set req.backend = $my_backend;
if (req.request == "POST") {
if (req.http.X-Forwarded-For) {
set req.http.X-Real-Forwarded-For = req.http.X-Forwarded-For ", " regsub(client.ip, ":.*", "");
unset req.http.X-Forwarded-For;
} else {
# Simply use the client IP
set req.http.X-Real-Forwarded-For = regsub(client.ip, ":.*", "");
}
return(pipe);
}
return(lookup);
}
}
На конфигурационном файле бэкэнда apache у меня есть это
RPAFenable On
RPAFsethostname On
RPAFproxy_ips $varnish_proxy_ip
RPAFheader X-Real-IP
Проблема в том, что инструкция RPAFheader не распознается в Debian6:
root@$hostname:~# apache2ctl configtest
Invalid command 'RPAFheader', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
root@$hostname:~#
Пусть кто-нибудь установит mod_rpaf на debian, чтобы помочь мне с этой проблемой mod_rpaf
Большое спасибо за Вашу помощь!
1 ответ
Решение
Хорошо, я отвечу на свой вопрос, чтобы помочь людям, которые могут иметь такую же проблему:
Сначала добавьте следующие строки в файл конфигурации лака (default.vcl)
sub vcl_recv {
if (req.http.host == "myDomain.net") {
set req.http.host = "myDomain.net";
set req.backend = myBackend;
# Compatiblity with Apache log
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
# No cache for POST requests
if (req.request == "POST") {
return(pipe);
}
return(lookup);
}
}
Затем добавьте персонализированный формат логов для apache при настройке вашего vhost
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
...
CustomLog ${APACHE_LOG_DIR}/access.log varnishcombined
Это оно!