技术解析

nginx 取消 https 后发现 chrome 访问提示重定向过多无法访问。
0
2021-05-21 02:32:12
idczone
取消了https rewrite 到了http,但是发现 chrome 访问提示重定向过多无法访问。
自己可以清楚 cookie 解决,但是用户怎么办啊。
或者是我哪里设置有问题?
比如说,如何告诉浏览器我修改了ngi美国服务器nx的配置文件?
这就是你配置有问题。
还有,有任何问题贴配置是常识了,大量答案都提到了。

换个浏览器正常么?

你这是设置了从 HTTPS 跳转到 HTTP 了吧?
目测浏览器缓存了 HTTP 到 HTTPS 的跳转( 301 跳转会缓存),然后你再设置从 HTTPS 跳到 HTTP ,不断循环

是这样的,如果清除 cookie ,缓存消失就正常了。但是如何无痛换到 http 呢?用户不会清楚 cookie 。
清除 cookie 后正常
最讨厌的就是『大量答案都提到了』,然后还不给解决办法的回答。

https 里面不要直接跳 /,改为跳 http://www.example.com/?from_https 这样
后面加个尾巴

见 http://stackoverflow.com/questions/9130422/how-long-do-browsers-cache-http-301s

最讨厌的就是『大量答案都提到了』
配置都不贴,都靠猜着给你回答?

是的, 301 跳转缓存时间很长。
一般来说,我在 301 时都会提供 no-cache 的头。
我习惯加时间戳 :v

题外话,话说我自己的域名已经设置了 HSTS ,而且已经内置在了 Chrome 的静态 HSTS 名单里,永远不可能改回 HTTP 了。

对于一键不确定的事情,请用 302 。
我有可能域名会过期,不给后来人添麻烦就没加 HSTS :a

小心人家说你小气,说你不想回答就别回答。:doge:

1L 的意思 『大量答案都提到了』问问题要贴配置

感觉 说的方法不错,你说“我习惯加时间戳”,具体是怎样加的?提示跳转过多时浏览器地址栏上是什么?

?时间戳
或者?版本号都行 :D

连配置都不贴,还怪别人说不?

那你提示跳转过多时浏览器地址栏上是什么?(可以把域名隐掉)

不好意思…稍等。




贴了

curl 看一下

curl 结果是:

301 Moved Permanently

301 Moved Permanently



nginx/1.4.6 (Ubuntu)




请 CURL -I http://www.domain.com/

return 301 http://www.domain.com/?14******(时间戳)

顺便向各位道个歉:我说配置有问题可能太果断,但以后可以在跳转的域名中加入以下指令:
add_header Cache-Control no-cache

http 的话直接显示网页内容了, https 的话和上面的那个一样。。。

我指这类数据
curl -I http://www.v2ex.com
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.11.6
Date: Wed, 14 Dec 2016 14:54:04 GMT
Content-Type: text/html
Content-Length: 161
Connection: keep-alive
Location: https://www.v2ex.com/
X-ORCA-Accelerator: from 093.chn.fuo01.cn.krill.c3edge.net


纯小白,刚才写成 curl -l 了,应该是 curl -I.
http
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 14 Dec 2016 14:46:53 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 7996
Connection: keep-alive
Cache-Control: no-cache
https
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 14 Dec 2016 14:48:01 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://www.domain.com/
重新设置为 302 了,目前依旧无法正常访问。
方法没用,加了,加在 proxy_set_header X-Real-IP $remote_addr;下面了,还不行。。。
目前设置:
server {
listen 80;
server_name domain.com www.domain.com;
if ($host != 'www.domain.com')
{
rewrite ^/(.*)$ http://www.domain.com/$1 redirect;
}
proxy_cache_valid 301 1m;
location / {
proxy_pass http://127.0.0.1:8000/;
limit_req zone=one burst=20 nodelay;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
add_header Cache-Control no-cache;
}
location /static {
alias /var/www/domain/static;
}
}
server {
listen 443 ssl;
server_name domain.com www.domain.com;
proxy_cache_valid 301 1m;
rewrite ^/(.*)$ http://www.domain.com/$1 redirect;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
}

我觉得你说的最靠谱,主要是 chrome 缓存了 301 的问题,但是怎么清楚客户端 chrome 的 301 缓存呢?

这篇帖子有回答 https://www.v2ex.com/t/314217

我觉得没什么办法。
因为 https 到 http 缓存了, http 到 https 又缓存了。
给你的配置是避免以后出问题的。。

问题和我一样,很多人都答非所为,目测没有题主解决。

hsts 设置了 Strict-Transport-Security: max-age 吧

我觉得这样还是没法解决 https 跳转到 http

我建议通知客户手动清除,下次加 no-cache 。。

非非非常感谢!!!
纯小白什么也不懂,我是按照 digitalocean 上给的教程配置的
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04
然后这个教程设置了 Strict-Transport-Security: max-age ,所以导致了上述的情况, http 直接无法访问,全部都跳转到 https 了,取消设置之后 http 和 https 都可以访问了。 digitalocean 设置的是 15768000 , 182.5 天。。。好吧,只能等用户自己清除了,我这边先把 https 加上去好了,等到半年后再把 https 撤下来,估计差不多。。

chrome 客户端缓存可能是无法解决了,但是终于知道原因了。

chrome://net-internals//>这里可以清理,只要没有加入列表。
我以为你是普通的 301 。。没想到你开了 HSTS

的确应该把配置 https 和取消 https 之后的两个配置文件都贴上去的。。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服