欢迎来到九八资源网【988.IM】

为网站开启Nginx缓存加速,支持html伪静态页面

日期: 2020-01-16 14:17:30

分享一下如何解决这个实时生成缩略图带来的CPU开销问题。

思路很简单,既然你要实时生成,那我就将你生成的缩略图缓存一份好了!在我测试期间发现,Nginx 的缓存也同样可以缓存伪静态的 html 页面,完全可以替代WP-Super-Cache这类缓存插件了。相信大部分CDN也是用的这个原理,比如百度云加速,我们可以在 header 里面发现一个

Server:yunjiasu-nginx

好了,废话不说,一起来看看如何实现吧!

一、代理模式

代理模式,即在使用 Nginx 反向代理时缓存指定内容,所用模块为 proxy_cache。这里网络上的很多教程会说,这个模式必须在反向代理中才能使用,说的好像不能用在只有一台服务器的情况似的。其实不然,我们用点小技巧,将 Nginx 本机的80端口代理转发到 本机的 8080 端口即可变相的开启反向代理模式,在这期间,就完全可以指定缓存内容了,且继续往下看!

①、下载模块

所用模块为 ngx_cache_purge,官方地址:http://labs.frickle.com/files/,我们可以挑选一个新版本下载到服务器上

下载

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

解压

②、重新编译

所以先执行 -V 命令查看 Nginx 是否已经编译了该模块


[marsge@Mars_Server ~]$ nginx -V
Tengine version: Tengine/2.1.0 (nginx/1.6.2)
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_concat_module --add-module=../ngx_cache_purge-2.3 --with-http_image_filter_module --add-module=../ngx_slowfs_cache-1.9
loaded modules:
ngx_core_module (static)
ngx_errlog_module (static)
...

如果编译参数中找不到 ngx_cache_purge,就需要重新编译 Nginx ,新增编译参数:

--add-module=../ngx_cache_purge-2.3

我现在用的是淘宝开放的 Tengine ,可以使用动态加载模块功能,如果是原版 Nginx ,在原来的基础上加上上述参数重新编译 Nginx 即可:

③、新增配置

A. 在 http 上下文中新增缓存配置:


http {
#以上略
##cache##
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /tmp/temp_cache1; #临时缓存目录
proxy_cache_path /tmp/cache1 levels=1:2 keys_zone=cache_one:200m inactive=30d max_size=5g;

B. 如下修改网站原来的server 模块:


server
{
#将之前监听修改成监听本地8080,其他配置保持不变
listen 127.0.0.1:8080;
server_name zhang.ge

c. 如下新增一个反向代理Server模块,用于转发请求到本地8080,变相实现反向代理模式:


server {
listen 80;
server_name zhang.ge;
#缓存清理模块
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.101; #此处表示允许访问缓存清理页面的IP
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
#缓存html页面,可以缓存伪静态【这是亮点!】
location ~ .*\.html$ {
proxy_pass http://127.0.0.1:8080;
proxy_cache_key $host$uri$is_args$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
#状态为200、302的缓存1天
proxy_cache_valid 200 302 1d;
#状态为301的缓存2天
proxy_cache_valid 301 2d;
proxy_cache_valid any 1m;
#浏览器过期时间设置4小时
expires 4h;
#忽略头部禁止缓存申明,类似与CDN的强制缓存功能
proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
#在header中插入缓存状态,命中缓存为HIT,没命中则为MISS
add_header Nginx-Cache "$upstream_cache_status";
}
#图片缓存设置,如果不是使用了Nginx缩略图功能,这个可以不用,效果不明显
location ~ .*\.(gif|jpg|png|css|jsico)(.*) {
proxy_pass http://127.0.0.1:8080;
proxy_cache_key $host$uri$is_args$args;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
add_header Nginx-Cache "$upstream_cache_status";
}
#动态页面直接放过不缓存
location ~ .*\.(php)(.*){
proxy_pass http://127.0.0.1:8080;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
#设置缓存黑名单,不缓存指定页面,比如wp后台或其他需要登录态的页面,用分隔符隔开
location ~ ^/(wp-admin|system)(.*)$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
#缓存以斜杠结尾的页面,类似于CDN的目录缓存,如果存在问题请取消缓存机制
location ~ ^(.*)/$ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_cache_key $host$uri$is_args$args;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1d;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 1h;
proxy_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
add_header Nginx-Cache "$upstream_cache_status";
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

全部保存后,执行 nginx -s reload 让配置生效即可。现在你再去访问网站的 html 页面,刷新一次就可以看到效果了!加载速度绝逼会有质的飞跃!而且你可以在F12开发模式的 Network 状态中看到 Nginx-Cache HIT 的标识!


Nginx缓存加速 html伪静态 支持 解决 这个


上一篇:WordPress“您的密码重设链接无效,请在下方请求新链接。

下一篇:苹果cms开启Redis高速缓存加快访问速度

  • 会员中心
  • 浏览记录
  • 我的订单
  • 我的收藏
  • 在线客服

    官方微信

    仅处理投诉、举报及平台使用问题;
    商品问题请咨询商家客服!

  • 意见反馈
  • 返回顶部
浏览记录