AI摘要
本文介绍了如何通过Nginx和FastCGI缓存、浏览器缓存、Gzip压缩等技术优化Typecho博客的性能。优化后,页面加载速度显著提升,服务器负载降低,带宽消耗减少。文章提供了详细的Nginx配置示例,包括FastCGI页面缓存、浏览器缓存、Gzip压缩和缓存状态验证等,以实现网站性能的优化。
概述
随着网站内容不断增加,访问量上升,未优化的动态博客系统容易出现以下问题:
- 页面加载慢
每次请求都需要 PHP-FPM 解析模板和数据库查询,尤其是首页、文章页访问量大时,响应延迟明显。 - 服务器负载高
大量重复访问同一页面会频繁调用 PHP 和 MySQL,导致 CPU、内存和数据库压力增加。 - 带宽消耗大
静态资源(CSS、JS、图片)每次请求都传输,会占用大量带宽。
通过 Nginx + FastCGI 缓存 + 浏览器缓存 + Gzip 压缩 可以显著优化性能:
- FastCGI 缓存:将动态页面缓存到磁盘,减少 PHP 调用,提高响应速度。
- 浏览器缓存:静态资源缓存到用户浏览器,避免重复下载。
- Gzip 压缩:减小传输体积,加快页面加载。
- 缓存状态可视化:通过响应头和 Nginx 状态页,可实时监控缓存命中率(HIT/MISS)。
先看优化前后效果对比
页面访问速度(未启用缓存)
- 首页:www.hxy.bj.cn
- 平均响应时间:2.23 秒
- PHP-FPM 与数据库请求频繁
- 静态资源每次都重新加载
- 服务器 CPU 和带宽占用高
页面访问速度(启用 Nginx + FastCGI 缓存)
- 首页:www.hxy.bj.cn
- 平均响应时间:202 毫秒
- 页面缓存命中率高(HIT)
- 静态资源浏览器缓存,重复请求速度极快
- PHP-FPM 与数据库压力大幅下降
- 用户体验显著提升
Nginx配置优化策略
| 优化方式 | 说明 | 效果 |
|---|---|---|
| FastCGI 缓存 | 将动态页面缓存到磁盘,减少每次请求对 PHP-FPM 的调用 | 提高响应速度,减少服务器 CPU 和数据库压力 |
| 浏览器缓存 | 静态资源(CSS、JS、图片)缓存到用户浏览器 | 避免重复下载,提升重复访问速度,降低带宽占用 |
| Gzip 压缩 | 对文本类型资源进行压缩(HTML、CSS、JS 等) | 减小传输体积,加快页面加载 |
| 缓存状态可视化 | 通过响应头(X-Cache-Status)和 Nginx 状态页(/cache_status)监控缓存命中率 | 可实时查看 HIT/MISS,优化缓存策略,提高系统可维护性 |
全局缓存配置
缓存类型分为两类:
- FastCGI 页面缓存(动态 PHP 页面)
- 浏览器缓存(静态资源 CSS/JS/图片等)
1. FastCGI 页面缓存(磁盘缓存)
配置示例(放在 server 外部,全局生效):
fastcgi_cache_path /data/nginx/typecho_cache levels=1:2 keys_zone=TYPECHO_CACHE:100m inactive=10m max_size=5g;/data/nginx/typecho_cache:缓存文件存放目录,需提前创建levels=1:2:目录层级结构keys_zone=TYPECHO_CACHE:100m:共享内存区域存放缓存元数据,100MBinactive=10m:缓存超过 10 分钟未访问即过期max_size=5g:磁盘缓存最大容量
⚠️ 注意:目录 /data/nginx/typecho_cache 必须可写,并且 Nginx 用户拥有权限。2.浏览器缓存(静态资源)
location ~* \.(?:ico|css|js|gif|jpe?g|png|webp|svg|woff2?|ttf|eot)$ {
expires 7d;
add_header Cache-Control "public";
try_files $uri $uri/ =404;
access_log off;
}expires 7d:浏览器缓存有效期 7 天Cache-Control: public:允许缓存共享- 避免访问日志产生大量静态资源记录
主站动态页面缓存配置
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_cache TYPECHO_CACHE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 1h;
fastcgi_cache_valid 404 1m;
fastcgi_cache_use_stale error timeout updating http_500 http_503;
# 后台、登录页不缓存
set $no_cache 0;
if ($request_uri ~* "/admin|/login") {
set $no_cache 1;
}
fastcgi_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
add_header X-Cache-Status $upstream_cache_status;
}说明:
fastcgi_cache_valid 200 1h:200 页面缓存 1 小时fastcgi_cache_use_stale:在源服务器异常时,使用过期缓存返回响应$no_cache:后台和登录页面不缓存,保证安全X-Cache-Status:响应头显示缓存状态(HIT / MISS / BYPASS)
访问速度优化
1.Gzip 压缩:
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml;
gzip_vary on;- 压缩传输内容,减小网络带宽
- zip_vary on:支持代理缓存
- 浏览器缓存:静态资源缓存 7 天
- FastCGI 缓存:动态页面缓存,减少 PHP-FPM 调用
- 禁用后台、登录缓存:保证用户安全
缓存状态验证
1.Nginx 状态页(仅本机访问)
location = /cache_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}- 访问
http://127.0.0.1/cache_status可查看 Nginx 活跃连接、请求数 - 结合
X-Cache-Status响应头可验证缓存命中
2.验证缓存命中示例
curl -Ik https://www.hxy.bj.cn/ --insecure
# Response header:
# x-cache-status: HIT禁用敏感访问
location ~ /\.ht {
deny all;
}- 阻止
.htaccess等敏感文件访问 - 增强安全性
总结
通过以上配置:
- 静态资源浏览器缓存 7 天
- PHP 页面缓存 1 小时
- 后台与登录页不缓存
- 响应头显示缓存命中状态,方便调试
- 支持 Gzip 压缩,提高访问速度
- 安全头设置增强 HTTPS 安全
⚡ 实测:页面缓存 HIT 时,访问时间明显缩短,减轻 PHP-FPM 负载,提高网站整体性能。
Nginx完整配置
# ---------------------------
# 全局缓存配置(必须放在 server 外部)
# ---------------------------
fastcgi_cache_path /data/nginx/typecho_cache levels=1:2 keys_zone=TYPECHO_CACHE:100m inactive=10m max_size=5g;
server {
listen 80;
server_name example.com;
# 所有 HTTP 请求重定向到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
# ---------------------------
# SSL 配置
# ---------------------------
ssl_certificate /path/to/cert.pem; # 证书文件
ssl_certificate_key /path/to/key.key; # 私钥文件
ssl_trusted_certificate /path/to/chain.pem; # 中间证书
ssl_protocols TLSv1.2 TLSv1.3; # 支持的 TLS 协议
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
# ---------------------------
# 安全响应头
# ---------------------------
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
# ---------------------------
# 网站根目录和默认首页
# ---------------------------
root /var/www/html/typecho;
index index.php index.html index.htm;
# ---------------------------
# Gzip 压缩配置
# ---------------------------
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml;
gzip_vary on;
# ---------------------------
# Nginx 状态页(仅允许本机访问)
# ---------------------------
location = /cache_status {
stub_status;
access_log off;
allow 127.0.0.1;
deny all;
}
# ---------------------------
# 静态资源浏览器缓存
# ---------------------------
location ~* \.(?:ico|css|js|gif|jpe?g|png|webp|svg|woff2?|ttf|eot)$ {
expires 7d; # 缓存时间 7 天
add_header Cache-Control "public"; # 浏览器可缓存
try_files $uri $uri/ =404;
access_log off;
}
# ---------------------------
# 主站动态请求(PHP 页面缓存)
# ---------------------------
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# ---------------------------
# 启用 FastCGI 缓存
# ---------------------------
fastcgi_cache TYPECHO_CACHE;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 1h; # 200 页面缓存 1 小时
fastcgi_cache_valid 404 1m; # 404 页面缓存 1 分钟
fastcgi_cache_use_stale error timeout updating http_500 http_503;
# ---------------------------
# 后台和登录页面不缓存
# ---------------------------
set $no_cache 0;
if ($request_uri ~* "/admin|/login") {
set $no_cache 1;
}
fastcgi_no_cache $no_cache;
fastcgi_cache_bypass $no_cache;
# ---------------------------
# 响应头显示缓存命中状态
# ---------------------------
add_header X-Cache-Status $upstream_cache_status;
}
# ---------------------------
# 禁止访问敏感文件
# ---------------------------
location ~ /\.ht {
deny all;
}
}
9 条评论
华纳圣淘沙开户步骤详解(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程全解析(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司账户注册指南(183-8890-9465—?薇-STS5099【6011643】
新手如何开通华纳圣淘沙公司账户(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙企业开户标准流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户:从零到一(183-8890-9465—?薇-STS5099【6011643】
官方指南:华纳圣淘沙公司开户流程(183-8890-9465—?薇-STS5099【6011643】
华纳圣淘沙公司开户流程说明书(183-8890-9465—?薇-STS5099【6011643】
新盛客服电话是多少?(?183-8890-9465—《?薇-STS5099】【
新盛开户专线联系方式?(?183-8890--9465—《?薇-STS5099】【?扣6011643??】
新盛客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】客服开户流程,华纳新盛客服开户流程图(?183-8890--9465—《?薇-STS5099】
新盛客服电话是多少?(?183-8890-9465—《?薇-STS5099】【
新盛开户专线联系方式?(?183-8890--9465—《?薇-STS5099】【?扣6011643??】
新盛客服开户电话全攻略,让娱乐更顺畅!(?183-8890--9465—《?薇-STS5099】客服开户流程,华纳新盛客服开户流程图(?183-8890--9465—《?薇-STS5099】
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099?
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099?
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099?
华纳东方明珠客服电话是多少?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户专线联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
如何联系华纳东方明珠客服?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服联系方式?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服热线?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠开户客服电话?(▲182(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠24小时客服电话?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服邮箱?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠官方客服在线咨询?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳东方明珠客服微信?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
华纳总公司开户流程详解?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
哦吼吼,你也在优化啊
对滴,感觉网站加载慢。