可以说,现在我在不同路径上的同一台服务器上运行了不同的应用程序:
- 10.200.200.210/app1
- 10.200.200.210/app2
- 10.200.200.210/app3
我想使用 nginx 作为代理在不同的 Docker 容器上运行每个应用程序。
我试过 jwilder/nginx-proxy如果我使用不同的域名(app1.domain.com、app2.domain.com 等),效果很好,但我无法使用域,我需要使用相同的 IP。
我也不能使用不同的端口,例如:
- 10.200.200.210:81/app1
- 10.200.200.210:82/app2
- 10.200.200.210:83/app3
所有都必须在端口 80 上工作。
- 有没有办法配置 jwilder/nginx-proxy 来做到这一点?
- 是否有另一个像 jwilder/nginx-proxy 这样的 Docker 镜像可以做到。
- 或者请您给我一些提示,让我自己构建一个 nginx docker 容器?
最佳答案
如果有人仍在寻找答案。 jwilder/nginx-proxy 允许您在代理范围或每个 VIRTUAL_HOST 基础上使用自定义 Nginx 配置。
以下是使用 Per-VIRTUAL_HOST 位置配置的方法。
- 在您的项目文件夹中创建另一个文件夹 - “vhost.d”。
- 在“vhost.d”文件夹中使用自定义 nginx 配置创建文件“whoami.local”。 此文件必须与 VIRTUAL_HOST 同名!
./vhost.d/whoami.local
location /app1 {
proxy_pass http://app1:8000;
}
location /app2 {
proxy_pass http://app2:8000;
}
- 创建 docker-compose.yml 文件。
./docker-compose.yml
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "8080:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- /path/to/vhost.d:/etc/nginx/vhost.d:ro
gateway:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
app1:
image: jwilder/whoami
app2:
image: jwilder/whoami
- 运行 docker-compose up
- 检查配置
在 bash 中运行:
$ curl -H "Host: whoami.local" localhost:8080
I'm 1ae273bce7a4
$ curl -H "Host: whoami.local" localhost:8080/app1
I'm 52b1a7b1992a
$ curl -H "Host: whoami.local" localhost:8080/app2
I'm 4adbd3f9e7a0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a659a4d4b0a jwilder/nginx-proxy "/app/docker-entrypo…" 54 seconds ago Up 53 seconds 0.0.0.0:8080->80/tcp nginxreverseproxy_nginx-proxy_1
4adbd3f9e7a0 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app2_1
52b1a7b1992a jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app1_1
1ae273bce7a4 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_gateway_1
您也可以将“whoami.local”域添加到/etc/hosts 文件并直接调用该域。
/etc/hosts
...
127.0.0.1 whoami.local
...
结果:
$ curl whoami.local:8080
I'm 52ed6da1e86c
$ curl whoami.local:8080/app1
I'm 4116f51020da
$ curl whoami.local:8080/app2
I'm c4db24012582
关于nginx - Docker Nginx 代理 : how to route traffic to different container using path and not hostname,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39514293/