Nginx可独立充当CDN边缘节点,核心是通过root/alias提供静态资源,启用sendfile、tcp_nopush、open_file_cache提升传输效率,结合expires与Cache-Control实现浏览器及代理长缓存,配置proxy_cache_path和proxy_cache_valid构建反向代理缓存层,并辅以gzip压缩、防盗链、HTTP/2等增强安全与兼容性。

直接在 Nginx 上配置静态资源的 CDN 边缘加速,核心是让它既高效分发内容,又具备缓存、压缩、长连接和浏览器缓存控制能力。不需要额外 CDN 服务商,Nginx 自身就能充当边缘节点。
一、基础静态服务与高效传输优化
先让 Nginx 正确提供静态文件,并启用底层性能机制:
-
root 或 alias 指向资源目录:用
root /data/static;或更安全的alias /data/static/;(注意末尾斜杠),避免路径拼接错误 -
启用零拷贝传输:在 server 或 location 块中加
sendfile on;和tcp_nopush on;,减少内核态-用户态拷贝,提升大文件吞吐 -
开启文件句柄缓存:加
open_file_cache max=1000 inactive=20s;和open_file_cache_valid 30s;,降低频繁 stat 系统调用开销 -
设置合理超时:如
keepalive_timeout 65;,保持连接复用,减少 TCP 握手损耗
二、强制浏览器与中间代理缓存
让客户端和上游 CDN(或反向代理链)知道哪些资源可缓存、缓多久:
-
统一用 expires + Cache-Control:例如
expires 1y;配合add_header Cache-Control "public, max-age=31536000, immutable"; - immutable 标志很重要:告诉浏览器该资源不会变,即使刷新也不重验,适合带版本号或哈希值的 JS/CSS
- 对不常变资源设长缓存:图片、字体、图标建议 1 年;HTML 或入口文件建议禁用缓存或设短时间(如 10 分钟)
三、作为反向代理缓存节点(私有 CDN 模式)
若后端有源站(比如内部应用服务器),Nginx 可当缓存层,实现类 CDN 的回源加速:
-
定义缓存区:在 http 块里写
proxy_cache_path /var/cache/nginx/cdn levels=1:2 keys_zone=CDN:256m inactive=3d max_size=20g use_temp_path=off; -
定制缓存键:用
proxy_cache_key "$scheme$request_method$host$uri$is_args$arg_v";忽略无关 query 参数,保留版本参数v=1.2.3 -
设置缓存有效期:如
proxy_cache_valid 200 302 1h;、proxy_cache_valid 404 1m; -
启用缓存并透传响应头:location 中加
proxy_cache CDN;、proxy_pass http://origin_cluster;,并酌情加proxy_ignore_headers Cache-Control;强制按你规则缓存
四、安全与兼容性增强
防止盗链、适配多端、兼顾老旧客户端:
-
简单防盗链:用
valid_referers none blocked *.yourdomain.com;+if ($invalid_referer) { return 403; } -
Gzip 压缩平衡配置:跨国分发建议
gzip_comp_level 6;,国内可设为 4–5,避免 CPU 过载 -
支持 HTTP/2 和 TLS:监听 443 时加
http2,配合现代证书,提升首屏加载速度 -
版本化路径处理:如请求
/v2.1.0/js/app.js,用location ~ ^/v\d+\.\d+\.\d+/(.*)$ { try_files /$1 =404; }自动剥离版本前缀


















