在运行 Apache 2.4 的 Ubuntu 服务器 18.04 上,我想将所有 Apache 的传出请求传递给转发代理,以便出于安全原因(使用Tinyproxy)过滤掉一些 URL。
似乎我的 Vhost 配置中的 Apache 的ProxyRemote指令应该这样做,所以我使用了以下内容:
ProxyRequests Off
ProxyRemote * http://localhost:8888
我还尝试将环境变量添加到 /etc/environment,如下所示:
http_proxy="http://localhost:8888/"
https_proxy="http://localhost:8888/"
然后我可以看到现在使用代理的其他应用程序,例如(来自 Tinyproxy 的日志):
CONNECT Jul 28 17:26:58 [2318]: Request (file descriptor 7): CONNECT api.snapcraft.io:443 HTTP/1.1
CONNECT Jul 28 17:26:58 [2315]: Request (file descriptor 7): CONNECT api.snapcraft.io:443 HTTP/1.1
但不是阿帕奇。它仍然将所有出站请求直接传递到端口 80 和 443。如何让 Apache 使用代理?
编辑:我刚刚在 Stack Overflow 上看到了这个重复的问题,所以我认为我正在尝试做正确的事情。但是怎么做?
因此,我再次阅读了 Apache 文档,并考虑了它说
ProxyRemote
“定义此代理的远程代理”这一事实。这意味着 Apache 必须已经在代理请求并且您想要使用上游代理。所以这可能不是我想要的。因此,相反,我研究了使用环境变量,它似乎以我想要的方式工作:
将其放入
/etc/apache2/envvars
Apache 托管的大多数(但不是全部?)应用程序都使用代理:把它
/etc/environment
放进去,意味着如果其他应用程序被配置为使用这些环境变量,它们也将通过代理:我看到现在传出端口 80 和 443 都通过代理。万岁。
我目前使用 iptables 强制所有端口 80 通过 Tinyproxy 传出:
但鉴于上述情况,我什至可以阻止端口 443,因为任何不使用 envvars 的东西都可能是不可靠的。