有没有办法删除apaches反向代理请求标头?

时间:2011-09-05 19:53:20

标签: apache mod-rewrite apache2 mod-proxy mod-headers

当充当反向代理时,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取消它们。我可以添加更多条目,但我无法删除它们

任何想法?

3 个答案:

答案 0 :(得分: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

进行编译

答案 1 :(得分: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. 根据these instructions
  2. 安装nginx
  3. 配置nginx以避免安全问题。
  4. 在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;
    }
    

答案 2 :(得分:1)

自Apache 2以来,正如这个answer所说的那样,

IBindingList

理论上禁用它。根据我的经验,它没有任何效果。但是,结合

ProxyAddHeaders Off

<Proxy *>
  ProxyAddHeaders Off
</Proxy>

某处它开始起作用了。