前言

Vercel本身有边缘网络节点,在国内的速度其实还不错,即便后来流量改道去了新加坡。但是为什么要使用cloudflare来加速vercel,因为vercel前段时间出现过被屏蔽的情况(详见《vercel无法访问带来哪些影响》)。cloudflare虽然速度不是特别快,比较免费版无法使用大陆节点,但是用来防止部署在vercel上面的项目再次出现无法访问的情况也算是一个不错的选择。

如何配置

根据vercel的官方文档,将cloudflare(以下简称CF)与vercel结合使用有两种方法。第一种无代理(仅限DNS)的方法不能避免我们上述提到的问题,所以使用第二种,但是文档本身可能不那么好理解,因此分享这篇日志提供参考。

替换域名DNS服务器

将域名添加到CF之后,需要在你的域名注册商处修改DNS服务器为CF提供的DNS,通常为mia.ns.cloudflare.comrick.ns.cloudflare.com。以腾讯云为例,在Dnspod无法修改NS记录且修改也无效,需要登陆腾讯云控制台,在域名处点击管理,然后找到DNS服务器进行修改。

在此处修改DNS

解析到vercel

进入CF中域名控制台,点击上方DNS图标,添加记录,A记录或者CNAME记录解析到你部署在vercel的项目。但是这个时候vercel仍然会显示未正确配置,并且这个时候访问很有可能返回错误。因为当 vercel 构建项目时,构建过程的最后一步是颁发 SSL 证书。作为此步骤的一部分,vercel 向 域名/.well-known/acme-challenge 发出 HTTP 请求。如果此 HTTP 请求被重定向到 HTTPS,Vercel 将无法颁发 SSL 证书。

525错误,即证书问题

根据文档我们来用命令进行验证(注意协议是http):

curl http://example.com/.well-known/acme-challenge -I

如果能通过域名访问vercel将会返回:

curl http://example.com/.well-known/acme-challenge -I
HTTP/1.1 404 Not Found

如果运行命令收到3xx重定向,那么CF会阻止访问此路由,且vercel会将域名标记为未配置。

curl http://example.com/.well-known/acme-challenge -I
HTTP/1.1 308 Moved Permanently

本机测试结果为301重定向

配置cloudflare规则

创建屏蔽规则

为防止上述请求被重定向,需要通过以下方式创建https 例外页面规则:

  1. 在CF控制台的“规则”选项卡中选择“创建页面规则”;

  2. 在“如果 URL 匹配”文本字段中输入 *example.com/.well-known/*

  3. 从“选择设置”下拉列表中选择“SSL”,然后从“选择 SSL 设置”下拉列表中选择“关”;

  4. 点击“保存并部署”按钮。

cloudflare规则设置

说明:这个时候使用curl命令测试,不出意外返回应该就是HTTP/1.1 404 Not Found,那么你的域名便可正常访问。如果仍然是301重定向,尝试关闭CF中的始终使用HTTPS。

重定向(待定)

为确保所有其他 HTTP 请求继续重定向到 HTTPS,请通过以下方式创建另一个页面规则:

  1. 禁用“SSL/TLS”选项卡的“边缘证书”部分中的“始终使用 HTTPS”设置。

  2. 在“页面规则”选项卡中选择“创建页面规则”按钮。

  3. 在“如果 URL 匹配”文本字段中输入“http://*example.com*” 。

  4. 从“选择设置”下拉菜单中选择“始终使用 HTTPS”。

  5. 点击“保存并部署”。

说明:这一步骤是国外一位博主分享的,事实上经我测试无需这一步,可能是因为我主域名并非使用CF的这个域名。

写在最后

此前分享国外可用的免费CDN时便提到过cloudflare,虽然有时候人们戏称它为减速CDN(针对中国大陆地区),但是实际速度也不是想象中那么慢,甚至比我直接解析到vercel新ip的域名速度要快,因此本站将在接下来可能较长时间内使用CF+vercel的waline服务地址来提升加载和提交速度。如果有任何问题欢迎随时向博主反馈。