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 之后的两个配置文件都贴上去的。。。