乐趣区

关于nginx:使用nginx缓存服务器上的静态文件

一、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 缓存服务器动态文件

退出移动版