我需要一个快速解决方案,允许我在防火墙后面托管多个 Web 服务器。它们位于不同的计算机上,因此我无法使用 Apache 虚拟主机。我也不想为每台机器使用不同的非标准端口。
问题是我的路由器只能将端口 443 转发到一台机器。我认为最好的解决方案是使用反向代理或代理转发,但我一直不明白如何设置它。
- 我假设我可以将所有 443 流量转发到其中一台服务器并使其成为代理服务器。
- 所有服务器仅接受 html 流量。
- 我正在使用 DDNS,所有服务器都解析到相同的 WAN IP 地址。
设置:
- server1.domain.com = 代理和 wiki 服务器
- server2.domain.com = 文档服务器
- server3.domain.com = owncloud 服务器
/etc/apache2/conf-available/proxy-pass.conf
我尝试在server1上输入以下内容:
SSLProxyEngine on
ProxyPass "/directory" "https://server2.domain.com/directory"
ProxyPass "/owncloud" "https://server3.domain.com/owncloud"
这有效但这不是我想要的。
我需要将所有流量引导到传入 URL 域名指定的服务器,而不管目录如何,因为我在基本 URL 后面有很多子目录。
就像是:
ProxyPass "https://server2.domain.com" "https://server2.domain.com"
ProxyPass "https://server3.domain.com" "https://server3.domain.com"
我是否应该寻找其他解决方案,例如pound
,或者是否有办法使用 apache 来实现这一点。我认为我已经安装了 apache,因此可以使用它吗?
答案1
它们在不同的计算机上,所以我不能使用 apache 虚拟主机
事实上这正是您需要做的;)
手册中没有明确说明这一点,但是您可以通过将/
根 URL 作为虚拟主机条目中 ProxyPass 指令的目标,来对特定主机进行所有内容的反向代理:
<VirtualHost *:80>
ServerName host.example.com
ProxyPass / http://internalserver.example.net/
ProxyPassReverse / http://internalserver.example.net/
</VirtualHost>
<VirtualHost *:80>
ServerName host2.example.com
ProxyPass / http://other-internalserver.example.net/
ProxyPassReverse / http://other-internalserver.example.net/
</VirtualHost>