Varnish 和 HAProxy 向 Apache 传递了错误的客户端 IP

Varnish 和 HAProxy 向 Apache 传递了错误的客户端 IP

我有一个正在使用的设置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_modulehttpd.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 服务器的后端定义中设置该属性。

请删除-bVarnish 命令行选项并将其替换为典型的-f /etc/varnish/default.vcldefault.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 协议连接。

相关内容