Nginx 301跳转踩坑总结

image.png

一般情况下,我们会在nginx.conf中配置absolute_redirect ,server_name_in_redirect和port_in_redirect,以便到达个性化的重定向功能。其中absolute_redirect控制Location url的生成方式。

  • absolute_redirect设置成on,则生成绝对路径作为Location url。

  • absolute_redirect设置成off,则生成相对路径作为Location url。

只有absolute_redirect设置为on时,另外两个配置才会生效。

  • server_name_in_redirect为on时,使用Nginx配置文件中的server_name作为Location url中的host,否则使用用户请求url中的主机名作为host;

  • port_in_redirect设置为on时,使用nginx监听的端口来构造Location url,否则不设置port。

因此,上述三个配置项共同控制了Location url的结果,例如: “Location: http://server_name:port/index/”。 这三项配置的默认值是absolute_redirect=on,server_name_in_redirect=off,port_in_redirect=on。因此默认的Location url将是 “www.test.com/index/”

回到最开始的问题,https访问跳转到http的原因便可以梳理清楚了,作为静态资源服务器的Nginx设置了301状态码,并且由于它监听的是80端口和使用http协议,假设浏览器访问 “www.test.com/index” ,那么默认构造的Location url便是 “www.test.com/index/” ,并且API网关会直接将该响应写回给浏览器。浏览器收到301状态码的响应后,解析出响应头的Location值,然后进行跳转。过程如下图所示:

1634889352(1).jpg

2.解决方案


最简便的解决方法便是,设置absolute_redirect为off,构造相对路径作为Location url,示例如下:

server {

listen 80;

设置相对url重定向

absolute_redirect off;

server_name localhost;

charset utf-8;

access_log logs/access.log main;

error_log logs/error.log;

large_client_header_buffers 4 16k;

client_max_body_size 300m;

client_body_buffer_size 128k;

location / {

index index.html;

root /var/www/index/;
}
}
复制代码
这样以后,对于 “www.test.com/index” 的请求,Location响应头的值将等于 /index/。

最后

金三银四到了,送上一个小福利!

image.png

image.png

专题+大厂.jpg

45308)]

[外链图片转存中…(img-4v3RkAY5-1714431645309)]

[外链图片转存中…(img-PKLqs5pP-1714431645309)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值