当前位置:首页 > 日记本 > 正文内容

CDN下 Nginx开启PC/M识别跳到对应的域名下访问,css/js死循环问题

zhangchap4年前 (2020-02-19)日记本758

背景:

新做了一个网站:

  服务器操作系统:Linux;
  WEB服务器版本:nginx/1.16.1;

问题:


通过Nginx识别PC/M识别跳到对应的域名下访问,开启阿里云的全站加速功能后,域名能跳转对应的,但是css/js间歇性、随机性死循环式重定向,经过排除服务器、网站程序,最终锁定问题,在此做个记录。


问题造成原因:


因为通过UserAgent头识别用户的客户端,然后返回不同的内容给不同的UA用户。但是CDN缓存并不会区分UA,只会区分URL,所以相同URL缓存的内容是一致的,无论UA是什么样。


解决方案:

CDN是支持对不同的UA,设置不同的缓存,这个是根据vary头来控制的。vary头里面的字段一般是头信息的字段,表示CDN会检测这个头信息。如果内容不一致就缓存不同的内容,命中时也一样,必须头信息一致才会缓存。这个vary头需要在源站添加。在Nginx配置中增加如下信息。
 
add_header Vary "Accept-Encoding, User-Agent"; 

实操步骤:

因为本人用的是宝塔面板,宝塔已经内置 ngx_headers_more 模块,所以直接修改Nginx的配置文件

在gzip_vary on;下添加:

add_header Vary "Accept-Encoding, User-Agent";

并把gzip_vary on;修改成:


gzip_vary off;
即可。



参考资料:

https://ziyuan.baidu.com/college/articleinfo?id=717

https://help.aliyun.com/knowledge_detail/86967.html



解决问题思路:

当初未开启cdn的时候,并未出现此问题,后台开启cdn填充内容时,出现问题,因修改网站+填充数据,并未想到是cdn的问题。

最初认为是 Nginx 识别pc/m跳转代码问题, 查遍全网基本上就那种形式的写法。

然后认为是网站程序不兼容此种方式,咨询了程序官方给出的意见是,2个域名设置2个网站去绑定,结果无果

然后才想到cdn的问题,host文件直接ip指向服务器ip,恢复正常,然后提交工单反馈问题,最终结合百度、Google搞定此问题。


分享给朋友:

相关文章

lxml win 安装方法

文档地址:https://lxml.de/installation.htmlwindows 下安装不了的都可以在这里找:https://www.lfd.uci.edu/~gohl...

python使用mongodb数据库

from pymongo import MongoClient,collection class KSpdier(Thread):   ...

python jieba分词

import jieba from jieba.analyse import tfidf words = jieba.lcut('...

python 发布文章 随机分类(choice)

from random import choice catid = choice([5,6]) #choice 函数从列表中随机提取...

python fake_useragent 模块用法

我们每次发送requests请求时通过random从中随机获取一个随机UserAgent,两行代码即可完成UserAgent的不停更换 from fake_useragent i...

python md5生成

from hashlib import md5 md5_hash = md5(title.encode('utf-8')).hexd...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。