Nginx配置重定向 301还是302?

先说结论:

如果是个人网站,或网站用途只是开发测试,改动的可能性比较大,建议使用302

如果是生产环境,或改动的可能性比较小,建议使用301

状态码含义

首先要明白两个状态码的含义:

301 Moved Permanently

302 Moved Temporarily

浏览器会缓存301的请求,不会缓存302

实际影响

以下面nginx配置为例:

1
2
3
4
5
6
server {
listen 80;
location / {
return 301 https://$host$request_uri;
}
}

上述配置,会把用http协议访问站点的请求,重定向为用https协议来访问

用Chrome浏览器作实验,假设在地址栏输入levy.ren, 则浏览器最终访问的是https://levy.ren

因为levy.ren是个人站点,可能不久后提供的内容有所变化,注释掉了上述重定向配置, 取消对http协议的重定向

1
2
3
4
5
6
server {
listen 80;
location / {
#return 301 https://$host$request_uri;
}
}

然后重启nginx

1
nginx -s reload

再次使用自己电脑上的Chrome访问,地址栏输入levy.ren, 发现浏览器仍然访问https://levy.ren

打开开发者工具,开启禁用缓存选项,再一次输入levy.ren, 还是使用https协议, 这就是因为浏览器对301状态码的响应,进行了缓存,给个人开发者带来了苦恼

清除301缓存

以Chrome为例:

  1. 关于谷歌
  2. 更多工具
  3. 清除浏览器数据
  4. 勾选 浏览器记录缓存的图片和文件

重新访问站点即可!

Fork me on GitHub