本章涉及内容:
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