第八章 Nginx服务器的缓存机制【笔记】

来源:互联网 发布:汉斯季默 知乎 编辑:程序博客网 时间:2024/05/19 14:02

本章涉及内容:

  • 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=5mloader_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_zoneproxy_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模块进行开发,以实现更好的兼容性和扩展性。