如果一台主机上有多个站点,如何使用Nginx为Docker容器提供服务?

如果一台主机上有多个站点,如何使用Nginx为Docker容器提供服务?,nginx,docker,Nginx,Docker,我在一台服务器上有三个web应用程序:两个nodejs应用程序和一个php。现在我不使用容器,因此流程如下: 一个Nginx正在运行。它通过主机名选择后端和静态文件目录。例如,如果我进入mysite.comit代理请求localhost:3000,并使用/sites/mysite/static中的静态文件。如果我转到sistersite.comnginx代理请求到PHP,并使用来自/sites/sistersite.com的静态文件等等 现在我想隔离应用程序并尝试Docker。我应该将Nginx

我在一台服务器上有三个web应用程序:两个nodejs应用程序和一个php。现在我不使用容器,因此流程如下:

一个Nginx正在运行。它通过主机名选择后端和静态文件目录。例如,如果我进入
mysite.com
it代理请求
localhost:3000
,并使用
/sites/mysite/static
中的静态文件。如果我转到
sistersite.com
nginx代理请求到PHP,并使用来自
/sites/sistersite.com
的静态文件等等


现在我想隔离应用程序并尝试Docker。我应该将Nginx包含到每个容器中并将主机解析到容器中,还是应该只包含应用程序并使用安装到主机上的通用Nginx?如果是第二种情况,如何返回静态文件?通过添加
root/path/to/static/in/container
?站点还支持http和https,因此它们使用不同的证书。

您描述的两种方法都可以。制作一个Nginx+节点容器和一个Nginx+PHP容器,其中每个容器都是完全自给自足的站点,这是最干净的隔离形式。很容易看出如何添加其他站点,或将PHP站点更改为Rails站点(或其他戏剧性的重写),而不影响容器外部的任何内容。但是,您需要第三个(Nginx?)服务来从主机路由到容器,因此您向网络添加了一个额外的跃点

或者,您可以将每个站点放入自己的容器中,并为您的Nginx(单个实例)使用第三个容器。您可以在Nginx容器上使用从两个站点容器装载静态数据