我家里有一个 VPN 网络,我用它来做多种事情。
我在那里运行 OpenVPN 服务器,同时还运行多个 http 服务器(如 Jenkins、WebLogic 等)和一个解析ropi.io
VPN 服务器的 DNS 服务器。
假设 Jenkins 在哪个端口上运行(8081),我可以通过 访问它ropi.io:8081
,也就是调用,但我想访问该服务器jenkins.ropi.io
。现在,我知道这不能用纯 DNS 来解决,而且无论我读到什么关于反向代理的内容,似乎解决方案都不在那个方向上。
我认为解决这个问题的最佳方法是为我运行的所有服务器注册一个单独的 IP 地址,并为每个服务器创建一个 DNS 条目。这听起来是个不错的解决方案,但我不知道该怎么做。
我的想法有意义吗?我该怎么做才能让它成为现实?如果它没有意义,那么我应该在哪里寻找解决方案?
UI:我尝试为其创建子域的服务器在单独的 Docker 容器上运行。我认为这可能是一个有用的信息。
答案1
如果端口 80 可用,您可以使用一个 IP 地址执行此操作:
- 添加通配符 DNS 以指向您的服务器的 IP。
- 放一个URL 重定向器在端口 80 上。
- 对于您托管的每个应用程序,添加一个重定向
foo.ropi.io
到ropi.io:8000
现在,您可以在浏览器中输入一个您能记住的 URL,并且您仍然可以到达您想去的地方。
答案2
我设法解决了这个问题。
我设置了 DNS 服务器来解析我想要的所有子域名上的相同 IP。然后我在 docker 中使用 Nginx,根据浏览器中输入的 URL 地址将请求重定向到正确的端口。
基于 Docker 的 Nginx 是一个很好的解决方案,因为将它连接到我的其他容器的网络后,我现在可以根据这些容器的名称来解析它们的 IP,这真的很方便。此外,这个解决方案还允许我在所有的 Docker 容器上使用统一端口,比如 8080,甚至 80,但这些端口号已经是给定的,所以我没有弄乱它们,因为无论如何,我的子域都会屏蔽端口号。
谢谢你给我指明了方向,我真的很感激你的帮助