You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx请求转发异常:访问/test路径返回404问题排查

问题分析与解决方案

核心问题

  1. Location匹配规则不匹配:你配置的location /test/(带结尾斜杠)仅匹配以/test/开头的请求路径(如/test/xxx),但你访问的是/test(无结尾斜杠),此时Nginx会匹配到根location /,尝试在/usr/share/nginx/html目录下查找test文件/目录,找不到就返回404。
  2. Proxy_pass路径拼接逻辑问题:即使匹配到/test/,当前proxy_pass http://10.32.19.107:8080/success的配置会将请求路径拼接为http://10.32.19.107:8080/successtest/(因为proxy_pass结尾无斜杠,Nginx会把匹配的/test/追加到目标URL后),这显然不是你想要的。

修复方案

根据你的需求(访问/test时返回/success页面),可以采用以下两种配置方式:

方式一:精确匹配单个路径

如果仅需要匹配/test这个精确路径,修改location配置为:

location = /test {
    proxy_pass http://10.32.19.107:8080/success;
}
  • =表示精确匹配,只有当请求路径完全等于/test时才会触发该规则。
  • 此时Nginx会直接将请求代理到http://10.32.19.107:8080/success,路径拼接逻辑不会出错。

方式二:匹配/test及/test/开头的所有路径

如果需要同时支持/test和/test/xxx这类路径(后者也代理到/success或/success/xxx),可以配置:

location ^~ /test {
    proxy_pass http://10.32.19.107:8080/success/;
}
  • ^~表示优先匹配该规则,避免被其他正则location覆盖。
  • proxy_pass结尾添加斜杠后,Nginx会将/test之后的路径部分(如果有)追加到/success/后,比如/test/abc会代理到/success/abc。

验证步骤

  1. 修改default.conf中的对应location配置。
  2. 重新加载Nginx配置(无需重启容器,执行docker exec Nginx nginx -s reload即可)。
  3. 访问http://10.32.19.107/test验证是否正常返回目标页面。

额外提示

  • 避免重复挂载配置:你的Docker启动命令中同时挂载了conf.d目录和default.conf文件,这可能导致配置覆盖冲突,建议只挂载conf.d目录即可,无需单独挂载default.conf。
  • 查看Nginx日志:如果问题仍存在,可查看Nginx错误日志(/var/log/nginx/error.log),里面会详细记录请求匹配的规则和代理路径,帮助定位问题。

内容的提问来源于stack exchange,提问作者Dick Donington

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:52:39