动态缓存

代理缓存

upstream imooc {
server 116.62.103.228:8001;
server 116.62.103.228:8002;
server 116.62.103.228:8003;
}
proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=10m use_temp_path=off;
server {
listen 80;
server_name localhost jeson.t.imooc.io;
access_log /var/log/nginx/test_proxy.access.log main;
location / {
# 代理缓存开关
proxy_cache imooc_cache;
proxy_pass http://imooc;
# 代理缓存过期周期
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";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_params;
}
}

动态匹配

动态匹配(请求过滤)

通常在开发环境或者测试环境的时候呢我们修改了代码,因为浏览器缓存,可能不会生效,需要手动清除缓存,才能看到修改后的效果,这里我们做一个配置让浏览器不缓存相关的资源。

location ~* \.(js|css|png|jpg|gif)$ {
add_header Cache-Control no-store;
}

~* \.(js|css|png|jpg|gif)$ 是匹配以相关文件类型然后单独处理。add_header 是给请求的响应加上一个头信息 Cache-Control: no-store,告知浏览器禁用缓存,每次都从服务器获取。

通常动态匹配的规则形式如下:

# 精准匹配
location = / {
# Configuration
}
# 通用匹配
location / {
# Configuration
}
# 路径匹配
location /documents/ {
# Configuration
}
# 最佳匹配
location ^~ /images/ {
# Configuration
}
# 正则匹配
location ~* \.(gif|jpg|jpeg)$ {
# Configuration
}
  • =:表示精确匹配,只有请求的 URL 路径与后面的字符串完全相等时,才会命中(优先级最高)
  • ^~:表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找
  • ~:表示该规则是使用正则定义的,区分大小写
  • ~*:表示该规则是使用正则定义的,不区分大小写

我们也可以通过状态码来过滤请求:

# 通过状态码,返回指定的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /source/error_page;
}