apache 正向代理-如何覆盖目标地址?

apache 正向代理-如何覆盖目标地址?

我正在运行 apache 作为正向代理来为一些 Android 应用程序执行标头注入、URL 操作和请求日志记录,并且我需要覆盖某些请求的目标。

例如,www.example.com有一个 IP 地址,1.2.3.4但我需要将流量转移到,4.3.2.1而不更改应用程序或影响 apache 服务器上运行的任何其他应用程序。

我还需要在不同条件下灵活地覆盖地址,这意味着操纵/etc/hosts不是一种选择。

客户端是在 Android 模拟器上运行的应用程序,配置为使用在主机上运行的 apache 代理实例。

到目前为止我的设置如下:

## conf.d/proxy_a.conf
## proxy_b.conf, proxy_c.conf listen on different ports with different mappings / headers

Listen localhost:16002

<VirtualHost localhost:16002>
        ProxyRequests On
        ProxyPreserveHost On
        RewriteEngine On

        <Proxy "http://www.example.com/*">
                Order deny,allow
                Deny from all
                Allow from localhost

                RequestHeader set host "www.example.com"
                RewriteRule ^/?(.*) http://4.3.2.1/$1 [NE]
        </Proxy>

        <Proxy *>
                Order deny,allow
                Deny from all
                Allow from localhost
        </Proxy>

        ## also tried, doesn't work
        #RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
        #RewriteRule ^/?(.*) http://4.3.2.1/$1 [NE]

        RequestHeader set x-custom-header "abcdefgh"

        RequestHeader merge user-agent "proxy16002"

</VirtualHost>

我知道我正在寻找的功能可以通过反向代理轻松实现,但我正在寻找使用直接代理的解决方案(无需修改/etc/hosts或应用程序)。

缺少了什么?使用 Apache (2.2) 是否可行?

答案1

这可能不是您想要的,但您可以设置另一个 Apache 代理(例如在虚拟机中)并在那里修改 /etc/hosts 文件。然后流量将通过两个代理传输 - 您现在拥有的代理和您在虚拟机上设置的代理。我知道这不是理想的选择,但如果没有人想出更好的解决方案,这是一个可能的解决方案。

或者,您可以修改 Apache 源并重新编译它,但这也不理想。

相关内容