我如何configurationApache使用HTTPS进行外部访问,但使用HTTP进行内部访问?

我有两台服务器,一台是可在公司本地networking内部访问的开发服务器,另一台是面向公众的Web服务器。 开发服务器托pipe了几个工具,我们用来pipe理我们的项目在内部,但现在我们需要在外部访问它们,同时保持安全。

我使用ProxyPass和ProxyPassReverse指令在外部服务器上设置了mod_proxy,将外部请求映射到内部服务器。 我还在这些外部虚拟主机上设置了身份validation,以提供外部访问的安全性。 我还需要使用SSL进行外部访问,但理想情况下,希望内部工具可以通过简单的HTTP访问内部网中的人员。

是否有可能实现这种行为,如果有的话,我应该使用哪些指令和Apache模块,以及在哪些服务器上安装?

我将假设您接受公共的HTTP连接,但是您执行标准的HTTPredirect来强制他们使用HTTPS。

如果是这种情况,那么你可以改变你的HTTP指令,如果你是内部networking的一部分,不要redirect。

为此,您需要使用Apache的mod_rewrite并在REMOTE_ADDR上进行过滤。 基本上,你想redirect一切不匹配你的networking。

另一种select,也许更安全一个,就是让你的内部用户使用一个不同于公众的服务地址。 让他们连接到myservice.mydomain.local而不是myservice.mydomain.com。

你可以在Apacheconfiguration中创build2个不同的虚拟主机,每个虚拟主机在不同的IP上响应,尽pipe仍然使用相同的文档根目录? 在你的路由器上,使用192.168.1.1来响应example.com,而在外面则使用342.434.564.23来响应。 或者让每个人在办公室使用不同的地址(internal.example.com)。

如果你使用的是Linux,研究防火墙的iptables 。 如果是Windows,则可以使用IPSec策略来模拟类似的防火墙规则。

基本上,您将基于源IP子网分配规则。 如果连接来自内部networking,请阻止HTTPS。 否则,阻止HTTP。

您最好使用防火墙规则来限制这一点。

我不认为Apache有一个function来实现这一点,即使它会产生开销。 防火墙是为这样的事情devise的,因此会更合适。 我假设你有一个外部防火墙(我希望你这样做),你应该只允许端口443到这台机器和阻止端口80外部。

你可以,如果你真的想使用Apache使用两个虚拟主机,一个在内部监听,另一个在外部IP上监听。 然而这会使configuration翻倍,因此我不会推荐它,因为这将是一个痛苦的维护。

编辑:对不起,Apache可以通过mod_rewrite做到这一点,但它会把请求开销,它仍然是更合适的使用防火墙。 也就是说,使用mod_rewrite,你可以将人们从httpredirect到https,如果人们不断尝试访问http,这可能会很方便。