我有一个正在使用的设置Varnish/Hitch >> HAProxy >> Apache
。除了客户端 IP 地址未正确传递到后端 Apache 服务器的问题外,它都可以正常工作。Apache 日志显示运行 HAProxy 的计算机的 IP 地址。
我的 Varnish 命令行包含:
varnishd -b 127.0.0.1:8080 -a 127.0.0.1:8000,PROXY
Hitch 有这个:
backend = "[127.0.0.1]:8000"
write-proxy-v2 = on
HAProxy 配置如下:
defaults
option forwardfor
mode http
frontend CacheFrontend
bind *:8080
backend apache
server apache web01:80
在 Apache 中,我使用的remoteip_module
是httpd.conf
RemoteIPHeader X-Forwarded-For
据我所知,使用此模块时没有理由更改 Apache 中的日志格式。
我不确定哪里是配置错误。
编辑:
以下是一个简短的 PHP 脚本,显示了传递给 Apache 的内容:
<?php
echo $_SERVER['HTTP_X_FORWARDED_FOR'] . PHP_EOL;
echo $_SERVER['REMOTE_ADDR'] . PHP_EOL;
<redacted_client_ip>, 127.0.0.1
10.7.7.107
10.7.7.107
是 HAProxy 机器的 IP。
答案1
PROXY 协议绝对是可行的方法,因为它会传输原始客户端 IP 地址,而不管跳数是多少。
然而,为了使其工作,所有跳跃都应该理解 PROXY 协议。
漆
我没有在您的配置概述中看到这一点,但您绝对应该.proxy_header
在 Varnish 服务器的后端定义中设置该属性。
请删除-b
Varnish 命令行选项并将其替换为典型的-f /etc/varnish/default.vcl
。default.vcl
您应该在文件中声明后端并确保它能够代理人。
以下是该default.vcl
文件的一个示例:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
.proxy = 2;
}
如上所述,-b
应将 替换为-f
。如下所示:
varnishd -f /etc/varnish/default.vcl -a 127.0.0.1:8000,PROXY
HaProxy 与 Apache
据,直到...为止哈普罗西有关:请确保传入的 HaProxy 连接也使用 PROXY。
对于 Apache,您可以选择仅读取X-Forwarded-For
标头来获取客户端 IP 地址,或者也接受 PROXY 协议连接。