使用Cloudflare加速vercel
前言
Vercel本身有边缘网络节点,在国内的速度其实还不错,即便后来流量改道去了新加坡。但是为什么要使用cloudflare来加速vercel,因为vercel前段时间出现过被屏蔽的情况(详见《vercel无法访问带来哪些影响》)。cloudflare虽然速度不是特别快,比较免费版无法使用大陆节点,但是用来防止部署在vercel上面的项目再次出现无法访问的情况也算是一个不错的选择。
如何配置
根据vercel的官方文档,将cloudflare(以下简称CF)与vercel结合使用有两种方法。第一种无代理(仅限DNS)的方法不能避免我们上述提到的问题,所以使用第二种,但是文档本身可能不那么好理解,因此分享这篇日志提供参考。
替换域名DNS服务器
将域名添加到CF之后,需要在你的域名注册商处修改DNS服务器为CF提供的DNS,通常为mia.ns.cloudflare.com
和rick.ns.cloudflare.com
。以腾讯云为例,在Dnspod无法修改NS记录且修改也无效,需要登陆腾讯云控制台,在域名处点击管理,然后找到DNS服务器进行修改。
解析到vercel
进入CF中域名控制台,点击上方DNS图标,添加记录,A记录或者CNAME记录解析到你部署在vercel的项目。但是这个时候vercel仍然会显示未正确配置,并且这个时候访问很有可能返回错误。因为当 vercel 构建项目时,构建过程的最后一步是颁发 SSL 证书。作为此步骤的一部分,vercel 向 域名/.well-known/acme-challenge
发出 HTTP 请求。如果此 HTTP 请求被重定向到 HTTPS,Vercel 将无法颁发 SSL 证书。
根据文档我们来用命令进行验证(注意协议是http):
curl http://example.com/.well-known/acme-challenge -I |
如果能通过域名访问vercel将会返回:
curl http://example.com/.well-known/acme-challenge -I |
如果运行命令收到3xx
重定向,那么CF会阻止访问此路由,且vercel会将域名标记为未配置。
curl http://example.com/.well-known/acme-challenge -I |
配置cloudflare规则
创建屏蔽规则
为防止上述请求被重定向,需要通过以下方式创建https 例外页面规则:
在CF控制台的“规则”选项卡中选择“创建页面规则”;
在“如果 URL 匹配”文本字段中输入
*example.com/.well-known/*
;从“选择设置”下拉列表中选择“SSL”,然后从“选择 SSL 设置”下拉列表中选择“关”;
点击“保存并部署”按钮。
说明:这个时候使用curl命令测试,不出意外返回应该就是HTTP/1.1 404 Not Found
,那么你的域名便可正常访问。如果仍然是301重定向,尝试关闭CF中的始终使用HTTPS。
重定向(待定)
为确保所有其他 HTTP 请求继续重定向到 HTTPS,请通过以下方式创建另一个页面规则:
禁用“SSL/TLS”选项卡的“边缘证书”部分中的“始终使用 HTTPS”设置。
在“页面规则”选项卡中选择“创建页面规则”按钮。
在“如果 URL 匹配”文本字段中输入“
http://*example.com*
” 。从“选择设置”下拉菜单中选择“始终使用 HTTPS”。
点击“保存并部署”。
说明:这一步骤是国外一位博主分享的,事实上经我测试无需这一步,可能是因为我主域名并非使用CF的这个域名。
写在最后
此前分享国外可用的免费CDN时便提到过cloudflare,虽然有时候人们戏称它为减速CDN(针对中国大陆地区),但是实际速度也不是想象中那么慢,甚至比我直接解析到vercel新ip的域名速度要快,因此本站将在接下来可能较长时间内使用CF+vercel的waline服务地址来提升加载和提交速度。如果有任何问题欢迎随时向博主反馈。