如何使用一个nginx docker容器为两个站点提供服务?
我有一个用npm webpack构建的webapp,生成一个文件夹,我把文件夹推到centos文件夹,然后启动一个nginx docker来服务它,它工作正常,一些文件如下: nginx.yml:如何使用一个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 /
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映像的一部分