Nginx深入了解-进阶(四)

Nginx同样可以用来作为缓存服务;客户端浏览器缓存我们称之为客户端缓存,后端使用Redis、Memcache等缓存服务我们称之为后端缓存,同理Nginx作为缓存服务我们就称之为代理缓存。

一,Nginx作为代理缓存的流程示意图:

  • 配置语法:

Syntax:proxy_cache_path path [levels=levels]

[use_temp_path = on|off] keys_zone=name:size [inactive = time]

[max_size=size] \ [manager_files=number] \ [manager_sleep=time]

[manager_threshold=time] \ [loader_files=number]

[loader_sleep=time] \ [loader_threshold=time] \ [purger=on|off]

[purger_files=number] \ [purger_sleep=time]

[purger_threshold=time];

Default:–

Context:http

  • proxy_cache配置语法:

Syntax:proxy_cache zone|off;

Default:proxy_cache off;

Context:http、server、location

  • 缓存过期周期:

Syntax:proxy_cache_valid [code…] time;

Default:–

Context:http、server、location

  • 缓存维度:

Syntax:proxy_cache_key string;

Default:proxy_cache_key $schema$proxy_host$request_uri; // 协议+主机+url

Context:http、server、location

二,配置实例
http {
    ......
    proxy_cache_path /var/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off; #60m是指60分钟,1:2两级目录,test_cache开辟的空间名称
    server {
        listen 80;
        server_name localhost;
        access_log /var/logs/access.log main;

        location / {
            proxy_cache test_cache;
            proxy_cache_valid 200 304 12h;
            proxy_cache_valid any 10m;
            proxy_cache_key $host$uri$is_args$args;
            add_header Nginx-Cache "$upstream_cache_status"; # 增加头信息 key(Nginx-Cache) value($upstream_cache_status)

            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 当出现5xx,超时,错误等时,跳过直接访问下一台服务器
            include proxy_params;
        }
    }
}
三,清理指定缓存信息

使用第三方模块ngx_cache_purge来实现。

四,部分页面不缓存,比如登录注册页不希望缓存,可以使用proxy_no_cache实现

Syntax:proxy_no_cache string …;

Default:—;

Context:http、server、location;

  • 配置实例:
server {
    ......
    if ($request_uri ~ ^/(login|register|password\/reset)) {
        set $cookie_nocache 1;    
    }

    location / {
        proxy_cache test_cache;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
        add_header Nginx-Cache "$upstream_cache_status"; # 增加头信息 key(Nginx-Cache) value($upstream_cache_status)

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 当出现5xx,超时,错误等时,跳过直接访问下一台服务器
        include proxy_params;
    }
}
五,大文件分片请求混存

优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他请求不受影响。

缺点:当文件很大时或者slice很小时,可能会导致文件描述符耗尽等情况。


  转载请注明: Mantis Nginx深入了解-进阶(四)

 上一篇
Nginx深入了解-高级(一) Nginx深入了解-高级(一)
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态
2018-08-13 Mantis
下一篇 
Nginx深入了解-进阶(三) Nginx深入了解-进阶(三)
Nginx负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。 Nginx负载均衡示意图
2018-08-11 Mantis