自动化Nginx子域路由

问题描述

问题描述

我有一个运行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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...