CDN下 Nginx开启PC/M识别跳到对应的域名下访问,css/js死循环问题
背景:
新做了一个网站:
服务器操作系统:Linux;
WEB服务器版本:nginx/1.16.1;
问题:
通过Nginx识别PC/M识别跳到对应的域名下访问,开启阿里云的全站加速功能后,域名能跳转对应的,但是css/js间歇性、随机性死循环式重定向,经过排除服务器、网站程序,最终锁定问题,在此做个记录。
问题造成原因:
因为通过UserAgent头识别用户的客户端,然后返回不同的内容给不同的UA用户。但是CDN缓存并不会区分UA,只会区分URL,所以相同URL缓存的内容是一致的,无论UA是什么样。
解决方案:
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搞定此问题。