nginx配置实现访问静态fallback

需求

  • 开启监听端口 16827

  • 请求:

    • 匹配 /api/v1/base/api/v1/role/api/v1/menu/api/v1/api/api/v1/dept → 转发到 gpe-test:16826
    • 其他接口请求 → 转发到 gpe-test:16823
    • 根路径 / 用于返回静态资源(如前端页面等),从本地目录 ./static/ 或指定路径中提供

conf.d/default.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
listen 16827;
server_name localhost;

# 静态资源目录
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ @fallback; # 尝试访问找不到转发到fallback
}

# 匹配指定 API 前缀的接口 → gpe-test:16826
location ~ ^/api/v1/(base|role|menu|api|dept) {
proxy_pass http://gpe-test:16826;
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-Proto $scheme;
}

# 其余接口请求 → gpe-test:16823
location @fallback {
proxy_pass http://gpe-test:16823;
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-Proto $scheme;
}
}

静态资源说明

  • 假设静态资源部署在容器内 /usr/share/nginx/html(默认静态目录)
  • try_files $uri $uri/ @fallback;:如果访问的静态资源不存在,就 fallback 到后端服务(SPA 路由友好)

Docker静态目录挂载

1
2
3
volumes:
- ./dist:/usr/share/nginx/html # 本地构建好的前端资源挂载进容器
- ./default.conf:/etc/nginx/conf.d/default.conf