By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
Nginx自建CDN 第三篇
2020-09-25 14:17:16    228    0    0
emengweb

前言

本篇主要讲了缓存状态的显示,当上游服务器关闭时提供缓存内容,以及提高缓存性能,跨多个硬盘拆分缓存

配置文件

先看完整的配置文件

proxy_cache_path /usr/local/nginx/caches/moec.top levels=1:2 keys_zone=laoxong:1m inactive=2h max_size=500m;
server {
 listen 80;
 listen [::]:80;
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 ssl_certificate /usr/local/nginx/conf/ssl/证书;
 ssl_certificate_key /usr/local/nginx/conf/ssl/证书Key;
 ssl_session_timeout 1d;
 ssl_session_cache builtin:1000 shared:SSL:10m;
 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
 ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5";

 ssl_prefer_server_ciphers on;

 ssl_stapling on;
 ssl_stapling_verify on;

 server_name 域名;
 access_log /usr/local/nginx/caches/backblazebimg.2002000.xyz_nginx.log combined;

 charset utf-8,gbk;
location / {
 proxy_ssl_name $host;
 proxy_ssl_server_name on;
 proxy_set_header Accept-Encoding "";
 proxy_pass https://域名;
 proxy_redirect off;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 add_header laoXong-Cache-Status $upstream_cache_status;
 proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
 proxy_cache laoxong;
 proxy_cache_key $uri$is_args$args;
 proxy_cache_valid 200 304 30m;
 proxy_cache_valid 301 24h;
 proxy_cache_valid 500 502 503 504 0s;
 proxy_cache_valid any 1s;
 proxy_cache_min_uses 1;
 expires 12h;
 proxy_cache_lock on;
 proxy_cache_background_update on;
 }
 location ~ /purge(/.*) {
                allow              all;
                allow              127.0.0.1;
            #   deny               all;
                proxy_cache_purge laoxong $1$is_args$args;
 }
}

缓存状态的显示

配置为:add_header X-Cache-Status $upstream_cache_status;

 

 

在Header中x-cache-status后面显示的为缓存状态

返回的状态有

  • MISS - 在缓存中找不到响应,因此从原始服务器获取响应。然后缓存响应。
  • BYPASS- 响应是从原始服务器获取的,而不是从缓存中提供的,因为请求与proxy_cache_bypass指令匹配
  • EXPIRED - 缓存中的条目已过期。响应包含来自原始服务器的新内容。
  • STALE- 内容过时,因为源服务器未正确响应但proxy_cache_use_stale已配置。
  • UPDATING- 内容过时,因为条目当前正在更新以响应先前的请求,并且proxy_cache_use_stale updating已配置。
  • REVALIDATEDproxy_cache_revalidate指令已启用,NGINX验证当前缓存的内容是否仍然有效通过(If-Modified-SinceIf-None-Match`)。
  • HIT - 响应直接来自有效的缓存

提高缓存性能

proxy_cache_min_uses 规定缓存门槛,请求过多少次才缓存,不缓存低频请求,避免浪费。

proxy_cache_lock如果多个客户端求的文件不在缓存中,只有第一个这些请求是通过原始服务器的。其余请求等待满足该请求,然后从缓存中提取文件。
proxy_cache_lock_age “不能者止”,如果当前请求未能如期完成,就放行后续请求。
proxy_cache_lock_timeout 发生超时,同样放行,但不进行缓存。

跨多个硬盘拆分缓存

proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m
                 max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m
                 max_size=10g inactive=60m use_temp_path=off;

split_clients $request_uri $my_cache {
              50%          “my_cache_hdd1”;
              50%          “my_cache_hdd2”;
}

两个proxy_cache_path指令在两个不同的硬盘驱动器上定义了两个缓存my_cache_hdd1my_cache_hdd2split_clients 指定从一半的请求(结果50%)被缓存在my_cache_hdd1与另一半中my_cache_hdd2 $request_uri则表示使用请求URL定每个请求使用哪个缓存

其余配置

忽略Cache-Control

使用proxy_ignore_headers指令可以忽略Cache-Control(源站的缓存控制)

缓存POST请求

使用 proxy_cache_methods

proxy_cache_methods GET HEAD POST;

不使用缓存

使用proxy_cache_bypass

proxy_cache_bypass  字符串 ... ;

参考

如何配置Nginx的代理缓存

Nginx 学习笔记 (8) - 缓存加速指南 (proxy_cache)

上一篇: Nginx反向代理之端口转发TCP/UDP

下一篇: n.eko - 一个漂亮的虚拟浏览器

228 人读过
文档导航