在运行 Apache 2.4 的 Ubuntu 服务器 18.04 上,我想将所有 Apache 的传出请求传递给正向代理,以便出于安全原因过滤掉一些 URL(使用Tinyproxy)。
Apache 的代理远程我的 Vhost 配置中的指令应该执行此操作,因此我使用了以下命令:
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
但 Apache 不是这样。它仍然将所有出站请求直接传递到端口 80 和 443。如何让 Apache 使用代理?
编辑:我刚刚看到这个重复的Stack Overflow 上的问题,所以我假设我正在尝试做正确的事情。但是怎么做呢?
答案1
因此我再次阅读了 Apache 文档,并想到其中所说的ProxyRemote
“定义此代理的远程代理”。这意味着 Apache 已经代理请求,并且您想要使用上游代理。所以它可能不是我想要的。
因此,我考虑使用环境变量,它似乎更符合我的预期:
添加此项后,/etc/apache2/envvars
大多数(但不是全部?)由 Apache 托管的应用程序将使用代理:
export http_proxy='http://localhost:8888'
export https_proxy='http://localhost:8888'
将其放入/etc/environment
,意味着如果其他应用程序配置为使用这些环境变量,它们也将通过代理:
http_proxy="http://localhost:8888/"
https_proxy="http://localhost:8888/"
我发现现在传出的 80 和 443 端口都通过代理。太好了。
我目前使用 iptables 强制所有 80 端口通过 Tinyproxy 传出:
iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner ! --uid-owner tinyproxy -j REDIRECT --to-ports 8888
但考虑到上述情况,我甚至可能能够阻止端口 443,因为任何不使用环境变量的东西都可能是不可靠的。