宝塔面板shell脚本访问WordPress站点地图实现全站预缓存
今天老白博客分享的是WordPress优化中较为经典的套路(个人认为)。基于宝塔面板,添加shell脚本,实现自动访问WordPress站点地图中的文章/页面/标签等链接,从而触发我们设置的缓存插件生成对应页面的html静态文件。这样的好处就是,在网站访问者访问我们网站之前,无论哪个页面都已经生成了静态的html文件,就不用再经过PHP处理了,速度非常快。接下来跟大家说说这种方法:
1. WordPress网站预缓存的概念
#/bin/bash
#进入到网站根目录,请按实际填写
cd /home/wwwroot/www.xcbtmw.com/
#从 sitemap.xml 中取出所有页面地址, 每隔 0.5 秒请求一次,触发缓存。
for url in $(awk -F"<loc>|</loc>" '{print $2}' sitemap.xml)
do
wget -O /dev/null $url
sleep 0.5
done
将此代码按实际修改后保存为 g_cache.sh ,上传到 Linux 系统,比如就放到 /root 目录,新增任务计划,定时运行即可
#每天凌晨 3 点全站预缓存一遍
0 3 * * * bash /root/g_cache.sh >/dev/null 2>&1
2.2 云端sitemap网址法
这个标题名字可能不太恰当,就是说你本地没有sitemap.xml这个文件,但是有站点地图,比如老白博客的为
https://www.xcbtmw.com/wp-sitemap.xml
那么shell脚本就可以这样写(技术有限,有问题欢迎指正哈)
#!/bin/bash
# 定义多个WordPress站点地图的URL
sitemap_urls=(
"https://www.xcbtmw.com/wp-sitemap-posts-post-1.xml"
"https://www.xcbtmw.com/wp-sitemap-posts-page-1.xml"
"https://www.xcbtmw.com/wp-sitemap-taxonomies-category-1.xml"
"https://www.xcbtmw.com/wp-sitemap-taxonomies-post_tag-1.xml"
)
# 遍历每个站点地图URL
for sitemap_url in "${sitemap_urls[@]}"; do
echo "Processing sitemap: $sitemap_url"
# 提取站点地图中的链接,包含<loc>和</loc>标签
links=$(curl -s "$sitemap_url" | grep -oP '<loc>.*?</loc>')
for link in $links; do
# 从<loc>标签中提取实际URL
actual_link=$(echo "$link" | grep -oP '(?<=<loc>).*?(?=</loc>)')
echo "Visiting link: $actual_link"
# 发送HTTP请求访问链接并检查返回状态
if curl -s -o /dev/null -w "%{http_code}" "$actual_link" | grep -q "200"; then
echo "Successfully accessed: $actual_link"
else
echo "Failed to access: $actual_link"
fi
sleep 0.5 # 等待0.5秒
done
done
简单解释一下
echo "Visiting link: $link"
是用来在控制台输出正在访问的链接,就是下面这个任务执行日志,这个可以根据自己情况删除。
wget -O /dev/null "$link"
是用来发送HTTP HEAD请求并访问链接。通过将下载内容保存到/dev/null
,实际上并不保存任何文件,只是发送HTTP HEAD请求来获取响应头信息,从而模拟访问链接的行为。
3. 缓存文件清除脚本
在使用了预缓存,生成缓存文件后,可以定期对缓存的文件来一次大更新。
所以二者需要搭配使用,下面的脚本就是删除超过一天的缓存文件
#!/bin/bash
# 定义要清理的目录
CACHE_DIR="/dev/shm/nginx-cache/"
# 统计超过一天的文件和文件夹数量
count=$(find "$CACHE_DIR" -mindepth 1 -mtime +1 | wc -l)
# 如果有文件或文件夹,进行删除
if [ "$count" -gt 0 ]; then
find "$CACHE_DIR" -mindepth 1 -mtime +1 -exec rm -rf {} \;
echo "已删除 $count 个超过一天的文件和文件夹。"
else
echo "在 $CACHE_DIR 中,没有超过一天的文件和文件夹。"
fi
解释:
"$CACHE_DIR"
:这是你定义的缓存目录,即/dev/shm/nginx-cache/
。-mindepth 1
:这个参数确保find
命令只查找nginx-cache
目录下的内容,而不会包括该目录本身。具体来说,mindepth 1
意味着只查找该目录下的文件和子目录,而不查找目录本身。-mtime +1
:这个参数查找修改时间超过一天的文件和文件夹。-exec rm -rf {} ;
:对找到的每个文件或文件夹执行删除操作。
4. 宝塔面板添加shell脚本
在宝塔面板的主页——计划任务中,就可以添加了,需要注意的就是脚本的内容和执行周期
https://www.xcbtmw.com/18654.html
本站自用WordPress优化教程:https://www.xcbtmw.com/tag/wordpress_optimization
其实开启WP SUPER CACHE的预缓存,就自动全部生成了,比这个简单