【NGINX入门】3.Nginx的缓存服务器proxy_cache配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【NGINX入门】3.Nginx的缓存服务器proxy_cache配置相关的知识,希望对你有一定的参考价值。

参考技术A

本文介绍nginx缓存机制,配置和参数说明。

如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。毕竟,IO密集型服务的处理是nginx的强项。

Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(php动态缓存)两个功能模块完成。

Nginx缓存特点:

先上个例子:

因为我是在一台服务器上做试验,所以用了两个端口 80 和 90 进行模拟两台服务器之间的交互。

接下来讲一下配置项:

这里我设置了 图片 、 css 、 js 静态资源进行缓存。
当用户输入 http://wangxiaokai.vip 域名时,解析得到 ip:port 的访问地址。 port 默认为80。所以页面请求会被当前server截取到,进行请求处理。
当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。
如果获取到对应资源,则直接返回数据。
如果获取不到,则将请求转发给 proxy_pass 指向的地址进行处理。

这里直接处理 90 端口接受到的请求,到服务器本地目录 /mnt/blog 下抓取资源进行响应。

细心的读者应该发现,我在第二段例子里,留了个彩蛋 add_header wall "hey!guys!give me a star." 。
add_header 是用于在报头设置自定义的信息。
所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。

(1)Nginx系列教程(3)nginx缓存服务器上的静态文件
https://yq.aliyun.com/articles/752967

(2)proxy_cache
nginx 反向代理之 proxy_cache https://www.cnblogs.com/yyxianren/p/10832172.html

(3)Nginx使用upstream负载均衡和proxy_cache缓存实现反向代理
https://blog.51cto.com/13770206/2163952

Nginx缓存

两者功能基本一样.在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能,清除指定URL缓存功能.而在性能上,Nginx对多核CPU的利用,胜过Squid不少.另外,在反向代理,负载均衡,健康检查,后端服务器故障转移,重写,易用性上,Nginx也比Squid强大很多.这使得一台Nginx可以同时作为"负载均衡服务器"与"Web缓存服务器"来使用.

1、Nginx的Web缓存服务主要由 proxy_cache相关指令集 fastcgi_cache相关指令集 构成。
1)proxy_cache相关指令集用于反向代理时,对后端内容源服务器进行缓存.

2)fastcgi相关指令集主要用于对FastCGI的动态程序进行缓存.

 

proxy_cache相关指令集
(1)proxy_cache指令
语法: proxy_cache  zone_name ;

 

1、该指令用于设置 哪个缓存区 将被使用,zone_name的值为proxy_cache_path指令创建的缓存区的名称。
2、proxy_pass 指定获取静态内容的地址,其实proxy_cache的原理就是从一个指定的地址获取内容,然后缓存。当下次访问时,nginx会自动判断有没有缓存文件?如果有的话缓存文件是不是已经过期。

 

(2)proxy_cache_path指令

该指令用于设置缓存文件的存放路径等相关信息.
语法 proxy_cache_path path [levels=number]

keys_zone=zone_name:zone_size[inactive=time] [max_size=size];
 1 例如:
 2 proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g ;
 3 解释:
 4 path 表示存放目录
 5 levels 表示指定该缓存空间有两层hash目录,第一层目录为1个字母,第二层目录为2个字母, 保存的文件名会类似/usr/local/nginx/proxy_cache_dir/c/29/XXXXXX ;
 6 keys_zone 参数用来为这个缓存区起名.
 7 500m  指内存缓存空间大小为500MB
 8 inactive 的1d指如果缓存数据在1天内没有被访问,将被删除。相当于expires过期时间的配置;
 9 max_size 的30g是指硬盘缓存空间为30G

 

(3)proxy_cache_methods指令
语法:proxy_cache_methods[GET HEAD POST];
该指令用于设置缓存哪些HTTP方法,默认缓存HTTP GET/HEAD方法,不缓存HTTP POST 方法

(4)proxy_cache_min_uses指令
语法:proxy_cache_min_uses the_number
该指令用于设置缓存的最小使用次数,默认值为1

(5)proxy_cache_valid指令
语法: proxy_cache_valid reply_code [reply_code...] time ;
该指令用于对不同返回状态码的URL设置不同的缓存时间.
例如:
proxy_cache_valid 200 302 10m ;
proxy_cache_valid 404 1m ;
设置200,302状态的URL缓存10分钟,404状态的URL缓存1分钟.

(6)proxy_cache_key指令
语法: proxy_cache_key line ;
该指令用来设置Web缓存的Key值,Nginx根据Key值md5哈希存储缓存.一般根据$host(域名),$request_uri(请求的路径)等变量组合成proxy_cache_key .

proxy_cache缓存配置的完整示例(多数nginx缓存的配置):

1)下载nginx和第三方的ngx_cache_purge模块的编译安装包(官网:http://labs.frickle.com/nginx_ngx_cache_purge/),将ngx_cache_purge编译到到Nginx中,用来清除指定URL的缓存

 

 1 [[email protected] ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc            //首先安装依赖
 2 [[email protected] ~]# cd /usr/local/src
 3 
 4 [[email protected] src]# wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
 5 [[email protected] src]# wget http://nginx.org/download/nginx-1.8.0.tar.gz
 6 [[email protected] src]# tar -zxvf ngx_cache_purge-2.3.tar.gz
 7 [[email protected] src]# tar zxvf nginx-1.8.0.tar.gz
 8 [[email protected] src]# cd nginx-1.8.0.tar.gz
 9 [[email protected] nginx-1.8.0]# ./configure --user=www --group=www --add-module=../ngx_cache_purge-2.3 --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
10 [[email protected] src]# make && make install

 

 

 

2)接着,在同一分区下创建两个缓存目录,分别供proxy_temp_path , proxy_cache_path指令设置缓存路径.
注意:proxy_temp_path和proxy_cache_path指定的路径必须在同一磁盘分区,决不能跨区分,因为它们之间是硬链接的关系,避免不通文件系统之间的磁盘IO消耗。
[[email protected] src]# mkdir -p /usr/local/nginx/proxy_cache_path             #注意,这两个目录的权限一定要是www.www,即是nginx进程权限
[[email protected] src]# mkdir -p /usr/local/nginx/proxy_temp_path               #这是缓存文件的临时存放目录

3)在配置文件nginx.conf中对扩展名为gif,jpg,jpeg,png,bmp,swf,js,css的图片,flash,javascript , css文件开启Web缓存,其他文件不缓存。

 

[[email protected] src]# vim /usr/local/nginx/conf/nginx.conf
user  www;
worker_processes  8;
  
events {
    worker_connections  65535;
}
  
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
 
    log_format  main  ‘$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_cookie" $host $request_time‘;
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65;
 
#要想开启nginx的缓存功能,需要添加此处的两行内容!
#设置Web缓存区名称为cache_one,内存缓存空间大小为500M,缓存的数据超过1天没有被访问就自动清除;访问的缓存数据,硬盘缓存空间大小为30G
    proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
 
#创建缓存的时候可能生成一些临时文件存放的位置
    proxy_temp_path /usr/local/nginx/proxy_temp_path;
 
    fastcgi_connect_timeout 3000;
    fastcgi_send_timeout 3000;
    fastcgi_read_timeout 3000;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 8 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
  
     
    client_header_timeout 600s;
    client_body_timeout 600s;
  
    client_max_body_size 100m;             
    client_body_buffer_size 256k;           
  
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
  
 
    include vhosts/*.conf;
}

 

 

 




















以上是关于【NGINX入门】3.Nginx的缓存服务器proxy_cache配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx入门到精通目录

Nginx保姆级入门——什么是反向代理?Nginx能实现哪些功能?

Nginx缓存

送你一份 Nginx 最佳入门手册

nginx简单入门

生产环境网站部署