Nginx同域重定向配置:实现example.net跳转至/test/page
根域名访问自动跳转同域指定路径的实现方案
此前配置未生效的常见原因
- 修改
proxy_pass为http://localhost:8090/test/page:Nginx反向代理的路径拼接规则下,带URI的proxy_pass会把匹配location后的剩余路径拼接到指定URI后,不仅会把根路径请求代理到目标路径,还会把所有业务路径的请求都错误拼上/test/page前缀,触发Tomcat路由404,表现和配置未生效一致。 - 编写
return/rewrite规则不生效:大多是没做精准路径匹配,规则被其他location块覆盖,或是改完配置没执行重载,或是301重定向被浏览器缓存,误以为规则没有生效。
正确配置实现
需求为:仅当用户直接访问根域名(即请求路径为/)时,自动跳转到同域下/test/page路径,其余原有业务路径的代理逻辑不受影响。
在现有server块中新增精准匹配根路径的location块即可,完整配置参考:
server { listen 443 ssl; server_name example.net; access_log /var/log/nginx/example.net.ssl.access.log; error_log /var/log/nginx/example.net.ssl.error.log; ssl_certificate /etc/letsencrypt/live/example.net/cert.pem; ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem; # 精准匹配根路径,仅触发根域名访问的重定向 location = / { # 302为临时重定向,需永久生效可替换为301 return 302 /test/page; } location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8090; } }
配置生效操作
- 先校验Nginx配置语法是否正确,执行命令:
nginx -t
看到测试成功类的输出即说明语法无错。 - 重载Nginx让配置生效:
nginx -s reload - 验证效果:
- 直接访问
example.net,会自动跳转至example.net/test/page - 访问其他原有业务路径,仍会正常走原有反向代理逻辑,不会被重定向。
- 直接访问
注意事项
- 不建议用正则rewrite做全局路径跳转,容易误伤正常业务请求
- 不建议通过修改
proxy_pass路径的方式实现跳转,会破坏原有反向代理的路径拼接规则,引发接口404 - 如果之前测试过重定向规则,记得清除浏览器缓存再验证,避免浏览器缓存旧的重定向结果干扰判断
内容的提问来源于stack exchange,提问作者baked_cookies
相关产品推荐
相关产品推荐

