Nginx配置优化,提升CMS网站访问速度
CMS网站打开慢,很多时候不是服务器配置低,而是Nginx没有针对CMS的请求特点做优化。
这篇教程面向零基础站长,按准备、操作、避坑、验证的顺序,讲清楚如何通过Nginx配置优化提升CMS网站访问速度,操作完成后你可以用浏览器和命令行直接对比效果。
优化前先确认环境和备份
动手前先确认Nginx的安装方式和配置目录,避免改错文件。
在SSH中执行:
nginx -v
nginx -t
第一条看版本,第二条检查当前配置是否正常。
如果使用宝塔面板,Nginx主配置一般在 /www/server/nginx/conf/nginx.conf,站点配置在 /www/server/panel/vhost/nginx/你的域名.conf。
源码安装通常在 /etc/nginx/nginx.conf 和 /etc/nginx/conf.d/。
修改前先备份:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
宝塔用户可在面板文件管理里复制一份。每次只改一个模块,改完执行 nginx -t,通过后再 nginx -s reload,这样出问题能快速定位。
开启gzip压缩减少传输体积
CMS页面以HTML、CSS、JS为主,开启gzip能显著减少传输大小。
在 http 或 server 块中加入:
gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
gzip_vary on;
gzip_comp_level 建议4到6,太高会吃CPU。
验证命令:
curl -I -H "Accept-Encoding: gzip" https://你的域名
返回头中出现 Content-Encoding: gzip 说明生效。
静态资源缓存和连接数调优
CMS的图片、CSS、JS变化不频繁,可让浏览器缓存。
在 server 块中添加:
location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
access_log off;
}
同时调整连接处理能力,在 nginx.conf 顶部设置:
worker_processes auto;
worker_connections 10240;
keepalive_timeout 65;
worker_processes auto 让Nginx按CPU核心数自动分配。
修改后务必 nginx -t 再 reload。
用FastCGI缓存降低PHP重复解析
CMS多为PHP程序,每次请求都执行PHP会拖慢速度。
在 http 块定义缓存区:
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=cms_cache:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
然后在站点 location ~ \.php$ 中引用:
fastcgi_cache cms_cache;
fastcgi_cache_valid 200 301 302 10m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
缓存目录需要提前创建并授权:
mkdir -p /var/cache/nginx
chown -R www-data:www-data /var/cache/nginx
宝塔环境Nginx运行用户通常是 www,
用 chown -R www:。登录用户和后台页面不要缓存,
www /var/cache/nginx
否则会出现串号或后台操作异常,
可用cookie或请求参数设置 $skip_cache。
常见报错与避坑说明
改配置后如果站点打不开,先看错误日志:
tail -f /var/log/nginx/error.log
宝塔路径为 /www/wwwlogs/你的域名.error.log。
常见问题:
nginx: [emerg] unknown directive:指令拼写错误或模块未安装,回退备份再逐行检查。- 502 Bad Gateway:FastCGI缓存目录权限不对,或PHP服务未启动。
- 缓存后内容不更新:清理
/var/cache/nginx或缩短fastcgi_cache_valid时间。 - 不要对动态接口、支付回调、登录页开启缓存,避免业务数据错乱。
效果验证与后续调整
配置完成后用两条命令对比:
curl -o /dev/null -s -w "%{time_total}\n" https://你的域名
多次执行取平均值,再结合浏览器开发者工具的Network面板看首字节时间和资源加载耗时。
如果CMS仍慢,可继续排查数据库慢查询和PHP-FPM进程数。
建议以官方文档和控制台实际显示为准,不同版本参数可能略有差异。
常见疑问
缓存会不会导致用户看到旧内容?
合理设置过期时间,后台更新后手动清缓存即可,动态页面不要缓存。
gzip和缓存能同时开吗?
可以,两者作用不同,gzip减少传输体积,缓存减少后端处理。
改完需要重启服务器吗?
不需要,nginx -s reload 平滑加载配置即可。