资讯专栏INFORMATION COLUMN

Apache 简单页面缓存

jhhfft / 2007人阅读

摘要:因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过的来达到目的。

维护一套网站系统,因为时间久远,已不知道他的静态化系统要如何开启和如何运作,而首页及部分频道页因为查询太多,导致运行缓慢,急需一种简单有效的方法来提高访问效率。

因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过 Apache 的 URLRewrite 来达到目的。

建立一个目录(如 cache)来存放静态化后页面文件,在网站根目录的 .htaccess 中写入规则, 没有就创建一个:

RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}.cache -f
RewriteRule ^(.*)$ cache/$1.cache [L]

此规则判断 cache 目录下是否存在当前 URI 对应的 .cache 后缀的文件, 如果有则将请求定向到该文件. 但是网站页面本身已采用了 URLRewrite 将 url 映射到了程序脚本上, 而其路径规则可能对尾部的 "/" 不敏感, 如 /abc/def 与 /abc/def/ 可以是同一个页面, RewriteCond 并不支持字符串截取、正则替换等操作, 故另添加以下规则来匹配 "/" 结尾的缓存:

RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI}/.cache -f
RewriteRule ^(.*)$ cache/$1/.cache [L]

现在, 我们还需要一个简单脚本来将页面输出存入缓存文件中, 可编写一个 bash 脚本来实现:

#!/bin/bash

WD=$(cd `dirname $0`; pwd)

cache ()
{
    ln="$1"
    fn="$WD/$1.cache"
    tn="$WD/$1.cachx"
    dn=`dirname $fn`

    rm    -f "$fn"
    rm    -f "$tn"
    mkdir -p "$dn"
    wget  -O "$tn" "http://www.xxx.com/$ln"
    mv "$tn" "$fn"
}

if [ "@" != "$1" ]
then
    cache   "$1"
else
    cache ""
    cache xxx/
    cache xxx/xxx
fi

可见脚本中 wget 将输出存入了临时文件后更名为目标文件, 这是因为 wget 在执行开始时就会打开文件, 此时请求开始, apache 因文件存在而重定向, 最后拿到的文件就成空的了. 为减少网络请求时间, 可在 /etc/hosts 中加入 127.0.0.1 www.xxx.com

此脚本使用方法为:

./cache.sh          # 缓存首页
./cache.sh xxx/     # 缓存 xxx 频道页(网站内链接可能用 / 结尾)
./cache.sh xxx/xxx  # 缓存 xxx 文章页(网站内链接不会用 / 结尾)
./cache.sh @        # 缓存所有经常访问的页面(脚本 else 部分)

可以把经常访问的页面加入脚本 else 部分, 将此脚本设为计划任务, 每隔一段时间刷新缓存一次, 能有效减少请求对数据库的查询次数.

但这还不够, 编辑可能需要在发布文章后立即更新缓存, 以便查看首页、频道页等位置的新闻、推荐等是否正确. 可采用以下 PHP 脚本来执行(如果网站系统是 PHP 编写):


";
system(__DIR__."/cache.sh "".$uri."" 2>&1");
echo "
";

只需在需要刷新缓存时请求 /cache/cache.php 即可, 可通过 n 参数来指定仅刷新哪个页面. 为防止恶意利用此脚本执行危险命令(如: abc"; rm -rf "xxx), 以上判断了仅能刷新指定的页面; 当然文件改名或加上密码等措施可能更可靠些.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21630.html

相关文章

  • Apache 简单页面缓存

    摘要:因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过的来达到目的。 维护一套网站系统,因为时间久远,已不知道他的静态化系统要如何开启和如何运作,而首页及部分频道页因为查询太多,导致运行缓慢,急需一种简单有效的方法来提高访问效率。 因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过 Ap...

    GitChat 评论0 收藏0
  • Apache 简单页面缓存

    摘要:因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过的来达到目的。 维护一套网站系统,因为时间久远,已不知道他的静态化系统要如何开启和如何运作,而首页及部分频道页因为查询太多,导致运行缓慢,急需一种简单有效的方法来提高访问效率。 因为问题主要出在页面中内容的查询上,优化方法自然是要减少或杜绝查询,在不动网站系统代码的前提下,可通过 Ap...

    laznrbfe 评论0 收藏0
  • Apache 与 Nginx 性能对比:Web 服务器优化技术

    摘要:服务器市场份额。子进程负责创建由指令设置的服务器线程,同时还负责监听接收到的请求,并将请求分发给处理线程。在版本引入了模块,这个模块基于模块创建的,并加入了独立的监听线程来管理请求处理完成后的休眠的连接。基于事件的服务器完胜。 译文首发于 Apache 与 Nginx 性能对比:Web 服务器优化技术,转载请注明出处。 多年前 Apache 基金会 Web 服务器 简称「Apache」...

    shadowbook 评论0 收藏0
  • Apache 与 Nginx 性能对比:Web 服务器优化技术

    摘要:服务器市场份额。子进程负责创建由指令设置的服务器线程,同时还负责监听接收到的请求,并将请求分发给处理线程。在版本引入了模块,这个模块基于模块创建的,并加入了独立的监听线程来管理请求处理完成后的休眠的连接。基于事件的服务器完胜。 译文首发于 Apache 与 Nginx 性能对比:Web 服务器优化技术,转载请注明出处。 多年前 Apache 基金会 Web 服务器 简称「Apache」...

    wangbjun 评论0 收藏0
  • 堡塔网站加速插件:为网站加速的插件「wordpress效果测评」

    摘要:堡塔网站加速是宝塔面板为用户开发的一款网站加速插件网站加速插件,基于页面缓存的网站加速插件,支持常见的众多建站程序加速。那么有了堡塔网站加速之后,我们可以使用更多的加速方式,提升网站打开速度。实测加速性能远强于,以下加速效果来自环境。堡塔网站加速是宝塔面板为用户开发的一款网站加速插件,基于页面缓存的网站加速插件,支持常见的众多建站程序加速。其原理是在http协议层缓存动态页面,对实时信息及已...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

jhhfft

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<