Docker环境下Nginx代理/api路径返回404,配置哪里出错了?
问题原因
你当前的Nginx配置核心问题是location /api块的proxy_pass规则导致请求路径转发错误:
当proxy_pass的目标地址末尾不带斜杠时,Nginx会将匹配到的location路径前缀原样传递给上游服务。比如你请求localhost:81/api/getUser,实际转发到sitr-api服务的路径是/api/getUser,而你直接访问localhost:9901/getUser就能正常返回,说明你的.NET后端接口没有配置/api开头的全局路由前缀,自然找不到对应路径返回404。
解决方案
方案1(推荐,无需修改后端代码)
修改Nginx配置中/api块的proxy_pass,末尾添加斜杠:
location /api { # 末尾加/,Nginx会自动去掉/api前缀再转发 proxy_pass http://sitr-api:80/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
修改后重启sitr-nginx容器即可生效,此时请求localhost:81/api/getUser会被转发为sitr-api:80/getUser,和你直接访问9901端口的路径一致。
方案2(适配后端统一前缀场景)
如果你后端计划所有接口都统一带/api前缀,可以在.NET程序中配置全局路由前缀,无需修改Nginx配置即可正常匹配。
内容的提问来源于stack exchange,提问作者George Wurthmann
相关产品推荐
相关产品推荐

