近期在vercel建立了一个个人网站,因为vercel无法访问,于是决定使用cloudflare进行代理加速。
根据vercel的官方文档,将cloudflare(以下简称CF)与vercel结合使用有两种方法。第一种无代理(仅限DNS)的方法不能避免我们上述提到的问题,所以使用第二种,但是文档本身可能不那么好理解,因此分享这篇日志提供参考。
将域名添加到CF之后,需要在你的域名注册商处修改DNS服务器为CF提供的DNS,通常为mia.ns.cloudflare.com和rick.ns.cloudflare.com。以腾讯云为例,在Dnspod无法修改NS记录且修改也无效,需要登陆腾讯云控制台,在域名处点击管理,然后找到DNS服务器进行修改。
进入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
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重定向
为防止上述请求被重定向,需要通过以下方式创建https 例外页面规则:
在CF控制台的“规则”选项卡中选择“创建页面规则”;
在“如果 URL 匹配”文本字段中输入 *example.com//.well-known/acme-challenge/*;
从“选择设置”下拉列表中选择“SSL”,然后从“选择 SSL 设置”下拉列表中选择“关”;
点击“保存并部署”按钮。
cloudflare规则设置
说明:这个时候使用curl命令测试,不出意外返回应该就是HTTP/1.1 404 Not Found,那么你的域名便可正常访问。如果仍然是301重定向,尝试关闭CF中的始终使用HTTPS。
参考官方
vercel与cloudflare集成 https://vercel.com/docs/integrations/cloudflare#using-wildcard-domains-optional