如何使用一个nginx docker容器为两个站点提供服务?

如何使用一个nginx docker容器为两个站点提供服务?,docker,nginx,Docker,Nginx,我有一个用npm webpack构建的webapp,生成一个文件夹,我把文件夹推到centos文件夹,然后启动一个nginx docker来服务它,它工作正常,一些文件如下: nginx.yml: version: '2' services: nginx: image: nginx:1.14.0 volumes: - ./../www:/usr/share/nginx/html # ./../www is /

我有一个用npm webpack构建的webapp,生成一个文件夹,我把文件夹推到centos文件夹,然后启动一个nginx docker来服务它,它工作正常,一些文件如下: nginx.yml:

version: '2'
services:
    nginx:
        image: nginx:1.14.0
        volumes:
            - ./../www:/usr/share/nginx/html
            # ./../www is /home/example1/www
            - ./nginx/site.conf:/etc/nginx/conf.d/default.conf
            - ./ssl:/etc/nginx/ssl
        ports:
            - "443:443"
            - "80:80"
和site.conf:

server {
    listen 80 default;
    server_name example1.com www.example1.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443;
    index index.html;
    server_name localhost;
    error_log /var/log/nginx/error.log;

    ssl related ...

    location / {
        root /usr/share/nginx/html;
    }
    location /api {
        proxy_pass http://www.example1.com:8080/api;
    }
}
现在我想为另一个站点(例如example2.com)提供服务,所以我用npm webpack生成另一个文件夹,将其推送到/home/example2/www,因为这次nginx将为两个站点提供服务,我删除了它

- ./../www:/usr/share/nginx/html
来自nginx.yml 并将一个端口为8081的服务器部分添加到site.conf,然后添加

root /home/example1/www;
root /home/example2/www;
在site.conf的每个服务器部分中。但这两个网站都不起作用,我在互联网上搜索过,大多数帖子建议设置一个nginx代理,并在其他docker容器上托管每个webapp

一个nginx docker容器是否可以服务于两个站点?
如何处理?

nginx映像包含位于/etc/nginx/conf.d中的所有*.conf文件。尝试运行此命令以验证:
docker run--rm-it nginx cat/etc/nginx/nginx.conf

这意味着您应该能够在那里放置您想要的任意多个conf文件,nginx将为其提供服务

这意味着您可以将站点文件和conf文件卷化,如下所示:

services:
    nginx:
        image: nginx:1.14.0
        volumes:
            - ./../www:/usr/share/nginx/html
            - ./../example1:/home/example1/www
            - ./nginx/site.conf:/etc/nginx/conf.d/default.conf
            - ./nginx/site2.conf:/etc/nginx/conf.d/site2.conf
在site2.conf中:

server_name example2.com www.example2.com;

location / {
    root /home/example1/www;
}

Ngnix内置了反向代理支持,因此答案是肯定的。但Docker的一个巨大优势是它的微服务方法。多亏了服务器数量的限制,解决方案越简单越好。你能告诉我为什么上面的配置不起作用吗?你是不是想用一个域创建两个网站,但要使用前缀,比如
/api
两个网站:example1.com和example2.com,都在同一主机上访问web api应用程序(另一个spring boot docker),我怀疑是否删除。/../www:/usr/share/nginx/html导致问题。找到解决方案,在容器中创建两个文件夹,并将容器保存到一个新图像,在nginx.yml创建两个卷。明天将发布答案。是的,除了,需要基于正在运行的容器创建新图像,因为原始图像不包括/home/example1/www,它将在下次重新启动后消失。我不知道这是什么意思。你是说example1源文件与example2不在同一位置?是的,example1和example2是不同的应用程序,就像不同的DockerFile?为什么你说示例1/www将“在下次重新启动后消失”?我不明白你在说什么。我的意思是/home/example1/www不是nginx映像的一部分