nginx基于路径统一匹配(/api/riot/ /api/steam/)

目的

要做的其实是 匹配 /api/riot/.../api/steam/... 这样的路径,然后统一转发。

location

Nginx 里可以用 正则 location 来写,推荐这样:

1
2
3
4
5
6
7
8
9
# 完整转发
location ~ ^/api/(riot|steam)/ {
proxy_pass http://backend;
}

# 截取URL
location ~ ^/api/(riot|steam)(/.*)?$ {
proxy_pass http://backend$2;
}

说明

  • ~ 表示使用正则匹配

  • ^/api/(riot|steam)(/.*)?$

    • /api/riot/api/steam 开头
    • (/.*)? 表示后面还可以跟路径(可选)
  • proxy_pass http://backend$2;

    • $2 代表 (/.*)? 里匹配到的内容,可以把后面的路径原样转发到后端

⚠️ 注意

  • 如果后端服务本身就是挂在 / 下,而你不想保留 /api/riot 这些前缀,就需要用 rewrite
1
2
3
4
location ~ ^/api/(riot|steam)(/.*)?$ {
rewrite ^/api/(riot|steam)(/.*)?$ $2 break;
proxy_pass http://backend;
}

这样 /api/riot/user/123http://backend/user/123