一、nginx缓存的长处

如图所示,nginx缓存,能够在肯定水平上,缩小源服务器的解决申请压力。 因为动态文件(比方css,js, 图片)中,很多都是不常常更新的。 nginx应用proxy_cache将用户的申请缓存到本地一个目录。下一个雷同申请能够间接调取缓存文件,就不必去申请服务器了。 毕竟,IO密集型服务的解决是nginx的强项。

二、如何进行设置

先上个栗子:

http{    proxy_connect_timeout 10;    proxy_read_timeout 180;    proxy_send_timeout 5;    proxy_buffer_size 16k;    proxy_buffers 4 32k;    proxy_busy_buffers_size 96k;    proxy_temp_file_write_size 96k;    proxy_temp_path /tmp/temp_dir;    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;    server {        listen       80 default_server;        server_name  localhost;        root /mnt/blog/;        location / {        }        #要缓存文件的后缀,能够在以下设置。        location ~ .*.(gif|jpg|png|css|js)(.*) {                proxy_pass http://ip地址:90;                proxy_redirect off;                proxy_set_header Host $host;                proxy_cache cache_one;                proxy_cache_valid 200 302 24h;                proxy_cache_valid 301 30d;                proxy_cache_valid any 5m;                expires 90d;                add_header wall  "hey!guys!give me a star.";        }    }    # 无nginx缓存的blog端口    server {        listen  90;        server_name localhost;        root /mnt/blog/;        location / {        }    }}复制代码

因为我是在一台服务器上做试验(敲重点,做试验),所以用了两个端口8090进行模仿两台服务器之间的交互。

80端口对接的是一般的域名(http://wangxiaokai.vip)拜访。
90端口负责解决80端口代理过去的资源拜访。
相当于90端口是源服务器,80端口是nginx反向缓存代理服务器。

接下来讲一下配置项:

2.1 http层设置

 proxy_connect_timeout 10;    proxy_read_timeout 180;    proxy_send_timeout 5;    proxy_buffer_size 16k;    proxy_buffers 4 32k;    proxy_busy_buffers_size 96k;    proxy_temp_file_write_size 96k;    proxy_temp_path /tmp/temp_dir;    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;复制代码
  • proxy_connect_timeout 服务器连贯的超时工夫
  • proxy_read_timeout 连贯胜利后,等待后端服务器响应工夫
  • proxy_send_timeout 后端服务器数据回传工夫
  • proxy_buffer_size 缓冲区的大小
  • proxy_buffers 每个连贯设置缓冲区的数量为number,每块缓冲区的大小为size
  • proxy_busy_buffers_size 开启缓冲响应的性能当前,在没有读到全副响应的状况下,写缓冲达到肯定大小时,nginx肯定会向客户端发送响应,直到缓冲小于此值。
  • proxy_temp_file_write_size 设置nginx每次写数据到临时文件的size(大小)限度
  • proxy_temp_path 从后端服务器接管的临时文件的寄存门路
  • proxy_cache_path 设置缓存的门路和其余参数。被缓存的数据如果在inactive参数(以后为1天)指定的工夫内未被拜访,就会被从缓存中移除

2.2 server层设置

2.2.1 反向缓存代理服务器

 server {        listen       80 default_server;        server_name  localhost;        root /mnt/blog/;        location / {        }        #要缓存文件的后缀,能够在以下设置。        location ~ .*.(gif|jpg|png|css|js)(.*) {                proxy_pass http://ip地址:90;                proxy_redirect off;                proxy_set_header Host $host;                proxy_cache cache_one;                proxy_cache_valid 200 302 24h;                proxy_cache_valid 301 30d;                proxy_cache_valid any 5m;                expires 90d;                add_header wall  "hey!guys!give me a star.";        }    }复制代码
  • proxy_pass nginx缓存里拿不到资源,向该地址转发申请,拿到新的资源,并进行缓存
  • proxy_redirect 设置后端服务器“Location”响应头和“Refresh”响应头的替换文本
  • proxy_set_header 容许从新定义或者增加发往后端服务器的申请头
  • proxy_cache 指定用于页面缓存的共享内存,对应http层设置的keys_zone
  • proxy_cache_valid 为不同的响应状态码设置不同的缓存工夫
  • expires 缓存工夫
    • *

这里我设置了图片cssjs动态资源进行缓存。 当用户输出http://wangxiaokai.vip域名时,解析失去ip:port的拜访地址。port默认为80。所以页面申请会被以后server截取到,进行申请解决。 当解析到上述文件名结尾的动态资源,会到缓存区获取动态资源。 如果获取到对应资源,则间接返回数据。 如果获取不到,则将申请转发给proxy_pass指向的地址进行解决。

2.2.2 源服务器

 server {        listen  90;        server_name localhost;        root /mnt/blog/;        location / {        }    }复制代码

这里间接解决90端口承受到的申请,到服务器本地目录/mnt/blog下抓取资源进行响应。

三、如何验证缓存是否无效

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

拜访http://wangxiaokai.vip后果如下:

四、参考

[1] nginx文档
[2] nginx反向缓存代理详解
[3] Nginx缓存服务器动态文件