Nginx请求路由异常:/verify带JWT参数访问返回404问题排查
Nginx /verify路径404问题排查与修复
核心问题原因
- Nginx的
location规则仅匹配请求的URI路径部分,不会包含?后的Query参数,你把?token=xxx写进location匹配规则里,永远无法命中。 - 你使用的
^~是前缀匹配修饰符,不会解析你后面写的正则表达式,即使你把Query参数去掉,写的正则规则也不会生效。
修复方案
将你原有错误的/verify相关location配置替换为如下内容:
location ^~ /verify/ { # 校验token参数是否为JWT格式 if ($arg_token ~* "^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$") { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8000; break; } # 不符合JWT格式的请求可按业务需求自定义处理,示例为返回400错误 return 400; }
配置说明
^~ /verify/优先匹配所有以/verify/开头的路径,优先级高于后面的正则location$arg_token是Nginx内置变量,直接获取Query参数中token的值- 正则校验通过后才会转发到8000端口的后端服务,同时补上了必要的代理请求头,避免后端获取不到客户端真实信息
内容的提问来源于stack exchange,提问作者CosmicOppai
相关产品推荐
相关产品推荐

