单个静态 IP 后面不同机器上的多个网络服务器

Multiple webservers on different machines behind single static IP

我 运行 遇到这样一种情况,我工作的公司希望将其网络服务器分布在虚拟机上,而不是依靠一个物理盒子来完成所有事情。我们当前的设置如下所示:

example.com → static IP → internal firewall (only 1 machine may receive port 80 traffic) → 192.168.1.100 (our production box)

example1.com, example2.com, etc... → same as above

我们的生产箱运行 Apache 并使用 VirtutalHost 将传入的名称分隔到适当的本地文件夹。这按预期工作,但出于性能和安全方面的考虑,我们希望将一些主机从生产中移出。类似于以下设置:

*.example.com → static IP → firewall → 192.168.1.100 (Production)
jira.example.com -> static IP -> firewall -> 192.168.1.100 -> 192.168.1.120
*.example1.com → static IP → firewall → 192.168.1.100 → 192.168.1.111 (Wordpress-1)
*.example2.com → static IP → firewall → 192.168.1.100 → 192.168.1.112 (Wordpress-2)
etc…..

我们对 192.168.1.100 上的 VirtualHost 文件尝试了类似于以下内容的操作:

<VirtualHost *:*>
    ServerName example.com
      ...
</VirtualHost>

<VirtualHost jira.example.com:*>
    ServerName jira.example.com
      ...
    ProxyPass         /  http://192.168.1.120:80/
    ProxyPassReverse  /  http://192.168.1.120:80/
</VirtualHost>

<VirtualHost example1.com:*>
    ServerName example1.com
      ...
    ProxyPass         /  http://192.168.1.111:80/
    ProxyPassReverse  /  http://192.168.1.111:80/
</VirtualHost>

<VirtualHost example2.com:*>
    ServerName example2.com
      ...
    ProxyPass         /  http://192.168.1.112:80/
    ProxyPassReverse  /  http://192.168.1.112:80/
</VirtualHost>

这部分起作用了——我能够使用 example1.com 与 Wordpress-1 对话。但是,重定向会导致超链接指向 example.com,这会破坏站点。

当我研究 DNS 时,它似乎是一个更好的选择。是否可以让域名提供商(在本例中为 GoDaddy)指向防火墙后面的 DNS 服务器,然后适当地引导流量?像这样:

hostname → static IP → firewall → 192.168.1.100 (DNS) → webserver assigned to hostname

example.com:
NS  ns1.example.com.
ns1.example.com.    A   192.168.1.100
www A   192.168.1.100
jira.example.com. A 192.168.1.120   

example1.com:
NS  ns1.example1.com.
ns1.example1.com.   A   192.168.1.100
www A   192.168.1.111   

example2.com:
NS  ns1.example2.com.
ns1.example2.com.   A   192.168.1.100
www A   192.168.1.112

Digital Ocean 的本指南解释了如何使用 Apache2 配置代理:https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

进行一些清理后,我能够查明问题所在。我的一个虚拟主机使用的是 443,但其他的不是。但是,Wordpress 希望使用 https 进行管理员登录,这会重定向到使用 SSL 的主机。基本上,当涉及到您的服务器时,SSL 是一场孤注一掷的游戏。假设您只使用端口 80,则以下方法可行:

<VirtualHost *:80>
    ServerName example.com
      ...
</VirtualHost>

# Note: This assumes your Jira installation is running on port 80 
<VirtualHost *:80>
    ServerName jira.example.com
      ...
    ProxyPass         /  http://192.168.1.120
    ProxyPassReverse  /  http://192.168.1.120
</VirtualHost>

<VirtualHost *:80>
    ServerName example1.com
      ...
    ProxyPass         /  http://192.168.1.111
    ProxyPassReverse  /  http://192.168.1.111
</VirtualHost>

<VirtualHost *:80>
    ServerName example2.com
      ...
    ProxyPass         /  http://192.168.1.112
    ProxyPassReverse  /  http://192.168.1.112
</VirtualHost>