我目前有许多运行 docker 容器的小型虚拟机。这些虚拟机很小,因为它们数量太多,因此经常会锁定,通常是在调用 S3 命令行工具时,但今天在尝试使用 wget 下载 DEB 文件时。
我这样做的原因是,docker 在当时似乎是个好主意,而且每个小服务都有不同的主机名,但我想使用标准端口(80/443),这样用户就不必记住自定义 URL,只需记住主机名。
我受够了这些虚拟机的所有问题。我想转移到一个运行多个 docker 容器的单个强大服务器。但是由于每个容器都使用端口 80 和端口 443,因此会发生端口冲突。
我不想使用重定向,因为https://ldap.intranet.local被重定向到https://ldap.intranet.local:3000因为这将修改用户在浏览器中看到的 URL,而我希望它是 100% 透明的。
我当前的解决方案(我也愿意向其他解决方案开放)是使用 Apache 通过主机名识别请求的功能,将请求转发到不同的端口。
即如果请求进入https://ldap.intranet.local,Apache 会将其转发到https://127.0.0.1:3000,并且 LDAP docker 容器将运行,以便外部端口 3000 映射到内部端口 443。然后 docker 容器内的 web 服务器将获取并处理它。
类似地,当请求进入https://jenkins.intranet.local,Apache 会将其转发到https://127.0.0.1:4000,并且 Jenkins docker 容器将运行,以便外部端口 4000 映射到内部端口 443。然后 docker 容器内的 Web 服务器将获取并处理它。
等等等等。
这可能吗?如果可以,我该如何配置 Apache 来实现这一点?如果不行,我还能如何解决我的问题?
在此先非常感谢您的帮助。
答案1
正如@Gerald 所说,您正在寻找反向代理。
你可以看看本教程使用 Docker 设置 Web 服务器场。
您还可以使用运行 Ubuntu Server 的简单 Docker 容器并安装 nginx 作为反向代理(这就是我所做的)。