第八章 Nginx服务器的缓存机制

本章涉及内容:

Web缓存技术的基础知识
Nginx服务器基于Proxy Store的缓存机制
Nginx服务器基于memcached的缓存机制
Nginx服务器基于Proxy Cache的缓存机制
Nginx与Squid服务器组合的配置
8.1、Web缓存技术简述
将动态网页转换成静态网页,本地保存网页的副本,这些副本有过期时间限制。

Web缓存技术的优点是很明显的。由于客户端的部分请求内容直接从Web服务器处获取,该技术减轻了后端服务器的负载,同时也减少了Web服务器与后端服务器之间的网络流量,从而减轻了网络拥塞,同时还能减小数据传输延迟,有效降低客户访问的延迟。

8.2、404错误驱动Web缓存
...
location /{
    ...
    root /myweb/server/;        #主目录
    error_page 404=200  /errpage$request_uri; #404定向到/errpage目录下
 
}
location /errpage/ {
    ...
    internal;            #该目录不能通过外部链接直接访问
    alias /home/html/;    
    proxy_pass http://backend/;    #后端upstream地址或源地址
    proxy_set_header Accept-Encoding ""; #后端不返回压缩(gzip/deflate)数据
    proxy_store on;            #指定Nginx将代理返回的文件保存
    proxy_store_access user:rw group:rw  all:r; #配置缓存数据的访问权限
    proxy_temp_path  /myweb/server/tmp;  #配置临时目录,该目录要和 /myweb/server/在同一硬盘分区内
}
...

8.3、资源不存在驱动Web缓存
...#其他配置
location /{
    ...#其他配置
    root /home/html/;
    internal; #配置该目录不能通过外部链接直接访问
    alias /myweb/server/;
    proxy_set_header Accept-Encoding ""; #配置后端不返回压缩(gzip或deflate)数据
    proxy_store on; #指定nginx将代理返回的文件保存
    proxy_store_access user:rw group:rw all:r ;  #配置缓存数据的访问权限
    proxy_temp_path /myweb/server/tmp; #配置临时目录,该目录要和/myweb/server/在同一硬盘分区内
    if(!-f $request_filename) #判断请求资源是否存在
    {
        proxy_pass http://backend/; #配置后端upstream地址或源地址
    }
}

通过if条件判断
8.4、基于memcached的缓存机制的6个指令
HTTP模块中有一ngx_http_memcached_module模块

该指令用于配置memcached服务器 的地址

1、memcached_pass address;
address 为memcached服务器的地址。支持IP+端口的地址或者域名地址。可以使用upstream指令配置一个memcached服务器组

2、memcached_connect_timeout指令
该指令用于配置连接memcached服务器的超时时间

memcached_connect_timeout time;

time为设置的超时时间。默认60s 建议改时间不要超过75s

3、memcached_read_timeout指令
该指令配置Nginx服务器向memcached服务器发出两个read请求之间的等待超时时间。

memcached_read_timeout time;

默认值60s

4、memcached_send_timeout指令
该指令配置Nginx服务器向memcached服务器发出两次write请求之间的等待超时时间,如果在该时间内没有进行数据传输。连接将会被关闭

memcached_send_timeout time;

默认值60s

5、memcached_buffer_size指令
该指令用于配置Nginx服务器用于接收memcached服务器响应数据的缓存区大小

memcached_buffer_size size;

size 设置缓存区大小,一般是所在平台的内存页大小的倍数。

memcached_buffer_size 4k|8k;

6、memcached_next_upstream指令
该指令配置一组memcached服务器的情况下使用。服务器组中各memcached服务器的访问规则遵循upstream指令配置的轮询规则。

memcached_next_upstream status ...;

status 为设置的memcached服务器返回状态,可以是一个或多个

error 在建立连接、向memcached服务器发送请求或读取响应头时服务器发生连接错误。

timeout:超时

invalid_header, memcached服务器返回的响应头为空或者无效

not_found, memcached服务器未找到对应的键值对

off   无法将请求发送给memcached服务器

...#其他配置
server {
    location /{
        ...#其他配置
        set $memcached_key "$uri?$args";
        memcached_pass 192.168.1.4:8080;
        error_page 404 502 504= @fallback;
    }
    location @fallback {
        proxy_pass http://backend;
    }
}

8.5、Proxy Cache缓存机制
Proxy Cache缓存机制的一个缺陷是,它没有实现自动清理磁盘上缓存源数据功能。因此在长时间使用过程中会对服务器存储造成一定的压力

...#其他配置
http{
    ...#其他配置
    proxy_cache_path /myweb/server/proxycache levels=1:2 max_size=2m inactive=5m
    loader_sleep=1m; keys_zone=MYPROXYCACHE:10m #配置缓存数据存放路径和Proxy Cache使用的内存Cache空间
    proxy_temp_path /myweb/server/tmp; #配置响应数据的临时存放目录
    server {
        ...#其他配置
        location /{
            ...
            proxy_pass http://www.myweb.name/;
            proxy_cache MYPROXYCACHE; #配置使用MYPROXYCACHE这个keys_zone
            proxy_cache_valid 200 302 1h; #配置200状态和302状态的响应缓存1小时
            proxy_cache_valid 301 1d; #配置301状态的响应缓存1天
            proxy_cache_valid any 1m; #配置其他状态的数据缓存1分钟
        }
 
 
    }
}
8.6、Nginx与Squid组合
Squid服务本身不支持在单台服务器同一端口(例如要反向代理Web必须指定80端口)下运行多个进程。这个的话就需要给每个Squid服务分配一台服务器设置。这样非常浪费资源。

8.6.1 Squid服务器的配置
将多个Squid服务器安装同一台服务器上的不同目录上。并配置不同监听端口

/squid0 监听在 squid_server_ip:10010

/squid1 监听在 squid_server_ip:10011
/squid2 监听在 squid_server_ip:10012

其中squid_server_ip是部署Squid服务器的IP地址

8.6.2Nginx服务器配置
user www www;
worker_process 10;
error_log /usr/local/nginx/logs/nginx_error.log;
pid /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 51200;
events {
    use epoll;
    worker_connections 51200;
}
http{
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    #配置Squid服务器组
    upstream squid_server{
        server squid_server_ip:10010;
        server squid_server_ip:10011;
        server squid_server_ip:10012;
    }
    #gzip on;
    server {
        listen 80;
        server_name myweb;
        #将客户端请求转向Squid服务器组处理
        location / {
            proxy_pass http://squid_server;
            proxy_redirect off;
            proxy_set_header Host $host:80;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

8.7、基于第三方模块ncache的缓存机制
ncahe是新浪公司的开源产品。作为Nginx服务器的一个HTTP模块进行开发,以实现更好的兼容性和扩展性。
————————————————
版权声明:本文为CSDN博主「往前的娘娘」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37355951/article/details/78363477

猜你喜欢

转载自blog.csdn.net/huapenguag/article/details/101275294
今日推荐