如何配置Nginx location规则将同子域名不同URI请求转发到指定Docker容器
涉及的专业术语
你需要了解的Nginx相关核心术语和指令如下:
- 反向代理(Reverse Proxy):接收客户端请求后转发到后端上游服务,再把服务响应返回给客户端的机制,Nginx对应核心指令为
proxy_pass - 路径重写(Path Rewrite):修改客户端请求的URI路径后再转发给后端服务的操作,Nginx对应核心指令为
rewrite - location 匹配规则:Nginx根据请求URI匹配对应处理逻辑的规则,你场景里用到的
^~属于前缀匹配规则,优先级高于正则匹配
符合需求的Nginx配置示例
server { listen 80; server_name api.MyDomain.com; # 全局代理头配置,可复用,解决.NET Core服务IP识别、Swagger跳转异常问题 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; # 匹配API_A的所有请求 location ^~ /APIA/ { # 路径重写:去掉前缀/APIA 或者 /APIA/api,剩余路径和查询参数自动保留 rewrite ^/APIA(?:/api)?/(.*)$ /$1 break; # 转发到Docker Compose同网络下的API_A服务 proxy_pass http://API_A:80; } # 匹配API_B的所有请求 location ^~ /APIB/ { rewrite ^/APIB(?:/api)?/(.*)$ /$1 break; proxy_pass http://API_B:80; } # 匹配API_C的所有请求 location ^~ /APIC/ { rewrite ^/APIC(?:/api)?/(.*)$ /$1 break; proxy_pass http://API_C:80; } }
配置说明
- 上述配置完全兼容你给出的所有路径映射规则,无需额外修改即可直接使用
- 如果你仍在使用Nginx Proxy Manager,不需要替换全局配置,只需要在对应代理站点的「Advanced」选项卡中粘贴上述3个location块配置即可生效
- 确保Nginx容器和三个API服务在同一个Docker Compose自定义网络下,才能通过服务名直接解析访问后端服务
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

