Nginx功能篇04—静态缓存

概述

本章,您将学习 Nginx 的静态缓存功能。

静态文件通常指‌内容不随请求动态变化‌的文件,常见如图片、JS、CSS 等,存放在 Web 服务器上。当浏览器首次访问站点时,这些静态文件会被下载并‌根据服务器配置的缓存策略‌缓存到本地,当再次访问相同站点时,若缓存未过期则无需重新下载,从而加快访问速度。但是静态文件不宜一直被浏览器缓存,需要在 Web 服务器上配置缓存的有效时间,这既保证用户能及时获取更新后的内容,又能减轻服务器负担‌。

术语解释
缓存:计算机中非常常见的术语,指的是将‌频繁访问或可能再次访问‌的数据临时存放在‌比原始数据源更快的存储介质‌中(如 CPU 缓存、内存、本地磁盘文件、CDN 节点等),当下次再次访问相同资源时,直接从缓存中读取,从而加快访问速度。缓存在不同文档上下文中可指代 CPU 缓存、内存缓存、磁盘缓存(本地文件缓存)、浏览器缓存、CDN 缓存、DNS 缓存等。

相关指令

要开启 Nginx 的静态缓存功能,有以下两种方式:

  • expires 指令 - 当响应代码为 200、201、204、206、 301、302、303、304、307 或 308时,启用或禁用或修改或添加响应头中的 "Expires" 和 "Cache-Control" 字段。语法为 expires [modified] time;expires epoch | max | off;,默认为 expires off;。时间单位后缀可以是 s、m、h、d、w、M、y,分别指秒、分、时、天、周、月、年
  • add_header 指令 - 当响应代码为 200、201、204、206、 301、302、303、304、307 或 308时,则将指定的字段添加到响应头中。语法为 add_header name value [always];

这些指令可配置在 http、server、location 上下文中,但是我们通常都会将它们配置在 location 上下文中。

expires 指令

修改主配置文件 nginx.conf 的内容:

Shell > vim /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  4;

error_log  logs/error.log  error;

pid        logs/nginx.pid;

worker_rlimit_nofile 7400;

events {
    use epoll;
    worker_connections  1024;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile       on;
    tcp_nopush     on;

    keepalive_timeout  30;

    gzip on;
    gzip_vary on;
    gzip_buffers 32 4K;
    gzip_comp_level 5;
    gzip_types text/plain text/css text/xml application/json application/javascript application/xml application/xhtml+xml image/svg+xml application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject font/woff;
    gzip_min_length 256;

    server {
        listen  192.168.100.20:80;
        server_name  www.games.com;
        access_log  logs/games-access.log  main;
        charset utf-8;

        location / {
            root   /html/games/;
            index  index.html index.htm;
        }

        location ~* \.(jpg|css|jpeg|xml|js|gif) {
                expires 4h;
        }
    }
}

location 匹配 URI 时,有两大类的匹配模式(通过不同的修饰符进行区别):

  • 前缀字符串

    • = - 精准匹配
    • ^~ - 优先前缀匹配
    • 无修饰符 - 普通前缀匹配,用来处理其他所有未明确匹配的请求。如 location / {...}
  • 正则表达式

    • ~ - 区分大小写的正则表达式匹配
    • ~* - 不区分大小写的正则表达式匹配

关于这个 location 上下文匹配 URI(统一资源标识) 的优先级以及相关的说明,后面文档会有具体说明。

验证

配置完成后,可通过以下命令验证静态缓存是否生效:

# 检查 Cache-Control 和 Expires 响应头字段是否符合预期
Shell > curl -I https://www.example.com/main.js

您也可以通过 Google Chrome 的 F12 快捷键进入到开发者页面,在 Network 标签页下方的资源列表中选中相关的文件(js、css、jpg等),即可在右侧的详情面板中找到相关的响应标头。

Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇