我不知道如何在一个 IP 地址上拥有多个服务器(执行不同的任务)。我希望子域指向不同的应用程序。让我举个例子来说明我试图做什么。我选择了一些服务作为这个例子。我还为这个项目使用了几个闲置的树莓派。
假设我有一个运行“mydomain.com”网站的 Web 服务器。但我还想运行一个具有相同 IP 地址但在“mc.mydomain.com”上不同的服务器上的 Minecraft 服务器。然后我想运行一个ownCloud位于“cloud.mydomain.com”的不同服务器上的服务器
对于这个项目,我使用树莓派并且我的域名在 Namecheap 注册。
答案1
我认为这是一个小型办公室/家庭设置。
没有办法将同一个 IP 分配给多个设备。因此,您要么必须将所有内容托管在同一台设备上,要么使用一种机制来帮助您将数据包分发到相应的服务器。我认为您需要在这里研究的是端口,NAT和反向代理。
如果您只有一个可用的 IP 地址,则必须
- 将公共 IP 配置到单个设备并在本地网络内分发请求
- 在同一硬件上托管所有服务(例如您的树莓派)。
端口转发的示例:
- 您配置
cloud.mydomain.com
指向您的 IP。在这里,您将在端口 443 (https) 上运行 Web 服务器。 - 您配置
mc.mydomain.com
指向您的 IP。在这里,您将在您选择的端口上运行您的 Minecraft 服务器,例如 25565。 - 您配置防火墙/路由器以转发其在公共 IP 上收到的所有内容。
- ...在端口 443 上连接到托管 ownCloud 实例的树莓派。
- ...在端口 25565 上连接到托管 Minecraft 服务器的树莓派。
- 这些可以是您本地网络上的不同设备。您只需设置端口转发或 NAT 规则。
使用代理的示例:
- 您希望运行仅具有单个 IP 的多个 Web 服务器。您不希望对不同的网站使用不同的端口。
- 您可以配置子域名以指向您的单个 IP。
- 您设置了端口转发/NAT 规则,将端口 443 上的任何传入流量转发到您的一台树莓派。
- 您在另外两台树莓派上设置了 Web 服务器,每台服务器将处理一个子域的流量。
- 在第一个树莓派上,你设置了一个反向代理,例如使用Nginx。您可以为子域名设置不同的配置:一个用于
sub1.mydomain.com
,一个用于sub2.mydomain.com
,并使用proxy_pass
指向本地网络内其他 Web 服务器的指令。 - 您的 Nginx-proxy 现在可以处理任何传入流量,并根据用户请求的子域将其分发到正确的 Web 服务器。
答案2
如果您使用 Apache Web 服务器,则可以使用虚拟主机来为 Web 应用程序执行此操作。虚拟主机使您能够从单个 Web 服务器托管多个网站。
答案3
使用反向代理可以实现这一点。
https://mywebsite1.com--> 您的公共 IP 地址 -->http://192.168.1.X
https://mywebsite2.com--> 您的公共 IP 地址 -->http://192.168.1.Y
反向代理监听端口:80,检测请求的来源,然后将请求发送到您分配给该来源的目标。
对于反向代理,我个人在 Raspberry Pi 上使用“Nginx 代理管理器”:https://nginxproxymanager.com