use*_*695 4 nginx node.js docker docker-compose
这就是我使用 nginx 配置反向代理的方式。有运行 nodeJS 应用程序的 docker 容器(app1,app2,...)
有了这个,我指向localhost:8080docker容器app1 nodeJS应用程序和localhost:8081app2。
但是我想在不使用端口的情况下通过子域调用应用程序,我不知道如何获得它。我也认为我搞砸了端口...
app1.localhost应该指向app1并且app2.localhost应该指向app2。
配置文件
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
更新:由于 Sergiu 为反向代理提供了一个很好的链接,我使用新配置更新了帖子;问题还是一样
而不是自定义 nginx,使用jwilder/nginx-proxy应该就足够了:
version: '3.3'
services:
nginx:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
app1:
container_name: app1
build: ./app1
restart: always
environment:
VIRTUAL_HOST: app1.localhost
ports:
- 80
app2:
container_name: app2
build: ./app1
restart: always
environment:
VIRTUAL_HOST: app2.localhost
ports:
- 80
Run Code Online (Sandbox Code Playgroud)
然后把它放在/etc/host你的机器上:
127.0.0.1 app1.localhost
127.0.0.1 app2.localhost
Run Code Online (Sandbox Code Playgroud)
使用如下:
curl -i app1.localhost
Run Code Online (Sandbox Code Playgroud)
jwilder/nginx-proxy将神奇地VIRTUAL_HOST从每个容器中读取环境变量(通过 docket API),然后相应地设置其配置文件。
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |