阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx的Web缓存服务与新浪网的开源NCACHE模块

242次阅读
没有评论

共计 6248 个字符,预计需要花费 16 分钟才能阅读完成。

什么是 web 缓存
Web 缓存位于内容源 web 服务器和客户端之间,当用户访问一个 URL 时,web 缓存服务器回去后端 web 源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的 URL,web 缓存服务器直接输出内容给客户端,而不是像源服务器再次发送请求。web 缓存降低了内容源 web 服务器、数据库的负载,减轻了网络延迟,提高了用户的响应速度,增强了用户体验。
最著名的还要数 Squid Cache,其主要在 Unix 一类系统运行。

Nginx 的 Web 缓存服务
Nginx 从 0.7.48 后支持类似于 Squid 的缓存模块。这个缓存是把 URL 及相关组合当做 key,用 md5 算法对 key 进行希哈,得到硬盘上对应的希哈路径,从而将缓存内容保存在该目录内。支持任意 URL 链接。同时也支持 404/301/302 这样的非 200 状态码。
Nginx 的 Web 缓存服务主要用于 proxy_cache 相关指令集和 fastcgi 相关指令集构成,前者用于反向代理时,对后端内容源进行缓存,后者主要用于对 FastCDI 的动态程序进行缓存。两者功能基本一样。

proxy_cache 相关指令集
1、proxy_cache 指令
语法:proxy_cache zone_name;
默认值:none
使用环境:http,server,location
该指令用于设置那个缓存区将被应用,zone_name 的值为 proxy_cache_path 指令创建的缓存区明称。
2、proxy_cache_path 指令
语法:proxy_cache_path path[levels=number] keys_zone=zone_name:zone_size[incative=time] [max_size=size];
默认值:none
使用环境:HTTP
eg:
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one: 500m inactive=1d max_size=30g;
注意该指令只能在 http 标签内配置,levels 指定该缓存有两层 hash 目录,第一层为 1 个字母,第二层为 2 个字母,保存文件名类似于 /data0/proxy_cache_dir/c/29/fdg35415fg35f4gsdf2g1535gh465h;key_zone 参数用来为缓存区起名,500m 指定内存空间大小为 500MB;inactive 的 1d 是如果缓存数据在 1 天之内没有被访问,将被删除;max_size 的 30g 是指硬盘的缓存空间为 30GB。
3proxy_cache_methods 指令
语法:proxy_cache_methods [GET HEAD POST];
默认值:proxy_cache_methods GET HEAD;
使用环境:http,server,location
该指令用于设置用于缓存那些 HTTP 方法,默认缓存 HTTP GET/HEAD 方法,不缓存 HTTP POST 方法。
4proxy_cache_min_uses 指令
语法:proxy_cache_min_uses the_number;
默认值:proxy_cache_min_uses 1;
使用环境:http,server,location
该指令设置缓存最小的使用次数,默认值是 1.
5、proxy_cache_valid 指令
语法:proxy_cache_valid reply_code [reply_code…]time;
默认值:none
使用环境:http,server,location
该指令用于对不同的返回状态码的 URL 设置不同的缓存时间,例如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
如果不指定状态吗,直接指定时间,则只有 200、301、302 状态的 URL 缓存 5 分钟。
6、proxy_cache_key 指令
语法:proxy_cache_key line;
默认值:none
使用环境:http,server,location
该指令用来设置 web 缓存的 key 值,Nginx 根据 key 值 md5 希哈存储缓存。一般根据‘$host(域名)、$request_uri(请求路径)’等组合变量合成 proxy_cache_key. 例如:proxy_cache_key “$host:$server_port$uri$is_args$args”;

proxy_cache 完整示例
su
yum -y install pcre// 安装 pcre
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf ngx_cache_purge-2.3.tar.gz// 获取 nginx_cache_purge
cd nginx-1.6.3// 进入你的 nginx 文件目录(nginx 安装请参考前面的博客)
 ./configure –user=www –group=www –addmodule=../ngx_cache_purge-2.3 –prefix=/usr/local/webserver/nginx –with-http_stub_status_module –with-http_ssl_module
配置 nginx.conf
cd /usr/local/webserver/nginx/conf

#user  www www;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include      mime.types;
    default_type  application/octet-stream;

    #log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
    #                  ‘$status $body_bytes_sent “$http_referer” ‘
    #                  ‘”$http_user_agent” “$http_x_forwarded_for”‘;

    #access_log  logs/access.log  main;

    #charset utf-8;

    server_name_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;

    sendfile        on;
    #tcp_nopush    on;

    keepalive_timeout  30;

    tcp_nodely  on;

    proxy_temp_path /data0/proxy_temp_path;

    proxy_temp_path /data0/proxy_temp_path levels=1:2 key_zone=cache_one:200m inactive=1d max_size=30g;
    upstream my_sever_pool{
        server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.4:80 weight=1 max_fails=2 fail_timeout=30s;

    }

 

    #gzip  on;

    server {
        listen      80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_set_header Host $host;
        proxy_set_header X-Forward-For $remote_addr;
        proxy_pass http://my_server_pool;
      # root  html;
            #index  index.html index.htm;
        }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
        #使用 web 缓存区 cache_one
        proxy_cache cache_one;

        #对不同状态码设置不同缓存时间
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid 301 302 1m;
        proxy_cache_valid any im;
        #设置 web 缓存的 key 值,nginx 根据 key 值 md5 希哈存储缓存,这里根据“域名 /URL 参数”组合成 key。
        proxy_cache_key $host$uri$is_args$args;
        #反向代理,访问后端内容源服务器
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http:my_server_pool;
    }
    #用于清除缓存,假设一个 URL 为 http://my.domain.com/text.gif 通过访问 http://my.domain.com/purge/test.gif 可以清除该 URK 缓存。
    location ~ /purge(/.*)
    {
        #设定只允许指定的 IP 或 IP 段才可以清除 URL 缓存。
        allow      127.0.0.1
        allow      192.168.0.0/16;
        deny        all;
        proxy_cache_purge cache_one $shot$1$is-args$args;
    }
    access_log 0ff

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass  http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root          html;
        #    fastcgi_pass  127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache’s document root
        # concurs with nginx’s one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen      8000;
    #    listen      somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root  html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen      443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root  html;
    #        index  index.html index.htm;
    #    }
    #}

}

更多 Nginx 相关教程见以下内容

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/121861.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6248字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中