
个人网站访问慢?源站IP暴露?雷池 WAF + Nginx 缓存中转加速Halo博客!打开速度翻倍
是不是也有朋友和我一样,搭了 Halo 博客后发现加载速度总是慢半拍?尤其源站 IP 还裸奔在公网,安全隐患让人睡不踏实。
我之前也试过各种优化方法,直到摸索出一套更适合个人站长的组合:雷池 WAF + Nginx 缓存中转。不靠贵价 CDN,也能让网站加速访问,还能彻底隐藏源站 IP、启用 HTTPS,提升安全性。
这篇教程就是我在实际部署过程中的完整记录,特别适合手上有公网 IP 的 NAS 用户,或者境内外服务器混合部署的朋友。全流程图文讲解,从架构设计到 Nginx 配置一步步带你走通,帮你把 Halo 博客速度和安全都提上去。
本教程基于我在真实项目中的搭建经验,分享如何使用中转云服务器+雷池 WAF,实现 Halo 博客的安全访问与内容加速。
🚀架构需求优化说明
本项目中的 Halo 博客源站 部署在大陆本地 NAS,作为内容型网站,博客中含有大量图片资源,对访问速度和带宽提出较高要求。
过去仅使用雷池 WAF 简单反代回源的方式,将请求从海外 WAF 转发回大陆源站,导致网络延迟明显、页面加载缓慢,严重影响用户体验。
相比部署在云服务器,本地 NAS 更便于数据备份、管理与维护,也能避免公有云带宽不足、同步麻烦等问题。因此,我们希望保留本地部署的灵活性,同时通过多台中转云服务器实现反向同步访问,确保仅修改一个数据源即可完成多节点共享,加快全国各地的访问速度,提升 Halo 博客整体性能与稳定性。
最终目标是:提升网站打开速度、提高访客留存率,同时保护源站 IP,不暴露于公网,为内容型博客打下高性能、高安全的基础架构。
🧩 架构逻辑(中转服务器 + 雷池 WAF 架构)
用户访问 www.aabcc.top
↓
DNS 解析到「香港雷池 WAF 公网 IP」
↓
雷池 WAF 监听 443 端口(HTTPS)
↓
WAF 自动转发请求到 中转服务器内网地址(如 10.0.20.5:444)
↓
中转服务器 Nginx 反向代理访问源站 Halo 博客(如 155.5.5.5:8888)
↓
Halo 博客响应页面内容
↓
中转服务器缓存 & 转发响应给雷池
↓
雷池 WAF 返回内容给用户浏览器
📌 补充说明
中转服务器 雷池 WAF:
仅对外开放 80 / 443 端口;
所有请求根据规则回源至中转服务器内网 IP + 端口(如:10.0.20.5:444);
支持自定义
location
与 HTTPS 回源。
中转服务器:
监听内网地址(如
10.0.20.5:444
),不暴露公网;缓解源站压力、隐藏源站 IP;
可缓存 Halo 内容,加速网站访问。
源站 Halo 博客:
部署在大陆/任意可公网访问的服务器上;
使用非标准端口(如 8888);
不对公网暴露,靠中转服务器 + WAF 间接访问。
🧪 实验环境说明
Halo 博客源站:
Halo 博客部署在家庭NAS有公网 IP(或任何云服务器);
通过雷池 WAF 反向代理到其他端口,添加 SSL 证书实现 HTTPS访问,路由器将反向代理后的端口映射出去,;
Halo 博客源站演示公网 IP:
155.5.5.5
中转云服务器:
香港、日本、美国等任意地区低价云服务器(2H2G 即可),可点击此处查看低价云服务器活动;
中转云服务器内网 IP 示例:
10.0.20.5
;安装好雷池 WAF + Nginx;
云防火墙放通 80、443 端口。
🧭 操作步骤详解
1️⃣ 在本地 NAS 搭建 Halo 博客(含雷池 WAF)
搭建好你的Halo博客
安装雷池WAF,申请好SSL域名证书,导入域名证书到雷池WAF。
为Halo博客端口开启 SSL,设置只允许指定域名访问;
(可绑定DDNS)路由器映射对应端口,确保外部可通过 IP / 域名 访问Halo博客。
2️⃣ 中转服务器准备工作
演示在全新的Debian12系统上操作
首先确保你的中转云服务器80、443端口没有被占用
使用Docker安装好雷池WAF并导入需要使用的SSL域名证书
在你需要的路径下创建SSL证书文件夹并放入证书文件(本教程默认使用的是雷池WAF导入的自己申请的SSL证书)
# 雷池WAF的默认SSL证书保存路径如下,实际的路径取决于你将雷池WAF安装在哪。 /opt/SafeLine/resources/nginx/certs/ #例如你只上传过一次SSL证书,那么证书的名字就是cert.crt和cert.key /opt/SafeLine/resources/nginx/certs/cert.crt /opt/SafeLine/resources/nginx/certs/cert.key
更新软件源
apt update
安装vim工具
apt install -y vim
安装nginx
apt install -y nginx
启动Nginx
sudo systemctl start nginx 或者 sudo service nginx start
检查 nginx 服务状态,确认是否启动成功。
systemctl status nginx
3️⃣ 创建缓存目录 & 授权
创建Nginx缓存文件夹
# 可将halo_cache换成你喜欢的文件名,此处更改后后面的就要保持一致。 mkdir -p /var/cache/nginx/halo_cache
授权Nginx缓存文件夹
chown -R www-data:www-data /var/cache/nginx/halo_cache
4️⃣ 查看局域网 IP
查看中转服务器的局域网IP地址
# 演示使用的中转云服务器的局域网IP地址是10.0.20.5,部分云服务器无局域网IP,只有公网IP。 ip a
5️⃣ 创建反代缓存配置文件
编辑创建一个反代缓存配置文件
# 可将halo_proxy.conf换成你自己想用的名称,更改后自己记住即可。 vim /etc/nginx/conf.d/halo_proxy.conf
按字母
i
键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc
键退出编辑模式,输入:wq
保存并退出。(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)
# ========================= # ① HTTP 请求跳转到 HTTPS【将www.aabcc.top改成你自己想要绑定的缓存加速域名】 # ========================= server { listen 80; server_name www.aabcc.top; # 🔁 所有 http:// 请求强制跳转到 https:// # ⚠️ 实际的 HTTPS 入口由雷池 WAF 监听并管理 return 301 https://$host$request_uri; } # ========================= # ② HTTPS 回源服务(供雷池 WAF 使用) # ========================= server { # ⚠️ 此端口为雷池回源使用,非对公网开放【将10.0.20.5改成你自己的中转云服务器的局域网IP地址】 listen 10.0.20.5:444 ssl http2; server_name www.aabcc.top; # 📜 SSL 证书路径(仅用于雷池连接 Nginx 回源时验证)【将cert.crt和cert.key的SSL证书路径改成你自己实际的。】 ssl_certificate /opt/SafeLine/resources/nginx/certs/cert.crt; ssl_certificate_key /opt/SafeLine/resources/nginx/certs/cert.key; # ⚡ 启用 gzip 提高传输效率 gzip on; gzip_types text/css application/javascript application/json image/svg+xml; # ------------------------- # 反向代理主入口(启用缓存) # ------------------------- location / { proxy_pass https://155.5.5.5:8888; # 源站地址(Halo 博客)【改成你自己的博客源站访问地址+端口,支持IP/域名,注意http/https协议区分】 proxy_ssl_verify off; # 跳过证书验证 # 设置请求头,伪装成真实用户请求。【改成你自己的Halo博客源站访问地址,支持IP/域名】 proxy_set_header Host 155.5.5.5; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 🚀 启用缓存,减少回源频率 proxy_cache halo_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cache-Status $upstream_cache_status; # 返回缓存命中状态 } # ------------------------- # 后台路径(不缓存,避免管理界面异常)【/console是禁止缓存登录页,不缓存哪些你自己设置】、【代理地址改成你自己的博客源站访问地址+端口、地址,支持IP/域名】 # ------------------------- location ^~ /console { proxy_pass https://155.5.5.5:8888; proxy_ssl_verify off; proxy_set_header Host 155.5.5.5; proxy_no_cache 1; proxy_cache_bypass 1; } # ------------------------- # 静态资源路径(长期缓存)【改成你自己的博客源站访问地址+端口/地址,支持IP/域名】 # ------------------------- location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2?)$ { expires 30d; access_log off; proxy_pass https://155.5.5.5:8888; proxy_ssl_verify off; proxy_set_header Host 155.5.5.5; proxy_cache halo_cache; proxy_cache_valid 200 30d; } # ------------------------- # 错误码 497 修复(http 发到了 https 端口) # ------------------------- error_page 497 https://$host$request_uri;
6️⃣ 替换默认 nginx 配置
先删除默认初始的Nginx配置
rm /etc/nginx/nginx.conf
编辑nginx配置
vim /etc/nginx/nginx.conf
按字母
i
键进入编辑模式,复制并修改下面的配置文件,粘贴到终端,按Esc
键退出编辑模式,输入:wq
保存并退出。(排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)
# 指定 nginx 运行用户,推荐使用权限较低的 www-data 用户 user www-data; # 自动根据 CPU 核心数调整工作进程数,提升并发处理能力 worker_processes auto; # 存放 nginx 进程 ID 文件的路径,方便管理 nginx 进程 pid /run/nginx.pid; # 事件模块配置,定义工作连接数等参数 events { # 单个 worker 进程允许的最大连接数(包括客户端和后端连接) worker_connections 1024; } # HTTP 服务配置 http { # 配置代理缓存路径及参数 # /var/cache/nginx/halo_cache :缓存文件存放路径 # levels=1:2 :缓存目录分层级数,避免单目录文件过多 # keys_zone=halo_cache:50m :缓存区域名称和共享内存大小(50MB,用于缓存元数据) # max_size=2g :最大缓存容量,超过自动删除旧文件 # inactive=60m :60分钟内未被访问的缓存文件会被清理 # use_temp_path=off :关闭临时路径,缓存直接写入正式目录,提升性能 proxy_cache_path /var/cache/nginx/halo_cache levels=1:2 keys_zone=halo_cache:50m max_size=2g inactive=60m use_temp_path=off; # 加载 MIME 类型映射文件,支持常见文件类型的 Content-Type 头设置 include /etc/nginx/mime.types; # 默认的 MIME 类型,未匹配到类型时使用 default_type application/octet-stream; # 开启高效文件传输机制,减少内核与用户空间切换,提升性能 sendfile on; # 保持长连接的超时时间,单位秒,避免频繁建立连接的开销 keepalive_timeout 65; # 启用 gzip 压缩,提高传输效率,减少带宽占用 gzip on; # 指定 gzip 压缩的内容类型(文本和 JSON 等常见静态资源) gzip_types text/css application/javascript application/json image/svg+xml; # 包含其他配置文件,通常是 sites-enabled 及 conf.d 中的具体服务配置 include /etc/nginx/conf.d/*.conf; }
7️⃣ 测试并重载配置
测试并重载 Nginx
nginx -t && systemctl reload nginx
🔐 雷池 WAF 设置
雷池WAF > 通用设置 > 添加证书,添加你的域名 SSL 证书;
点击【防护应用】>【添加应用】;
编辑应用,参考下图进行设置后点击提交。
域名:你允许使用哪个域名访问这个中转服务器就添加哪个(演示测试额外添加了test.aabcc.top这个临时二级域名)
端口:填写443,勾选SSL。(因为HTTP的80端口被Nginx占用,我们只添加HTTPS协议的443端口)
证书:选择你添加的域名证书(要和你设置的域名匹配,否则证书不符,无法访问。)
上游服务器:填写你中转服务器的局域网IP地址+反向代理缓存的端口(HTTPS协议)
上游服务器的健康检查:随意
⚙️ 自定义配置中添加 301 强制跳转:
添加完之后点击 高级配置 > 下拉到底部
在底部的自定义 NGINX 配置中粘贴下面的代码,实现HTTP强制永久301重定向到HTTPS。
if ($scheme = http) { return 301 https://$host$request_uri; }
🌐 DNS 设置(以 CloudFlare 为例)
在CloudFlare上添加你的DNS域名解析,将A记录解析到你的中转服务器上,有多少个中转服务器都可以添加上去。
下面的解析主机名,根据你的需求设置。
⚠️ 注意事项:
必须关闭 Cloudflare 的小云朵(代理)功能;
否则雷池无法正确处理 SSL,无法识别真实 IP。
✅ 测试效果验证
中转服务器上测试:
curl -k -I https://10.0.20.5:444 -H "Host: www.aabcc.top"
# 返回结果应为
HTTP/2 200
在本地电脑上测试(CMD窗口上即可):
curl -k -I https://155.5.5.5:444 -H "Host: www.aabcc.top"
# 返回结果应为(防火墙/安全组没放行444端口就不会有返回结果)
HTTP/1.1 200 OK
测试 301 跳转:
测试301永久跳转的http自动跳转到https(演示测试额外添加了test.aabcc.top这个临时二级域名)
curl -I http://test.aabcc.top # 返回结果应返回 301 跳转到 https://test.aabcc.top 说明你的 Nginx 中的 80 端口监听和跳转配置正常生效了。 HTTP/1.1 301 Moved Permanently Location: https://test.aabcc.top/
🧱 安全防护设置
安装 iptables 工具:
安装
iptables-persistent
工具,输入Y
然后按回车键确定,连着弹出两个选项直接按回车键确认。apt install iptables-persistent
不想用命令的也可以安装(服务器配置好的可选)1Panel面板,使用firewall防火墙,直接WEB页面可视化操作。
情况一:中转服务器有内网 IP
假设中转服务器公网IP是 155.5.5.5,想禁止公网访问444端口,只允许内网或者本机访问。
可按需求选择下面的一条命令执行# 允许本机访问 iptables -A INPUT -p tcp -s 127.0.0.1 --dport 444 -j ACCEPT # 允许内网IP访问(假设内网网段为10.0.0.0/8) iptables -A INPUT -p tcp -s 10.0.0.0/8 --dport 444 -j ACCEPT # 拒绝其他所有IP访问444端口 iptables -A INPUT -p tcp --dport 444 -j DROP
情况二:中转服务器无内网 IP
假设中转服务器公网IP是 155.5.5.5,想禁止通过中转服务器的共IP+444端口访问。
按照下面的顺序执行# ✅ 允许雷池 WAF 的 IP 访问,将155.5.5.5换成你自己实际的中转服务器公网IP。 iptables -A INPUT -p tcp -s 155.5.5.5 --dport 444 -j ACCEPT # ❌ 拒绝其他所有来源访问 444(必须放在最后) iptables -A INPUT -p tcp --dport 444 -j DROP
🔒 建议:保存规则
以上设置完之后执行命令保存
# 保存当前规则,重启不会失效。 iptables-save > /etc/iptables/rules.v4
现在通过配置雷池 WAF 仅监听 443 端口的 HTTPS 请求,并限制只允许特定域名访问,中转服务器的 443 端口将只对受信域名开放。这样可以有效阻止通过 IP 地址或未授权域名访问中转服务器,进一步提升网站的安全性与访问控制精度。
📌 总结
通过雷池 WAF + Nginx 缓存中转架构,你可以实现以下目标:
✅ 隐藏博客源站 IP,提升安全性;
✅ 开启内容缓存,加速页面访问;
✅ 实现全链路 HTTPS;
✅ 控制来源,仅允许通过指定域名访问。
✅ 如果有其他闲置的云服务器可照抄此教程,打造环大陆网站加速。
文末
👇👇👇
- 感谢你赐予我前进的力量