两个 DNS 对应同一个 IP

两个 DNS 对应同一个 IP

我有一个 Web 服务器,该服务器在端口 80 上有一个 tomcat6 服务器,可以从 domain1.com 访问。我想使用 sinatra (ruby) 服务器在同一台机器上打开另一个网站,并能够从 domain2.com 访问它。

我应该怎么做才能实现这一目标?我想首先将 tomcat6 从 80 移动到另一个端口,然后在 80 上放置一些本地内容,通过使用请求来自哪个域来隧道连接到不同的 Web 服务器。

但我真的不知道该怎么做...

提前致谢

答案1

是的,使用 apache 的 mod_proxy 很容易做到这一点。正如您所建议的,我将 tomcat 移至端口 8080 或类似端口,然后让 apache 监听 80。同样,假设您将 sinatra 设置为监听端口 8888。然后在 apache 中,您可以执行以下操作:

<Virtualhost *:80>
    ServerName domain1.com

    # Proxy through to tomcat, listening on port 8080
    <Location />
                ProxyPass http://localhost:8080/
                ProxyPassReverse http://localhost:8080/

                Order allow,deny
                Allow from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.com

    # Proxy through to sintra, listening on port 8888
    <Location />
                ProxyPass http://localhost:8888/
                ProxyPassReverse http://localhost:8888/

                Order allow,deny
                Allow from all
    </Location>
</VirtualHost>

(确保 mod_proxy 已安装并启用)

完成后,您应该能够在浏览器中输入 domain1.com(假设您已经有指向您服务器的 DNS 记录),并且 apache 将通过代理到在 8080 上监听的 tomcat。同样,domain2.com 将通过代理到 sinatra。

我确信这可以通过 nginx、haproxy 或其他东西轻松完成。不过,我没有使用过这些,所以如果你想朝这个方向发展,你必须另寻他处。

答案2

您还可以使用iptables它来获得类似于使用 mod_proxy 的结果(正如 ErikA 向您展示的那样)。基本上,您根据源 IP 将数据包重定向到不同的端口,例如:

sudo iptables -t nat -A PREROUTING -p tcp -s domain1.com --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A PREROUTING -p tcp -s domain2.com --dport 80 -j REDIRECT --to-ports 8081

这里 tomcat 监听 8080 端口,sinatra 监听 8081 端口。

(你可能需要使用 Shorewall 或其他防火墙管理工具,而不是iptables直接操作)

答案3

通常只有一个进程可以拥有一个端口,因此您需要某种形式的 HTTP 代理来实际监听端口 80,该代理可以根据主机名(或任何其他条件,如 URL 路径)智能地将请求转发到 Tomcat 或 sinatra。虽然 Apache mod_proxy 可以做到这一点,但它有一些限制,而且 Apache 可能很重。我建议使用专门构建的代理,如 nginx 或 lighthttpd。如果您需要的话,它们占用的内存要小得多,并且在高负载下速度更快。

答案4

您正在寻找的是“虚拟主机”。谷歌一下,您会找到很多 HOWTO。

相关内容