我正在运行 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 源并重新编译它,但这也不理想。