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

背景:

新做了一个网站:

  服务器操作系统: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搞定此问题。


发表评论 / Comment

用心评论~