Debian 网站提速实战:一台 2 核 4G 服务器的生产环境优化记录
Debian 如何提高网站速度|生产环境实测
在生产环境中,“网站速度优化”往往不是单点问题,而是一个系统工程。很多人一提到提速,第一反应就是换更贵的服务器、升级带宽、加 CDN。但在实际项目中,我发现不少 Debian 服务器即使配置不高,只要系统、Web 服务、PHP/Node/数据库、缓存、网络参数等环节调优得当,也能获得非常明显的性能提升。
本文基于 Debian 生产环境的真实优化思路,围绕 系统层、Web 服务层、应用层、数据库层、缓存层、网络层、监控层 展开,介绍如何在 Debian 上提高网站访问速度。文章中的示例以常见的 Debian 12 + Nginx + PHP-FPM + MariaDB/MySQL + Redis 架构为主,也适用于大多数 Linux Web 生产环境。
一、生产环境测试背景
为了让优化结果更接近真实场景,本文假设的生产环境如下:
| 项目 | 配置 |
|---|---|
| 操作系统 | Debian 12 |
| CPU | 2 核 |
| 内存 | 4GB |
| 磁盘 | SSD |
| Web 服务 | Nginx |
| 后端 | PHP-FPM |
| 数据库 | MariaDB / MySQL |
| 缓存 | Redis |
| 站点类型 | WordPress / Laravel / ThinkPHP / 自研 PHP 项目均适用 |
| 并发场景 | 中小型生产网站,日访问量 1 万至 10 万 |
优化前常见问题包括:
- 首页加载时间较长;
- 静态资源未压缩,图片体积较大;
- Nginx 并发能力没有充分发挥;
- PHP-FPM 进程配置不合理;
- 数据库慢查询较多;
- 页面没有缓存,每次请求都访问数据库;
- HTTPS 握手成本较高;
- 服务器系统参数保持默认值;
- 缺少监控,不知道瓶颈在哪里。
经过多轮优化后,通常可以看到以下改善:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 首页首字节时间 TTFB | 500ms - 1500ms | 80ms - 300ms |
| 静态资源加载时间 | 较慢 | 明显降低 |
| CPU 占用 | 高峰期明显升高 | 更平稳 |
| 数据库查询次数 | 较多 | 大幅减少 |
| 页面整体加载时间 | 2s - 5s | 0.8s - 2s |
| 并发承载能力 | 一般 | 明显提升 |
需要说明的是,不同业务、不同代码质量、不同插件数量、不同数据库规模,最终结果会有差异。本文重点不是给出一个固定数值,而是提供一套在 Debian 生产环境中可落地的优化方法。
二、先定位瓶颈,而不是盲目优化
网站速度慢,可能是服务器问题,也可能是代码问题、数据库问题、网络问题,甚至是前端资源问题。生产环境优化的第一步,一定是定位瓶颈。
1. 查看系统负载
uptime
top
htop
重点关注:
- Load Average 是否长期高于 CPU 核心数;
- CPU 是用户态占用高,还是系统态占用高;
- 是否存在大量僵尸进程;
- PHP-FPM、MySQL、Nginx 哪个进程占用资源最高。
例如:
uptime
输出类似:
load average: 0.36, 0.42, 0.51
如果服务器是 2 核 CPU,负载长期低于 2,说明 CPU 压力不大;如果长期超过 4 或 6,则需要进一步分析。
2. 查看内存使用情况
free -h
Linux 会使用空闲内存做缓存,因此不能只看 used。重点看 available 是否充足。
如果 available 很低,并且 Swap 使用很高,说明内存可能成为瓶颈。Web 生产环境中,频繁使用 Swap 会严重拖慢响应速度。
3. 查看磁盘 IO
iostat -x 1
如果没有该命令,可以安装:
apt update
apt install sysstat -y
重点关注:
%util是否长期接近 100%;await是否过高;- 数据库所在磁盘是否 IO 压力大。
数据库慢、页面慢,有时候不是 CPU 不够,而是磁盘 IO 被打满。
4. 查看网络连接
ss -s
ss -ant | awk '{print $1}' | sort | uniq -c
如果存在大量 TIME-WAIT、CLOSE-WAIT,可能需要检查连接复用、应用是否正常关闭连接,以及系统网络参数是否合理。
5. 使用 curl 测试响应时间
curl -o /dev/null -s -w \
"time_namelookup: %{time_namelookup}\n\
time_connect: %{time_connect}\n\
time_appconnect: %{time_appconnect}\n\
time_starttransfer: %{time_starttransfer}\n\
time_total: %{time_total}\n" \
https://example.com
重点看:
time_namelookup:DNS 解析时间;time_connect:TCP 连接时间;time_appconnect:HTTPS 握手时间;time_starttransfer:首字节时间;time_total:总耗时。
如果 time_starttransfer 很高,通常说明后端处理慢;如果 time_total 高但 TTFB 低,可能是静态资源、网络或前端加载问题。
三、升级 Debian 软件源与基础组件
生产环境不建议盲目追求最新版本,但要确保系统组件稳定、安全,并且具有较好的性能表现。
1. 更新系统
apt update
apt upgrade -y
如果是重要生产环境,建议先在测试机执行升级,再安排业务低峰期维护。
2. 安装常用排查工具
apt install -y curl wget vim htop iotop iftop sysstat lsof net-tools unzip git
这些工具可以帮助快速定位 CPU、内存、磁盘、网络瓶颈。
3. 检查 Debian 版本
cat /etc/debian_version
Debian 12 在内核、OpenSSL、系统库方面都比老版本更适合现代 Web 服务。如果仍在使用 Debian 9、Debian 10,建议规划升级。
四、Nginx 优化:提升静态资源与并发能力
Nginx 是网站入口,优化 Nginx 能直接改善访问速度和并发处理能力。
1. worker_processes 设置
编辑配置:
vim /etc/nginx/nginx.conf
推荐:
worker_processes auto;
auto 会根据 CPU 核心数自动设置 worker 数量,通常比手动写死更合理。
2. worker_connections 调整
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
说明:
worker_connections决定单个 worker 可处理的连接数;epoll是 Linux 下高性能事件模型;multi_accept on可以让 worker 一次接受多个新连接。
理论最大连接数约为:
worker_processes × worker_connections
但实际还受文件描述符限制影响。
3. 提高文件描述符限制
查看当前限制:
ulimit -n
如果只有 1024,生产环境可能偏低。
在 /etc/security/limits.conf 添加:
www-data soft nofile 65535
www-data hard nofile 65535
root soft nofile 65535
root hard nofile 65535
同时在 systemd 中为 Nginx 设置限制:
systemctl edit nginx
添加:
[Service]
LimitNOFILE=65535
然后执行:
systemctl daemon-reload
systemctl restart nginx
4. 开启 Gzip 压缩
在 Nginx 配置中加入:
gzip on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_vary on;
gzip_proxied any;
gzip_types
text/plain
text/css
text/xml
text/javascript
application/javascript
application/json
application/xml
application/rss+xml
image/svg+xml;
Gzip 对 HTML、CSS、JS、JSON 等文本资源压缩效果明显。生产环境中,压缩等级不建议过高,5 通常是性能和压缩率之间较好的平衡。
5. 开启 Brotli 压缩
如果使用的是支持 Brotli 的 Nginx 版本,可以启用 Brotli。Brotli 对现代浏览器更友好,压缩率通常比 Gzip 更高,尤其适合静态资源。
安装方式取决于 Nginx 来源。如果使用官方 Nginx 或第三方编译版本,可确认模块是否存在:
nginx -V 2>&1 | grep brotli
配置示例:
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml;
如果环境不支持 Brotli,也不必强行编译,Gzip 已经能带来明显收益。
6. 配置静态资源缓存
对于图片、CSS、JS、字体等静态资源,应设置较长缓存时间:
location ~* \.(jpg|jpeg|png|gif|webp|svg|ico|css|js|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
access_log off;
}
这样浏览器再次访问时会直接使用本地缓存,减少请求和带宽消耗。
需要注意,如果静态资源设置了长期缓存,文件更新时应通过文件名版本号解决,例如:
app.20240601.css
app.a8f3d2.js
或者使用构建工具生成 hash 文件名。
7. 启用 sendfile 与 tcp_nopush
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
说明:
sendfile on可以提高静态文件传输效率;tcp_nopush on有助于减少网络包数量;tcp_nodelay on对动态响应延迟有帮助;server_tokens off可隐藏 Nginx 版本信息。
五、PHP-FPM 优化:避免进程过多或过少
如果网站使用 PHP,PHP-FPM 配置非常关键。很多网站慢,并不是 Nginx 慢,而是 PHP-FPM 进程数不合理。
配置文件通常位于:
/etc/php/8.2/fpm/pool.d/www.conf
不同 PHP 版本路径可能不同。
1. 选择合适的进程管理模式
常见配置:
pm = dynamic
生产环境推荐使用 dynamic 或 ondemand。
dynamic:适合访问量较稳定的网站;ondemand:适合低访问量、节省内存的网站;static:适合高并发且资源充足的场景。
2. 计算 PHP-FPM 最大进程数
先查看单个 PHP-FPM 进程平均内存:
ps -ylC php-fpm8.2 --sort:rss
或者:
ps aux | grep php-fpm
假设单个 PHP-FPM 子进程平均占用 80MB,服务器 4GB 内存,扣除系统、Nginx、MySQL、Redis 等占用后,留给 PHP 的内存约 1.5GB,则:
1500MB / 80MB ≈ 18
可以设置:
pm.max_children = 18
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 500
pm.max_requests 可以防止 PHP 进程因内存泄漏长期运行导致占用越来越高。
3. 开启 PHP OPcache
OPcache 对 PHP 性能提升非常明显,几乎是生产环境必开项。
安装:
apt install php8.2-opcache -y
配置文件可能位于:
/etc/php/8.2/fpm/conf.d/10-opcache.ini
推荐配置:
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.fast_shutdown=1
如果是发布流程规范、代码不会直接在线修改的生产环境,可以考虑:
opcache.validate_timestamps=0
这样性能更好,但每次发布后必须重启 PHP-FPM:
systemctl restart php8.2-fpm
4. 调整 PHP 超时与上传限制
max_execution_time = 30
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 32M
不建议把 max_execution_time 设置得过大,否则慢请求会长期占用 PHP-FPM 进程,导致正常请求排队。
六、数据库优化:减少慢查询才是核心
网站变慢,数据库往往是最常见瓶颈。尤其是 WordPress 插件多、Laravel 查询复杂、后台统计报表频繁扫描大表时,数据库压力会迅速升高。
1. 开启慢查询日志
MariaDB / MySQL 配置文件通常在:
/etc/mysql/mariadb.conf.d/50-server.cnf
或者:
/etc/mysql/mysql.conf.d/mysqld.cnf
添加:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 0
重启数据库:
systemctl restart mariadb
查看慢查询:
tail -f /var/log/mysql/slow.log
慢查询日志是优化数据库的关键依据,不要只凭感觉加参数。
2. 为高频查询添加索引
例如某张文章表经常执行:
SELECT * FROM posts WHERE status = 1 ORDER BY created_at DESC LIMIT 10;
可以考虑添加联合索引:
ALTER TABLE posts ADD INDEX idx_status_created_at (status, created_at);
注意:索引不是越多越好。索引会提升查询速度,但也会增加写入成本和磁盘占用。
3. 检查执行计划
EXPLAIN SELECT * FROM posts WHERE status = 1 ORDER BY created_at DESC LIMIT 10;
重点关注:
type是否为ALL;key是否使用了索引;rows扫描行数是否过大;- 是否出现
Using filesort、Using temporary。
4. 调整 InnoDB Buffer Pool
如果数据库主要使用 InnoDB,innodb_buffer_pool_size 非常关键。它用于缓存数据和索引。
对于 4GB 内存服务器,如果数据库和 Web 服务在同一台机器上,可以设置为 1GB 左右:
innodb_buffer_pool_size = 1G
如果是独立数据库服务器,可以设置为物理内存的 60% - 70%。
5. 优化连接数
max_connections = 200
连接数不是越大越好。过大的连接数可能导致内存被耗尽。更好的方式是:
- 减少不必要的数据库连接;
- 使用连接池;
- 使用页面缓存;
- 使用 Redis 缓存热点数据;
- 优化慢查询。
6. 定期清理无用数据
很多生产网站变慢,是因为数据库中累积了大量日志、临时数据、历史记录。
例如:
- WordPress 修订版本;
- 登录日志;
- 操作日志;
- 过期 Session;
- 队列失败记录;
- 临时统计表。
定期清理这些数据,可以降低数据库体积,提高查询效率。
七、Redis 缓存:降低数据库压力
Redis 是提升动态网站速度的重要组件。它适合缓存:
- 页面 HTML;
- 用户 Session;
- 热门文章;
- 配置信息;
- 数据库查询结果;
- 排行榜、计数器等。
1. 安装 Redis
apt install redis-server -y
systemctl enable redis-server
systemctl start redis-server
测试:
redis-cli ping
返回:
PONG
说明 Redis 正常运行。
2. 设置 Redis 内存上限
编辑:
vim /etc/redis/redis.conf
添加或修改:
maxmemory 512mb
maxmemory-policy allkeys-lru
说明:
maxmemory限制 Redis 最大内存;allkeys-lru表示内存不足时淘汰最近最少使用的 key。
如果 Redis 不限制内存,极端情况下可能吃光服务器内存。
3. 使用对象缓存
对于 WordPress,可以使用 Redis Object Cache 插件;对于 Laravel,可以配置:
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
Laravel 中常见缓存示例:
$posts = Cache::remember('home_posts', 300, function () {
return Post::where('status', 1)
->orderByDesc('created_at')
->limit(10)
->get();
});
这样 5 分钟内重复访问首页文章列表,就不会每次都查询数据库。
八、页面缓存:动态网站提速最明显
对于内容型网站,页面缓存通常是最有效的优化方式之一。因为它可以绕过 PHP 和数据库,直接由 Nginx 返回静态 HTML。
1. Nginx FastCGI Cache
在 http 块中配置:
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=PHP_CACHE:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
在 PHP location 中添加:
set $skip_cache 0;
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
if ($http_cookie ~* "wordpress_logged_in|comment_author|PHPSESSID") {
set $skip_cache 1;
}
fastcgi_cache PHP_CACHE;
fastcgi_cache_valid 200 301 302 10m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
访问页面后查看响应头:
curl -I https://example.com
如果看到:
X-FastCGI-Cache: HIT
说明缓存命中。
2. 页面缓存适用场景
适合:
- 博客;
- 企业官网;
- 新闻站;
- 文档站;
- 内容展示型网站;
- 访问多、更新不频繁的页面。
不适合直接缓存:
- 用户中心;
- 购物车;
- 支付页面;
- 后台管理;
- 个性化推荐页面。
页面缓存要特别注意登录态和 Cookie,否则可能出现用户数据串页的问题。
九、HTTPS 优化:减少握手成本
现代网站基本都会启用 HTTPS。HTTPS 本身不是性能瓶颈,但配置不合理会增加延迟。
1. 启用 HTTP/2
Nginx 配置:
server {
listen 443 ssl http2;
server_name example.com;
}
HTTP/2 可以复用连接,减少多个静态资源请求带来的开销。
如果使用新版本 Nginx,语法可能建议改为:
listen 443 ssl;
http2 on;
根据实际版本选择即可。
2. 开启 SSL Session Cache
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
SSL Session Cache 可以减少重复握手成本。
3. 使用合理的 TLS 协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
不要再启用 TLSv1.0、TLSv1.1,这些协议已经不适合生产环境。
十、系统内核参数优化
Debian 默认配置偏通用,并不一定适合高并发 Web 服务。可以适当调整内核参数。
编辑:
vim /etc/sysctl.conf
添加:
fs.file-max = 1000000
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5
应用:
sysctl -p
说明:
somaxconn提高监听队列;tcp_max_syn_backlog提高半连接队列;tcp_fin_timeout缩短 FIN-WAIT 时间;ip_local_port_range增加本地端口范围;tcp_tw_reuse有助于复用 TIME-WAIT 连接。
生产环境修改内核参数要谨慎,建议记录修改前后的效果,并保留回滚方案。
十一、图片与前端资源优化
很多时候,后端已经很快,但页面还是慢,原因是前端资源太大。
1. 图片压缩
建议:
- JPG 用于照片;
- PNG 用于透明图;
- SVG 用于图标;
- WebP 用于现代浏览器;
- 尽量避免上传原始大图。
安装图片处理工具:
apt install webp jpegoptim optipng -y
转换 WebP:
cwebp input.jpg -q 80 -o output.webp
压缩 JPG:
jpegoptim --max=80 image.jpg
压缩 PNG:
optipng image.png
2. 使用懒加载
图片较多的页面应启用懒加载:

这样首屏之外的图片不会立即加载。
3. 合并与压缩 CSS/JS
生产环境应使用构建工具压缩资源:
- CSS 压缩;
- JS 压缩;
- Tree Shaking;
- 删除无用代码;
- 使用版本 hash;
- 避免加载过多第三方脚本。
第三方统计、客服、广告脚本非常容易拖慢页面,应尽量异步加载。
十二、CDN:把静态资源放到离用户更近的地方
如果用户分布在不同地区,仅靠单台 Debian 服务器很难保证所有用户都快。CDN 可以显著改善静态资源访问速度。
适合放 CDN 的资源:
- 图片;
- CSS;
- JS;
- 字体;
- 视频;
- 下载文件;
- 可缓存的 HTML 页面。
CDN 优化重点:
- 设置合理缓存时间;
- 开启 Gzip/Brotli;
- 开启 HTTP/2 或 HTTP/3;
- 使用 HTTPS;
- 配置回源 Host;
- 避免频繁刷新全站缓存;
- 区分动态接口和静态资源。
对于生产环境,建议至少将图片、CSS、JS 放到 CDN,尤其是面向全国或全球用户的网站。
十三、日志优化:避免磁盘被日志拖慢
访问量较高的网站,如果日志写入过多,也会增加磁盘 IO。
1. 关闭静态资源访问日志
前面已经提到:
access_log off;
可以只在静态资源 location 中关闭,动态请求仍保留日志用于排查问题。
2. 配置日志轮转
Debian 通常使用 logrotate。检查 Nginx 日志轮转:
cat /etc/logrotate.d/nginx
确保日志不会无限增长。
3. 慢日志分离
建议保留:
- Nginx access log;
- Nginx error log;
- PHP-FPM slow log;
- MySQL slow query log。
但不要把所有 debug 日志长期写入生产环境。
PHP-FPM 慢日志配置示例:
request_slowlog_timeout = 3s
slowlog = /var/log/php8.2-fpm-slow.log
这样可以定位执行超过 3 秒的 PHP 请求。
十四、监控与压测:用数据验证优化效果
优化不是改完配置就结束,必须用数据验证。
1. 使用 ab 简单压测
安装:
apt install apache2-utils -y
测试:
ab -n 1000 -c 50 https://example.com/
关注:
- Requests per second;
- Time per request;
- Failed requests;
- 95% 响应时间;
- CPU、内存、数据库是否异常。
2. 使用 wrk 压测
apt install wrk -y
测试:
wrk -t4 -c100 -d30s https://example.com/
wrk 更适合做高并发压测。
3. 生产环境压测注意事项
不要在业务高峰期压测,不要直接对核心支付、下单接口压测。压测前应:
- 通知相关人员;
- 做好监控;
- 设置压测上限;
- 准备回滚方案;
- 避免影响真实用户。
4. 推荐监控指标
至少应监控:
- CPU 使用率;
- 内存 available;
- Swap 使用量;
- 磁盘 IO;
- 磁盘空间;
- Nginx 5xx;
- PHP-FPM active processes;
- MySQL QPS;
- MySQL 慢查询;
- Redis 内存;
- 页面响应时间;
- HTTPS 证书有效期。
十五、一次生产环境优化案例
某内容型网站运行在 Debian 12,配置为 2 核 4GB,使用 Nginx、PHP-FPM、MariaDB。优化前首页打开约 3 秒,高峰期偶发 502,后台数据库 CPU 较高。
优化前发现的问题
- PHP OPcache 未开启;
- Nginx 静态资源没有设置缓存;
- 图片大量使用原始 JPG,单张超过 2MB;
- MySQL 存在多个慢查询;
- 首页每次请求都会查询数据库 100 多次;
- PHP-FPM
pm.max_children设置过高,内存吃紧; - Redis 已安装但应用没有使用;
- 访问日志中静态资源写入量过大。
优化措施
- 开启 PHP OPcache;
- 调整 PHP-FPM 进程数;
- 开启 Nginx Gzip;
- 设置静态资源浏览器缓存;
- 将图片批量转为 WebP;
- 为文章表、分类表添加联合索引;
- 使用 Redis 缓存首页数据;
- 对首页启用 FastCGI Cache;
- 关闭静态资源 access log;
- 调整 MySQL InnoDB Buffer Pool;
- 增加 PHP-FPM 慢日志和 MySQL 慢查询日志。
优化后效果
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 首页 TTFB | 900ms 左右 | 120ms 左右 |
| 首页完整加载 | 3s 左右 | 1.1s 左右 |
| 数据库查询次数 | 100+ | 10 以下 |
| 高峰期 502 | 偶发 | 基本消失 |
| 图片总大小 | 8MB+ | 2MB 左右 |
| CPU 峰值 | 90%+ | 40% - 60% |
| 内存 Swap | 偶发使用 | 基本不用 |
这个案例说明:对于中小型网站,很多性能问题并不需要立刻升级服务器,而是先把缓存、数据库、PHP-FPM、Nginx 和前端资源优化到位。
十六、生产环境优化 checklist
可以按照以下清单逐项检查:
系统层
- [ ] Debian 是否为较新稳定版本;
- [ ] 系统是否定期安全更新;
- [ ] 文件描述符是否足够;
- [ ] Swap 是否频繁使用;
- [ ] 磁盘 IO 是否正常;
- [ ] 内核网络参数是否合理。
Nginx 层
- [ ]
worker_processes auto; - [ ]
worker_connections已调整; - [ ] 开启 Gzip 或 Brotli;
- [ ] 静态资源设置缓存;
- [ ] 开启 HTTP/2;
- [ ] 关闭不必要的 access log;
- [ ] 配置合理的 HTTPS 参数。
PHP 层
- [ ] OPcache 已开启;
- [ ] PHP-FPM 进程数合理;
- [ ] 慢日志已开启;
- [ ] 超时时间不过长;
- [ ] 内存限制合理。
数据库层
- [ ] 开启慢查询日志;
- [ ] 高频查询已有索引;
- [ ] 大表查询避免全表扫描;
- [ ] InnoDB Buffer Pool 合理;
- [ ] 无用日志和临时数据定期清理。
缓存层
- [ ] Redis 已限制最大内存;
- [ ] 热点数据使用缓存;
- [ ] 页面缓存策略合理;
- [ ] 登录用户和动态页面避免误缓存;
- [ ] 缓存失效机制明确。
前端层
- [ ] 图片已压缩;
- [ ] 使用 WebP;
- [ ] CSS/JS 已压缩;
- [ ] 图片懒加载;
- [ ] 第三方脚本异步加载;
- [ ] 静态资源使用 CDN。
十七、常见误区
1. 只升级服务器,不优化代码和数据库
升级服务器可以短期缓解问题,但如果慢查询、无缓存、资源过大等问题不解决,流量一上来仍然会慢。
2. PHP-FPM 进程数越大越好
进程数过多会导致内存耗尽,甚至触发 Swap,网站反而更慢。应该根据单个进程内存占用和服务器可用内存计算。
3. 索引越多越好
索引会提升查询,但也会影响写入。应根据慢查询和执行计划添加索引。
4. 缓存所有页面
用户中心、购物车、订单页面等涉及用户隐私和实时状态的页面,不能简单做全页缓存。
5. 压缩等级越高越好
Gzip/Brotli 压缩等级越高,CPU 消耗越大。生产环境应选择合适平衡点。
十八、总结
在 Debian 上提高网站速度,核心不是某一个“神奇参数”,而是围绕完整链路做系统优化:
- 先定位瓶颈:CPU、内存、IO、数据库、网络、前端逐项排查;
- 优化 Nginx:提升并发能力,开启压缩和静态缓存;
- 优化 PHP-FPM:合理设置进程数,开启 OPcache;
- 优化数据库:开启慢查询日志,添加索引,减少全表扫描;
- 使用 Redis 和页面缓存:降低数据库和 PHP 压力;
- 优化图片与前端资源:减少页面体积;
- 启用 HTTP/2、HTTPS 会话缓存和 CDN;
- 持续监控和压测:用数据验证效果。
生产环境优化最重要的是稳妥。每次只改一类配置,记录修改前后的指标,确认有效后再继续下一步。对于大多数中小型网站来说,只要按照本文的方法逐步优化,即使不更换服务器,也能获得明显的网站速度提升。