Nginx重定向循环陷阱:当location匹配遇上proxy_pass结尾斜杠
昨晚给客户站点配置反向代理时遇到个诡异问题:访问代理目录无限重定向,浏览器直接报ERR_TOO_MANY_REDIRECTS。排查两小时发现是nginx的location匹配规则和proxy_pass斜杠的联合作妖,这里记录下干货。
错误配置长这样:
location /api/ {
proxy_pass http://backend/;
}
看起来没问题对吧?实际请求/api/users会变成http://backend//users(注意双斜杠),后端返回302时Location头又带上前缀,最终死循环。正确姿势应该是:
location /api/ {
proxy_pass http://backend; # 关键去掉结尾斜杠
}
更坑的是如果用变量形式传proxy_pass(比如set $backend "http://service:8080/"),即便变量值带斜杠也会出问题。建议用变量时都在location里拼接uri:
location ~ ^/service/(.*)$ {
set $backend "http://service:8080";
proxy_pass $backend/$1$is_args$args;
}
血的教训:nginx的斜杠处理比想象中敏感,特别是做动静分离或微服务代理时。现在我的检查清单里又多了一条——所有proxy_pass配置必须用curl -v测试三次!
最新打赏


QQ官方交流群