如果说前两天的学习是 “让 NGINX 能干活、能分流”,那第三天就是 “让 NGINX 干得更快、更安全”。作为服务的 “门面”,NGINX 不仅要能转发请求,还得解决 “静态资源加载慢” 和 “数据传输不安全” 这两个实际问题 —— 毕竟,用户不会等一个加载 10 秒的网页,也不会在没加密的链接上提交信息。今天我围绕 “静态资源缓存优化” 和 “SSL 证书配置” 展开学习,从踩坑到成功实现 HTTPS 访问,每一步都让我对 NGINX 的理解更深入,这篇博客就记录第三天的优化实践。
一、学习目标:为什么聚焦这两个优化方向?
第二天实现反向代理和负载均衡后,我用浏览器访问测试页面时发现两个明显问题:一是网页里的图片、CSS 文件每次刷新都会重新下载,加载速度慢;二是浏览器地址栏显示 “不安全”,提示 “此网站未使用 HTTPS”。查资料后得知,“静态资源缓存” 能让浏览器缓存常用文件,减少重复下载;“SSL 证书配置” 能实现 HTTPS 加密传输,保障数据安全 —— 这两个功能是企业级网站的 “标配”。因此,我给第三天定了两个目标:一是配置静态资源缓存,将图片、CSS 等文件的加载速度提升 50% 以上;二是部署 SSL 证书,让网站支持 HTTPS 访问,消除 “不安全” 提示。
二、核心实操一:静态资源缓存优化 —— 让网页加载 “快起来”
上午的重点是配置静态资源缓存,核心思路是 “给不同类型的文件设置不同缓存时间,让浏览器只下载更新过的文件”:
1. 理解缓存原理
静态资源(图片、CSS、JS)通常不会频繁修改,NGINX 可以通过在响应头中添加 “Cache-Control” 和 “Expires” 字段,告诉浏览器 “这些文件可以缓存 7 天 / 30 天”。下次用户访问时,浏览器会先检查本地缓存,如果文件没过期,直接从本地读取,不用再请求服务器 —— 就像超市买东西,常用的调料会囤在家里,不用每次都去超市买。
2. 缓存配置与测试
打开 NGINX 配置文件(conf/nginx.conf),在 “server” 节点下添加针对不同静态资源的缓存规则:
server {
listen 80;
server_name localhost;
# 1. 图片文件缓存:30天(针对不常修改的图片,如logo、背景图)
location ~* \.(jpg|jpeg|png|gif|svg)$ {
root html/static; # 静态资源存放目录
expires 30d; # 缓存30天
add_header Cache-Control "public, max-age=2592000"; # 30天=2592000秒
add_header ETag ""; # 禁用ETag,避免缓存校验冲突
}
# 2. CSS/JS文件缓存:7天(这类文件可能每周更新,缓存时间短一些)
location ~* \.(css|js)$ {
root html/static;
expires 7d;
add_header Cache-Control "public, max-age=604800"; # 7天=604800秒
add_header Last-Modified $date_gmt; # 添加最后修改时间,帮助浏览器判断是否更新
}
# 其他反向代理配置...
}
配置完成后重启 NGINX,用浏览器开发者工具测试:第一次访问时,图片文件的 “Size” 显示 “200KB”(从服务器下载);刷新页面后,“Size” 变成 “from disk cache”(从本地缓存读取),加载时间从 1.2 秒缩短到 0.1 秒 —— 缓存效果立竿见影。
3. 解决 “缓存更新” 问题
缓存虽好,但文件更新后怎么让浏览器加载新文件?我在文件名里加了 “版本号”,比如 “style_v2.css”,当文件更新时,把版本号改成 “v3”,浏览器会认为是新文件,自动重新下载 —— 这是企业常用的 “版本控制” 方案,既保证缓存效率,又不影响文件更新。
三、核心实操二:SSL 证书配置 —— 让访问 “更安全”
下午的重点是配置 SSL 证书,实现 HTTPS 访问。我选择用 “Let's Encrypt” 的免费证书(适合个人学习),步骤比想象中复杂,但最终成功部署:
1. 准备 SSL 证书
先在服务器上安装 “Certbot” 工具(用于申请免费证书),以 Windows 系统为例,从 Certbot 官网下载客户端,打开 cmd 输入命令:
# 申请针对localhost的证书(实际生产环境需替换为真实域名)
certbot certonly --standalone -d localhost
申请成功后,证书文件会保存在 “C:\Certbot\live\localhost” 目录下,包含 “fullchain.pem”(证书链)和 “privkey.pem”(私钥)两个关键文件。
2. 配置 NGINX 支持 HTTPS
在 nginx.conf 中新增一个 “server” 节点,监听 443 端口(HTTPS 默认端口),并指定证书路径:
# SSL优化配置(提升安全性和性能)
ssl_protocols TLSv1.2 TLSv1.3; # 只支持安全的TLS协议版本
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; # 优先使用强加密算法
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密算法
# 静态资源缓存配置(复用上午的规则)
location ~* \.(jpg|jpeg|png|css|js)$ {
root html/static;
expires 7d;
add_header Cache-Control "public, max-age=604800";
}
# 反向代理配置(转发到Apache服务器)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# HTTP重定向到HTTPS(让用户输入http://localhost时自动跳转到https)
server {
listen 80;
server_name localhost;
return 301 https://$host$request_uri;
}
3. 测试 HTTPS 访问
重启 NGINX 后,在浏览器输入 “https://localhost”,地址栏出现 “小绿锁”,提示 “连接是安全的”—— 终于消除了 “不安全” 提示。点击小绿锁查看证书信息,能看到 “Let's Encrypt” 的证书详情,证明 SSL 配置成功。同时,静态资源的缓存依然生效,网页加载速度没有因为 HTTPS 加密而变慢。
四、第三天总结:从 “能用” 到 “好用、安全”
回顾第三天的学习,最大的收获不是配置了缓存和 SSL,而是理解了 “NGINX 优化的核心是‘以用户为中心’”—— 缓存是为了让用户等得更少,SSL 是为了让用户用得更安心。当然也有没搞懂的地方,比如 “SSL 会话复用” 和 “OCSP stapling” 等进阶优化,明天计划学习这些内容,进一步提升 HTTPS 的性能。
如果屏幕前的你也在学 NGINX,建议第三天从 “解决用户体验问题” 入手(比如优化加载速度、配置 HTTPS),因为技术的最终价值是 “服务用户”。当你看到浏览器的 “小绿锁” 和更快的加载速度时,会更清楚为什么要学这些配置 —— 毕竟,一个既快又安全的服务,才是真正能用的服务。
















