上一篇 下一篇 分享链接 返回 返回顶部

Debian 网站提速实战:一台 2 核 4G 服务器的生产环境优化记录

发布人:慈云数据-客服中心 发布时间:11小时前 阅读量:4

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 万

优化前常见问题包括:

  1. 首页加载时间较长;
  2. 静态资源未压缩,图片体积较大;
  3. Nginx 并发能力没有充分发挥;
  4. PHP-FPM 进程配置不合理;
  5. 数据库慢查询较多;
  6. 页面没有缓存,每次请求都访问数据库;
  7. HTTPS 握手成本较高;
  8. 服务器系统参数保持默认值;
  9. 缺少监控,不知道瓶颈在哪里。

经过多轮优化后,通常可以看到以下改善:

指标 优化前 优化后
首页首字节时间 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-WAITCLOSE-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

生产环境推荐使用 dynamicondemand

  • 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 filesortUsing 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 优化重点:

  1. 设置合理缓存时间;
  2. 开启 Gzip/Brotli;
  3. 开启 HTTP/2 或 HTTP/3;
  4. 使用 HTTPS;
  5. 配置回源 Host;
  6. 避免频繁刷新全站缓存;
  7. 区分动态接口和静态资源。

对于生产环境,建议至少将图片、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. 生产环境压测注意事项

不要在业务高峰期压测,不要直接对核心支付、下单接口压测。压测前应:

  1. 通知相关人员;
  2. 做好监控;
  3. 设置压测上限;
  4. 准备回滚方案;
  5. 避免影响真实用户。

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 较高。

优化前发现的问题

  1. PHP OPcache 未开启;
  2. Nginx 静态资源没有设置缓存;
  3. 图片大量使用原始 JPG,单张超过 2MB;
  4. MySQL 存在多个慢查询;
  5. 首页每次请求都会查询数据库 100 多次;
  6. PHP-FPM pm.max_children 设置过高,内存吃紧;
  7. Redis 已安装但应用没有使用;
  8. 访问日志中静态资源写入量过大。

优化措施

  1. 开启 PHP OPcache;
  2. 调整 PHP-FPM 进程数;
  3. 开启 Nginx Gzip;
  4. 设置静态资源浏览器缓存;
  5. 将图片批量转为 WebP;
  6. 为文章表、分类表添加联合索引;
  7. 使用 Redis 缓存首页数据;
  8. 对首页启用 FastCGI Cache;
  9. 关闭静态资源 access log;
  10. 调整 MySQL InnoDB Buffer Pool;
  11. 增加 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 上提高网站速度,核心不是某一个“神奇参数”,而是围绕完整链路做系统优化:

  1. 先定位瓶颈:CPU、内存、IO、数据库、网络、前端逐项排查;
  2. 优化 Nginx:提升并发能力,开启压缩和静态缓存;
  3. 优化 PHP-FPM:合理设置进程数,开启 OPcache;
  4. 优化数据库:开启慢查询日志,添加索引,减少全表扫描;
  5. 使用 Redis 和页面缓存:降低数据库和 PHP 压力;
  6. 优化图片与前端资源:减少页面体积;
  7. 启用 HTTP/2、HTTPS 会话缓存和 CDN
  8. 持续监控和压测:用数据验证效果。

生产环境优化最重要的是稳妥。每次只改一类配置,记录修改前后的指标,确认有效后再继续下一步。对于大多数中小型网站来说,只要按照本文的方法逐步优化,即使不更换服务器,也能获得明显的网站速度提升。

目录结构
全文