Ghost进阶: Cloudflare相关

更新时间:2022年9月6日23点56分


图片无法跨域

关闭"Scrape Shield-Hotlink"保护(防止站外链接指向您的图像。)否则NewsLetter无法显示文章中的图片。

用Cloudflare Web Analytics

Cloudflare 有一个功能全面的网站分析(Web Analytics)面板,如果你的域名托管在Cloudflare,则会自动进行访问统计,不需要在网站中植入脚本;否则,需要一段Cloudflare提供的JavaScript代码,可以在Ghost-Sttings-Code injection中引入,实测会被浏览器AdBlocker广告过滤插件会拦截,因此,如果域名不在Cloudflare解析,推荐用自托管的站点统计工具umamiDemo),好处是可以统计所有时段而不仅限于一个月,其他与Cloudflare相差无几。

用Cloudflare CDN

Cloudflare的免费CDN只提供中国大陆以外的,大陆区访问延迟过高(响应200ms)左右,有时候还比较拥堵,当然对于自娱自乐个站来说,这些并不是考虑的重点。

有三种方式可以上CDN:

  1. DNS记录上加上小云朵,此种方式可以代理地址,使服务器IP不暴露于公网之上,但不能隐藏端口,而且只支持少数几个端口(443,2053,2083,2087,2096,8443),如果博客使用443以外的端口,那么有一种补充方式是在页面规则中重定向,但这会影响浏览体验和搜索引擎优化,不推荐这么做。
  2. 使用Workers,Workers在Cloudflare CDN网络上运行一些 JavaScript代码,转发端口和流量,结合Pages和R2还可以用来托管静态站点和作图床等,这种方式是过去常用的,但配置起来略麻烦。
  3. Cloudflare Tunnel,这是新上线的服务,通过在源站上运行一个叫cloudflared(Docker或其他方式安装),主动与Cloudflare CDN之间建立一个持久化的隧道,源站无需暴露端口,只提供流量给Cloudflare节点,所有的入站访问都在Cloudflare节点上,这种方式最安全,安装配置也最方便。注:
    • 从客户端到Tunnel默认https,Cloudflare套上自己颁发的证书,Cloudflare和源站之间,尚不清楚是否进行了端对端加密,源站提供服务给Tunnel,可以是http或者https,以及其他协议,可以肯定的,不管出站是否加密,到达Tunnel节点后都需要先解密再转发给客户端,而源站与Tunnel之间的隧道是专有连接,别的应用也访问不了,Cloudflare是一家美国公司,如果你信任Tunnel网关,可以认为它是安全的。
    • 如果源站以http提供服务给Tunnel,并且Ghost以Docker桥接的方式部署,那么url应该填Dcoker网桥的网关地址:ghost对外映射的端口,网关地址一般是172.17.0.1。
    • 如果源站以https提供服务给Tunnel,首先要先在源站对Ghost进行反向代理以启用https端口,但是反向代理不能指定来源主机,而应该以 * 号代替,否则来自Tunnel的请求会被拒绝。

同样的,启用了CDN后,如果源站端口经过了反向代理,要么反向代理不指定来源主机,以 * 号代替,要么将域名下SSL/TLS加密模式设为 灵活,否则会因证书问题拒绝访问。

IPv6的问题

如果服务器只有IPv6的环境,如何在外网通过IPv4访问?

IPv4和IPv6是两张彼此独立的网络,跨网访问需要有中转服务器,Cloudflare CDN就可以提供这样的中转,只需要在ipv6 DNS记录(AAAA )上启用小云朵,当客户端从IPv4访问时将启用Ipv4代理,反之则是IPv6代理,当然,如前所述,通过CDN代理的流量响应速度和带宽都大打折扣,更好的做法是添加一条不代理的AAAA记录,然后再添加一条代理的CNAME记录指向前者,在外网IPv6环境下使用前者,IPv4下使用后者。

最好不要对一个域名同时启用A记录和AAAA记录,因为ipv4网络环境下访问该域名会优先解析到ipv6的ipv4代理地址,而不是A记录地址直连。

Ghost Explore无法添加

Ghost Explore是一个在官网(ghost.org)展示的网站/博客目录,所有使用Ghost建站的创作者(版本升级到5.8以上)都可以在上面添加自己的“友情链接”,列表按照博客会员数排序,可以分类浏览和搜索,这让分散在互联网角落的个站博主们拥有了一个社区,尽管还很简陋。

有两种添加的方式,在这个过程中,我碰到了点小问题:

如果到Explore添加自己的站点,会显示:

That ain’t gonna fly.

You’ll need to submit a site running on Ghost.

如果在自己的网站上,从https://{your_domain}/ghost/#/explore/这个链接导航过去,同样无法加载:

空白错误

Something went wrong. Please try again or contact support@ghost.org

这是因为我的网站是在Cloudflare上解析的,被防火墙js质询拦截了。如果你碰到和我类似的错误,那么先把“自动程序攻击模式”关了,或者将被拦截的的Ghost IP加入白名单。

Cloudflare自动程序攻击模式设置


Ghost是一套开源的(博客)建站平台,这是一个持续更新的系列,用来列举一些官方文档和公开网络上尚未详细说明的问题与解决办法,您可以用标签 #Ghost 或搜索找到所有相关的文章。