极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 如何避免 CDN 为 PC 端缓存移动端页面

Issue

欢迎在 Issue 中交流与讨论: Issue 330 (opens new window)

如果 PC 端和移动端是一套代码则不会出现这个问题。这个问题出现在 PC 端和移动端是两套代码,却共用一个域名。

使用 nginx 配置如下,根据 UA 判断是否移动端,而走不同的逻辑 (判断UA是否移动端容易出问题)

location / {
    // 默认 PC 端
    root /usr/local/website/web;
    
    # 判断 UA,访问移动端
    if ( $http_user_agent ~* "(Android|webOS|iPhone|iPad|BlackBerry)" ){ 
        root /usr/local/website/mobile;
    }
 
    index index.html index.htm;
}

解决方案通常使用 Vary 响应头,来控制 CDN 对不同请求头的缓存。

此处可以使用 Vary: User-Agent ,代表如果 User-Agent 不一样,则重新发起请求,而非从缓存中读取页面

Vary: User-Agent

当然,User-Agent 实在过多,此时缓存失效就会过多。

# 简答

使用 Vary: User-Agent,根据 UA 进行缓存。

Vary: User-Agent

但最好不要出现这种情况,PC 端和移动端如果是两套代码,建议用两个域名,理由如下

  1. nginx 判断是否移动端容易出错
  2. 对缓存不友好

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 5/29/2021, 8:12:31 AM