【问题标题】:Is there a way to remove apaches Reverse Proxy Request Headers?有没有办法删除 apache 反向代理请求标头?
【发布时间】:2011-11-10 20:25:04
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 我知道的唯一方法是来自 mod_headers 的 RequestHeader:用于删除这些标题,例如RequestHeader unset X-Forwarded-For。该指令具有较低的优先级,并在请求由其处理程序在修复阶段运行之前运行 after mod_rewrite。我不确定 X-Forwarded-* 标头,但它适用于用户代理和类似标头 - 删除它们没有问题
  • 这正是我尝试过的,但这些标题似乎无法以这种方式编辑

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


【解决方案1】:

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

ProxyAddHeaders Off

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

<Proxy *>
  ProxyAddHeaders Off
</Proxy>

并且,与

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

它开始工作的地方。

【讨论】:

    【解决方案2】:

    我在 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安装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;
      }
      

    【讨论】:

    • 你能告诉我们更多关于放置位置/路径的细节吗?
    • 我在“服务器”部分的“/etc/nginx/conf.d/default.conf”中有它。这就是你通常添加“位置”的方式。
    【解决方案3】:

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

    要在 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进行编译

    【讨论】:

    • 你能详细说明你是如何让 mod_headers 工作来删除这些标题的吗?无论我尝试什么,我似乎都无法在 apache 2.2 中使用。
    • 对不起,我没有选中这个答案,因为它不起作用。如果我没记错的话,那就没有办法了,我最终修补了模块!但是从那以后我早就切换到 nginx 了。
    • 我想我只会使用 Apache 2.4,它允许您使用 ProxyAddHeaders,除非我需要更精细的控制——在这种情况下,我也会切换到 nginx :)
    • 我同意你的观点,这可能是更好的方法,尤其是考虑到 nginx
    • 需要明确的是,Apache 2.4 有 httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxyaddheaders 使用 ProxyAddHeaders Off 应该按照要求进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多