由于资源限制,我需要在一台 VPS 上搭建多个基于 docker 的 web 服务,每个网站都需要使用 80 和 443 端口上网,但显然 80 和 443 只有一个,我需要用不同的域名来表示不同的网站。
我最初的想法是运行一个 Nginx 或 Apache2 服务,将每个网站的 80/443 端口映射到后端的实际 docker 端口。例如,a.example.org 的 443 请求转发到容器 A 的端口 1234,b.example.org 的 443 请求转发到容器 B 的端口 2345。
我的问题是:
(1)对于我的要求来说,Nginx 和 Apache2 哪个更简单?(例如,我知道 DigitalOcean 为 Nginx 提供了非常好的配置构建器服务,因此我可能更愿意部署 Nginx)
(2)对于容器A和容器B,以及将来的容器CDEF等,我是否可以给它们分别分配不同的xxxx:443端口映射,然后将这些不同的端口提供给Nginx/Apache2,以便它们能够根据其域名处理不同的访问请求?
答案1
我更喜欢 Nignx,因为它比 Apache 更简单。请使用proxy_pass
它将传入请求代理到容器并按域将它们分开。
您可以将 nginx 部署为容器,这是 nginx 的一个简单配置:
server {
listen 80;
server_name domain-1.com;
location / {
# Name and Port of Container
proxy_pass http://container_A:1234;
}
}
server {
listen 80;
server_name domain-2.com;
location / {
# Name and Port of Container
proxy_pass http://container_B:2345;
}
}
server {
listen 80;
server_name sub.domain-2.com;
location / {
# Name and Port of Container
proxy_pass http://container_C:3456;
}
}
注意,nginx 必须可以访问其他容器的网络或者与它处于同一个 docker-network 中。
您还可以将 nginx 部署为 Linux 服务,但您可以更改container_A
为localhost
或任何ip:port
您监听每个容器的内容。
答案2
虚拟分钟
除了这里的其他好答案之外。免费且自由的源代码(开源)Virtualmin 允许您在同一台服务器上轻松运行无限数量的 Docker。
使用 Apache 或 Nginx。假设服务器具有适当数量的资源。
归因和详细信息请参阅 Virtualmin 员工 Joe 的这篇文章https://forum.virtualmin.com/t/docker-on-virtualmin/111137/3