问题描述
问题描述
我有一个运行3种服务的项目:
- api
- db
- 反向代理(nginx)
我希望具有以下子域映射:
-
api.<some-site>
--->http://api:8080
-
doc.<some-site>
--->http://api:8080/redoc
-
db.<some-site>
--->http://couchdb:5984
其中 some-site 是 localhost 用于本地开发,而 my-site.com 用于生产。
我使用定义api/doc/db.<some-site>
的环境变量编写了一个nginx.conf文件(请参见下文)。不幸的是,它行不通:所有请求api/doc/db.<some-site>
都指向http://api:8080
。但是,当我将硬代码 api/doc/db.localhost/my-site.com
放入conf文件而不是使用env vars时,它确实起作用。
相对于将其硬编码到conf文件中,我更喜欢一种自动化的方法(例如,使用env vars)。任何建议将不胜感激。
代码
nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
env NGINX_PROXY_API;
env NGINX_PROXY_DOC;
env NGINX_PROXY_DB;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name ${NGINX_PROXY_API};
location / {
proxy_pass http://api:8080;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name ${NGINX_PROXY_DOC};
location / {
proxy_pass http://api:8080/redoc;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name ${NGINX_PROXY_DB};
location / {
proxy_pass http://couchdb:5984;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
docker-compose.yml
version: "3.4"
# This help to avoid routing conflict within virtual machines:
networks:
default:
ipam:
driver: default
config:
- subnet: 192.168.112.0/24
services:
proxy:
image: nginx:latest
depends_on:
- couchdb
- api
volumes:
- ./server/nginx/nginx.conf:/etc/nginx/nginx.conf
ports:
- "80:80"
env_file:
- .env
couchdb:
restart: unless-stopped
build:
context: .
dockerfile: compose/couchdb.Dockerfile
expose:
- 5984
ports:
- "59840:5984" # Avoid conflicts w/ host couchdb by not using host port 5984
env_file:
- .env
api:
restart: unless-stopped
build:
context: .
dockerfile: compose/api.Dockerfile
expose:
- 80
ports:
- "8080:8080"
env_file:
- .env
depends_on:
- couchdb
.env
...
NGINX_PROXY_API=api.localhost
NGINX_PROXY_DOC=doc.localhost
NGINX_PROXY_DB=db.localhost
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)