我现在搜索了大约一个小时,虽然有很多相关的例子,但没有一个帮我解决这个问题。
我有几个本地服务器,我们称之为打印服务器和托管交换机。这两个设备都在端口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]
时看到的内容。
答案 0 :(得分:0)
关键是使用proxyhtmlurlmap
拦截正在传输的页面并更新HTML url标记以容纳额外的路径元素。
然而,在我的特定设置中,这是无效的,因为两个服务器页面都有一些令人讨厌的javascript,在客户端的ganerated一些URL。显然,几乎不可能检查传输中的HTML并解决这些问题。
我最后使用了iptables,并决定通过端口访问服务器。 (我无法在路由器上设置此项,因为我的路由器端口转发数量非常有限)。
如果我真的想要,我可以让apache将example.com/server1重定向到example.com:xxxx,但这是不必要的。