内容提要
作者通过Cloudflare Tunnel将博客图片托管在办公室Fedora服务器的Nginx上,避免存入GitHub仓库。图片存放于/var/www/seisamuse-media目录,Nginx监听127.0.0.1:8081,需配置SELinux允许端口。在已有Tunnel配置中新增hostname并路由DNS,实现公网访问。博客用完整URL引用图片,但依赖服务器在线,重要图片需备份。
延伸解读
SELinux 端口限制是 Fedora 的常见坑
作者在配置 Nginx 监听 127.0.0.1:8081 时遇到 bind 权限错误,原因是 Fedora 的 SELinux 默认不允许 Nginx 使用该端口。通过 semanage 将 8081 加入 http_port_t 类型后问题解决。这提醒 Fedora 用户,配置服务监听非标准端口时,除了检查语法和端口占用,还需考虑 SELinux 策略,否则服务可能无法启动。
Tunnel 复用与规则顺序
作者没有新建 Tunnel,而是在现有配置中增加 hostname 和路由,并强调新规则需放在 404 兜底规则之前。这体现了 Cloudflare Tunnel 配置的灵活性:多个服务可共用一条隧道,通过 hostname 区分。但规则顺序很重要,若放在兜底之后可能无法匹配,导致请求落到 404。重启后需验证旧服务(如 FreshRSS)是否仍正常,确保新规则未影响原有流量。
自托管图片的可用性风险
作者明确提到,图片依赖办公室 Fedora 服务器在线,若关机、Nginx 停止或 Tunnel 断线,图片将暂时无法访问,而博客文字仍可打开。因此,重要图片需另行备份。这种方案适合对图片可用性要求不高的场景,或作为临时方案。若追求高可用,可考虑对象存储(如文中提到的 R2)或 CDN,但需注意成本与配置复杂度。
Q&A
如何用Cloudflare Tunnel给博客图片提供外部访问?
将图片存放在办公室Fedora服务器的/var/www/seisamuse-media目录,用Nginx监听127.0.0.1:8081提供本地服务,然后在已有的Cloudflare Tunnel配置中新增hostname并路由DNS,使外部通过公网域名访问。
图片文件应该放在服务器的哪个目录?
图片放在Fedora服务器的/var/www/seisamuse-media目录下,普通图片放在images子目录,文章专属图片放在blog/assets/文章slug/子目录。
Nginx配置中如何限制只允许本机访问?
在Nginx配置中设置listen 127.0.0.1:8081,这样Nginx只监听本机回环地址,外部无法直接访问,所有外部请求都通过Cloudflare Tunnel转发。
Fedora上SELinux阻止Nginx监听8081端口怎么办?
使用semanage命令将8081端口添加到http_port_t类型:sudo semanage port -a -t http_port_t -p tcp 8081,如果端口已定义则用-m参数修改。
如何将新域名添加到已有的Cloudflare Tunnel配置中?
编辑/root/.cloudflared/config.yml,在404兜底规则前添加hostname和service指向http://127.0.0.1:8081,然后使用cloudflared tunnel route dns命令添加DNS路由,最后重启Tunnel服务。
博客中如何引用这些图片?
在Markdown正文中使用完整URL,例如;首页卡片图写在文章头部的card_image字段;文章专属图片使用对应路径。
这种图片托管方式有什么缺点?
依赖办公室服务器在线,如果电脑关机、Nginx停止或Tunnel断线,图片会暂时无法访问,因此重要图片需要另外备份。