使用Apache代理规则在外部提供内部服务

时间:2016-10-19 15:16:48

标签: apache proxy reverse-proxy mod-proxy

我现在搜索了大约一个小时,虽然有很多相关的例子,但没有一个帮我解决这个问题。

我有几个本地服务器,我们称之为打印服务器和托管交换机。这两个设备都在端口80上托管管理页面。我还有一个基于apache2的网络服务器。

我想要做的是访问example.com/printserver并让它管理与打印服务器的代理连接。

很多例子都会向你显示这样的内容

<VirtualHost *:80>

    ProxyPass /printserver http://[local IP of print server]/printserver
    ProxyPassReverse /printserver http://[local IP of print server]/printserver

    ProxyPass /switch http://[local IP of managed switch]/switch 
    ProxyPassReverse /switch http://[local IP of managed switch]/switch 

</VirtualHost>

但这对我来说没有道理意义。这些设备的管理页面不在/printserver,它们位于/

当我使用以下内容配置apache时,我能够实现我想要的一项服务

<VirtualHost *:80>

    ProxyPass / http://[local IP of print server]
    ProxyPassReverse / http://[local IP of print server]

</VirtualHost>

此外,我注意到当我使用以下内容配置apache时,它会尝试代理我的服务,但由于该服务返回相对URL,因此printserver部分与相对地址和整个事物合并跌倒了。

<VirtualHost *:80>

    ProxyPass /printserver http://[local IP of print server]/printserver
    ProxyPassReverse /printserver http://[local IP of managed switch]/switch

</VirtualHost>

例如,在之前的示例中,我的浏览器显示 http://example.com/pathtoindex/indexOfPrintServer.php

在第二个示例中,我的浏览器显示 http://example.com/printserverpathtoindex/indexOfPrintServer.php

如果我使用以下

<VirtualHost *:80>

    ProxyPass /printserver/ http://[local IP of print server]/printserver
    ProxyPassReverse /printserver/ http://[local IP of managed switch]/switch

</VirtualHost>

然后我的浏览器会显示以下内容,但由于http://example.com/pathtoindex未被我的代理规则接收而且未被任何其他虚拟服务器处理,因此会失败。

HTTP:\ example.com \ pathtoindex \ indexOfPrintServer.php

我想要实现的目标:

当我访问http://example.com/printserver时,我希望看到当我在本地网络上访问http://[local IP of print server]时看到的内容。

同样,当我访问http://example.com/switch时,我希望看到当我在本地网络上访问http://[local IP of managed switch]时看到的内容。

1 个答案:

答案 0 :(得分:0)

关键是使用proxyhtmlurlmap拦截正在传输的页面并更新HTML url标记以容纳额外的路径元素。

然而,在我的特定设置中,这是无效的,因为两个服务器页面都有一些令人讨厌的javascript,在客户端的ganerated一些URL。显然,几乎不可能检查传输中的HTML并解决这些问题。

我最后使用了iptables,并决定通过端口访问服务器。 (我无法在路由器上设置此项,因为我的路由器端口转发数量非常有限)。

如果我真的想要,我可以让apache将example.com/server1重定向到example.com:xxxx,但这是不必要的。