【发布时间】:2018-03-27 04:49:44
【问题描述】:
这就是我使用 nginx 配置反向代理的方式。有运行 nodeJS 应用程序的 docker 容器(app1,app2,...)
我通过 localhost:8080 指向 docker 容器 app1 nodeJS 应用程序,并通过 localhost:8081 指向 app2。
但我想在不使用端口的情况下通过子域调用应用程序,但我不知道如何获得它。我也认为我搞砸了端口...
app1.localhost 应该指向app1,app2.localhost 应该指向app2。
nginx.conf
http {
sendfile on;
upstream docker-app1 {
server app1:80;
}
upstream docker-app2 {
server app2:80;
}
server {
listen 8080;
server_name app1.localhost;
location / {
proxy_pass http://docker-app1;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
#proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
server {
listen 8081;
server_name app2.localhost;
location / {
proxy_pass http://docker-app2;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
#proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
}
docker-compose.yml
version: '3.3'
services:
nginx:
container_name: 'nginx'
image: 'nginx:1.13.5'
restart: 'always'
ports:
- '80:80'
- '8080:8080'
- '8081:8081'
- '443:443'
volumes:
- './nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro'
app1:
container_name: app1
build: ./app1
restart: always
ports:
- '3001:80'
app2:
container_name: app2
build: ./app1
restart: always
ports:
- '4200:80'
更新:由于 Sergiu 提供了一个很好的反向代理链接,我用新的配置更新了帖子;问题还是一样
【问题讨论】:
-
所以你想以app.local 的身份访问localhost:8081?
-
有什么东西阻止你使用 80 端口吗?
-
我不确定你是否可以这样做,但如果可以的话,你可以使用app.local:8081
-
您在 nginx 配置中缺少应用程序...我无法看到您在 nginx default.conf 中指向应用程序目录的任何地方
-
我不知道该怎么做。我只有运行应用程序的 docker-compose 文件。但是,它根本无法访问。你是对的,缺少 nginx 配置。这是我的问题,因为我没有正确理解。
标签: node.js docker nginx docker-compose