我有一台具有 1 个 IP 的 VPS。如果我运行两个套接字服务器,一个在端口 8080 上,另一个在端口 8081 上,有没有办法将 service1.mydomain.com 映射到端口 8080 上的套接字服务器,将 service2.mydomain.com 映射到端口 8081 上的套接字服务器?
我没有运行 Web 服务器,而是在端口 8080 上运行 WebSocket 服务器,并在 8081 上运行套接字服务器。
我以前见过有人问过这个问题,但似乎总是与 Apache 有关,我可以在其中编辑 VirtialHosts 文件。由于我没有使用 Apache,所以我无法做到这一点。
可以这样做吗?还是我必须继续使用 mydomain.com:8080 和 mydomain.com:8081?
该服务器正在运行 Debian 8。
谢谢
答案1
您不能直接使用 DNS 名称来映射特定端口,在这种情况下,多个 DNS 名称对应一个 IP。
最好的选择是设置Apache
或NGinx
作为反向代理来根据“主机头”(或服务器名称)映射服务端口。
以下是一个示例Apache
:
<VirtualHost *:80>
ServerName service1.mydomain.com
ProxyPreserveHost On
ProxyPass / http://service1.mydomain.com:8080/
ProxyPassReverse / http://service1.mydomain.com:8080/
</VirtualHost>
<VirtualHost *:80>
ServerName service2.mydomain.com
ProxyPreserveHost On
ProxyPass / http://service2.mydomain.com:8081/
ProxyPassReverse / http://service2.mydomain.com:8081/
</VirtualHost>
因此,您需要在 Websocket 服务器前设置一个反向代理。
你会得到 :
http://service1.mydomain.com
地图和服务http://service1.mydomain.com:8080
和
http://service2.mydomain.com
地图和服务http://service2.mydomain.com:8081
对于最终用户来说是透明的。
答案2
您无法使用 DNS 将服务映射到端口。如果您向 Internet 开放 8080 和 8081,则可以使用任一域访问任一端口。但是,如果您发布的 URL 包含端口号,则流量将被适当路由。
如果我假设这些是 Web 服务,那么通常的做法是在服务前面放置一个代理(可以是 Apache)。用户将请求 service1.example.com 或 service2.example.com,代理将连接到相应的服务。(我使用 example.com,因为这是为示例分配的域之一。)