我对如何在同一主机上管理具有多个独立webapp的反向代理(nginx)感到困惑。我知道我可以使用https://github.com/jwilder/nginx-proxy并为每个应用程序配置VIRTUAL_HOST,但是我不能在每个应用程序docker-compose.yml中将nginx作为服务显示。
我想这样做,因为我想清楚地定义在生产中运行应用程序所需的所有服务,并在开发过程中轻松复制它。
换句话说:我有两个需要在同一主机上运行的webapps,我想在两个应用程序中将nginx定义为docker-compose.yml中的服务依赖项,但是只用一个nginx就可以共享该服务前进港80。
答案 0 :(得分:5)
<强> Dockerfile:强>
FROM ubuntu:14.04
MAINTAINER Test (test@example.com)
# install nginx
RUN apt-get update -y
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:nginx/stable
RUN apt-get update -y
RUN apt-get install -y nginx
# deamon mode off
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
# volume
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/var/log/nginx"]
# expose ports
EXPOSE 80 443
# add nginx conf
ADD nginx.conf /etc/nginx/conf.d/default.conf
WORKDIR /etc/nginx
CMD ["nginx"]
<强> nginx.conf:强>
server {
listen 80;
server_name test1.com www.test1.com;
location / {
proxy_pass http://web1:81/;
}
}
server {
listen 80;
server_name test2.com www.test2.com;
location / {
proxy_pass http://web1:82/;
}
}
** web1 和 web2 - 容器名称
<强>搬运工-compose.yml:强>
version: "2"
services:
web1:
image: your_image
container_name: web1
ports:
- 81:80
web2:
image: your_image
container_name: web2
ports:
- 82:80
nginx:
build: .
container_name: nginx
ports:
- 80:80
- 443:443
links:
- web1
- web2
如何运行
docker-compose up -d
当您致电test1.com时 - nginx会将您的请求转发给容器web1:81, 当test2.com - 到容器web2:82
P.S。:您的问题是关于NGINX-reverse-proxy。但使用TRAEFIK https://traefik.io
可以更好,更轻松地做到这一点答案 1 :(得分:3)
您还应该能够在同一容器中打开两个端口
services:
web:
image: your_image
container_name: web
ports:
- 8080:80
- 8081:81
然后在启用了nginx站点(或conf.d)的第二个应用程序中添加新的配置文件,该文件将侦听81端口。
第一个应用
server {
listen 80;
server_name localhost;
root /app/first;
}
第二个应用
server {
listen 81;
server_name localhost;
root /app/second;
}
因此: