15

当充当反向代理时,apache 添加 x-forwarded 标头,如此处所述。

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers

在我的配置中,我将服务器 A 配置为转发代理。有这样一条规则:

RewriteRule proxy:(.*example.com)/(.*) $1.mysecondserver.com/$2 [P]

此规则允许服务器从我的其他服务器之一请求资源。

在第二台服务器(源)上,我有一个用于资源的虚拟主机容器和另一个重写规则,如下所示:

RewriteRule some-regex some-url [P]

像这样似乎没有意义,但是还有很多其他的事情我遗漏了,因为这不是问题的一部分。

但是,最终请求具有以下标头:

[X-Forwarded-For] => ip of 1st server
[X-Forwarded-Host] => example.myseconserver.com
[X-Forwarded-Server] => example.com

我希望那些标题消失。

我似乎无法使用 mod_headers 取消设置它们。我可以向它们添加更多条目,但我无法删除它们。

有任何想法吗?

4

3 回答 3

4

从 Apache 2 开始,正如这个漂亮的答案所说,

ProxyAddHeaders Off

理论上禁用它。根据我的经验,它没有效果。然而,结合

<Proxy *>
  ProxyAddHeaders Off
</Proxy>

  RequestHeader unset X-Forwarded-Host
  RequestHeader unset X-Forwarded-For
  RequestHeader unset X-Forwarded-Server

它开始工作的地方。

于 2018-04-19T16:19:43.830 回答
2

更正答案:因为它是硬编码的,所以没有办法做到这一点

要在 mod_proxy_http.c 的源代码中修复此问题,请搜索以下部分:

    apr_table_mergen(r->headers_in, "X-Forwarded-Server",
                 r->server->server_hostname);
}

然后立即添加以下代码:

// remove any X-Forwarded headers
apr_table_unset(r->headers_in, "X-Forwarded-For");
apr_table_unset(r->headers_in, "X-Forwarded-Host");
apr_table_unset(r->headers_in, "X-Forwarded-Server");

然后通过运行编译apxs2 -cia mod_proxy_http.c

于 2012-04-08T23:18:24.890 回答
1

我在 CentOS 5 上的 httpd 2.2 上遇到了同样的问题。无法安装 httpd 2.4。但由于某些原因,我无法完全切换到 nginx。所以我通过在 httpd 和目标地址之间插入 nginx 代理来做到这一点。所以我有: httpd( localhost:80/path) -> nginx( localhost:81/path) -> http://your.destination/path。安装步骤如下:

  1. 按照这些说明安装 nginx
  2. 配置nginx避免安全问题。
  3. 在 nginx 中添加一个位置,该位置将删除那些 httpd 的反向代理请求标头。它看起来像这样:

    location /path {
        proxy_set_header x-forwarded-for "";
        proxy_set_header x-forwarded-host "";
        proxy_set_header x-forwarded-server "";
        proxy_pass http://your.destination/path;
    }
    
于 2016-04-12T12:05:06.860 回答