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

Debian 网站提速实战:Nginx、PHP-FPM、缓存与数据库配置一次讲清

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

Debian 如何提高网站速度|附配置文件

在生产环境中,Debian 是非常常见的服务器操作系统。它稳定、安全、软件生态成熟,非常适合部署 WordPress、Typecho、Laravel、ThinkPHP、Django、静态站点以及各类企业官网。不过,很多网站刚部署完成时速度并不理想,常见问题包括:首屏打开慢、静态资源加载慢、并发稍高就卡顿、PHP 响应时间长、数据库查询慢、图片体积过大等。

本文将以 Debian 11 / Debian 12 为基础,介绍一套较为通用的网站加速方案,并附上常用配置文件示例。无论你使用的是 Nginx + PHP-FPM,还是 Nginx 反向代理 Node.js、Java、Python 应用,都可以从中选取适合自己的优化项。


一、网站速度慢的常见原因

在优化之前,需要先明确网站慢通常不是单一原因造成的,而是多个环节共同影响。

常见瓶颈包括:

  1. 服务器配置不足
    CPU、内存、磁盘 I/O、带宽不足都会导致访问慢。

  2. Web 服务配置不合理
    Nginx worker 数量、连接数、缓存策略、压缩配置不合适。

  3. PHP-FPM 配置不合理
    PHP 进程数过少会排队,过多又会耗尽内存。

  4. 数据库性能差
    MySQL / MariaDB 没有缓存、索引不合理、慢查询过多。

  5. 静态资源未压缩
    CSS、JS、HTML、图片未压缩,导致传输体积大。

  6. 没有浏览器缓存
    每次访问都重新请求图片、CSS、JS,浪费带宽。

  7. 未启用 HTTP/2 或 HTTPS 配置不佳
    现代浏览器对 HTTP/2 支持很好,可以显著改善多资源加载性能。

  8. 应用程序本身效率低
    插件过多、模板复杂、接口设计不合理、没有页面缓存。

优化网站速度,需要从系统层、Web 服务层、语言运行环境、数据库、缓存、前端资源等多个方面入手。


二、升级系统并安装基础工具

首先更新 Debian 系统软件包:

sudo apt update
sudo apt upgrade -y

安装常用工具:

sudo apt install -y curl wget vim unzip htop net-tools lsof socat ca-certificates gnupg

如果你需要查看磁盘 I/O 和系统负载,也可以安装:

sudo apt install -y sysstat iotop iftop

查看服务器负载:

top

或使用更直观的:

htop

查看内存:

free -h

查看磁盘:

df -h

查看网络连接:

ss -antp

三、Nginx 加速配置

Nginx 是 Debian 上非常常用的高性能 Web 服务器。合理配置 Nginx 可以明显提升网站并发能力和静态资源响应速度。

安装 Nginx:

sudo apt install -y nginx

查看 Nginx 版本:

nginx -v

编辑主配置文件:

sudo vim /etc/nginx/nginx.conf

1. Nginx 主配置示例

下面是一份适合大多数中小型网站的基础优化配置:

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 4096;
    multi_accept on;
    use epoll;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 65;
    keepalive_requests 1000;

    types_hash_max_size 2048;
    server_tokens off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    client_max_body_size 50m;
    client_body_buffer_size 128k;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log warn;

    gzip on;
    gzip_comp_level 5;
    gzip_min_length 1024;
    gzip_vary on;
    gzip_proxied any;
    gzip_disable "msie6";
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/atom+xml
        image/svg+xml
        font/ttf
        font/otf
        application/vnd.ms-fontobject;

    open_file_cache max=10000 inactive=60s;
    open_file_cache_valid 120s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

配置说明:

  • worker_processes auto:自动根据 CPU 核心数设置进程数。
  • worker_connections 4096:每个 worker 可处理的连接数。
  • sendfile on:提升静态文件传输效率。
  • tcp_nopush on:配合 sendfile,提高大文件传输效率。
  • tcp_nodelay on:降低小包延迟。
  • gzip on:启用 Gzip 压缩。
  • open_file_cache:缓存文件句柄,减少磁盘访问。

修改后检查配置:

sudo nginx -t

重载 Nginx:

sudo systemctl reload nginx

四、站点配置文件优化

假设网站目录为:

/var/www/example.com

域名为:

example.com

创建站点配置:

sudo vim /etc/nginx/sites-available/example.com.conf

1. 静态站点配置示例

如果你的网站是纯 HTML、CSS、JS 静态网站,可以使用下面配置:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html index.htm;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000, immutable";
        access_log off;
    }

    location ~* \.(html)$ {
        expires 10m;
        add_header Cache-Control "public, max-age=600";
    }

    gzip_static on;
}

启用站点:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

五、Nginx + PHP-FPM 配置优化

如果你运行 WordPress、Typecho、Laravel、ThinkPHP 等 PHP 网站,需要安装 PHP-FPM。

以 Debian 12 为例:

sudo apt install -y php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip php-opcache

查看 PHP-FPM 版本:

php -v

假设 PHP 版本为 8.2,配置文件通常在:

/etc/php/8.2/fpm/php.ini
/etc/php/8.2/fpm/pool.d/www.conf

1. PHP 站点 Nginx 配置示例

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html index.htm;

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000, immutable";
        access_log off;
        try_files $uri =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;

        fastcgi_connect_timeout 60s;
        fastcgi_send_timeout 120s;
        fastcgi_read_timeout 120s;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ /\. {
        deny all;
    }
}

检查并重载:

sudo nginx -t
sudo systemctl reload nginx

六、优化 PHP-FPM 进程池

编辑 PHP-FPM 池配置:

sudo vim /etc/php/8.2/fpm/pool.d/www.conf

找到以下内容进行调整:

[www]
user = www-data
group = www-data

listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 30
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 10
pm.max_requests = 500

参数说明

  • pm = dynamic:动态管理 PHP 子进程,适合大多数站点。
  • pm.max_children:最大 PHP 子进程数,决定 PHP 并发能力。
  • pm.start_servers:启动时创建的进程数。
  • pm.min_spare_servers:最小空闲进程数。
  • pm.max_spare_servers:最大空闲进程数。
  • pm.max_requests:每个进程处理多少请求后重启,有助于释放内存。

如何计算 pm.max_children?

可以用以下公式估算:

pm.max_children = 可用于 PHP 的内存 / 单个 PHP 进程平均内存

例如服务器有 2GB 内存,预留 700MB 给系统、Nginx、数据库,剩下 1300MB 给 PHP。单个 PHP 进程平均占用 50MB:

1300 / 50 = 26

因此 pm.max_children 可以设置为 25 左右。

修改完成后重启 PHP-FPM:

sudo systemctl restart php8.2-fpm

查看状态:

sudo systemctl status php8.2-fpm

七、开启 PHP OPcache

OPcache 可以缓存 PHP 字节码,减少 PHP 每次请求都重新解析脚本的开销,是 PHP 网站必开的优化项。

编辑配置:

sudo vim /etc/php/8.2/fpm/php.ini

加入或修改以下参数:

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.validate_timestamps=1
opcache.save_comments=1
opcache.fast_shutdown=1

如果是生产环境,代码不频繁更新,也可以设置:

opcache.revalidate_freq=300

修改后重启:

sudo systemctl restart php8.2-fpm

OPcache 对 WordPress、Laravel、Discuz、Typecho 等 PHP 程序都有明显提升。


八、启用 HTTPS 和 HTTP/2

HTTPS 不仅更安全,而且现代浏览器会对 HTTPS 连接启用更多优化特性。Nginx 在 HTTPS 下可以使用 HTTP/2,提高多资源加载效率。

安装 Certbot:

sudo apt install -y certbot python3-certbot-nginx

申请证书:

sudo certbot --nginx -d example.com -d www.example.com

证书申请完成后,可以将站点配置调整为:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000, immutable";
        access_log off;
        try_files $uri =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    location ~ /\. {
        deny all;
    }
}

检查自动续期:

sudo certbot renew --dry-run

九、启用 Brotli 或 Gzip 压缩

Gzip 已经能满足大部分场景。如果你追求更高压缩率,可以考虑 Brotli。Debian 默认仓库中的 Nginx 不一定自带 Brotli 模块,因此通用方案建议先启用 Gzip。

如果使用支持 Brotli 的 Nginx,可以增加:

brotli on;
brotli_comp_level 5;
brotli_min_length 1024;
brotli_types
    text/plain
    text/css
    application/javascript
    application/json
    application/xml
    image/svg+xml;

Gzip 与 Brotli 的区别:

  • Gzip 兼容性最好,部署简单。
  • Brotli 压缩率更高,尤其适合 CSS、JS、HTML。
  • 对动态内容压缩等级不宜设置过高,否则会增加 CPU 压力。

一般建议:

  • 动态压缩等级:4~6。
  • 静态资源可在构建阶段预压缩。
  • 图片、视频、压缩包不要重复压缩,收益很小。

十、配置浏览器缓存

浏览器缓存是网站加速中非常重要的一环。对于图片、字体、CSS、JS 等静态资源,应设置较长缓存时间。

Nginx 配置示例:

location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
    expires 30d;
    add_header Cache-Control "public, max-age=2592000, immutable";
    access_log off;
}

如果你的 CSS、JS 文件名带有版本号或 hash,例如:

app.8f3a2c.js
style.91ab2.css

可以设置更长缓存:

expires 365d;
add_header Cache-Control "public, max-age=31536000, immutable";

如果文件名不带版本号,不建议设置过长,否则更新后用户可能仍然加载旧文件。


十一、配置 FastCGI 缓存提升 PHP 页面速度

对于 WordPress、Typecho 等动态网站,FastCGI 缓存可以将动态页面缓存成静态结果,大幅减少 PHP 和数据库压力。

/etc/nginx/nginx.confhttp 块中加入:

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";
fastcgi_cache_use_stale error timeout invalid_header http_500 http_503;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

创建缓存目录:

sudo mkdir -p /var/cache/nginx/fastcgi
sudo chown -R www-data:www-data /var/cache/nginx

站点配置中加入:

set $skip_cache 0;

if ($request_method = POST) {
    set $skip_cache 1;
}

if ($query_string != "") {
    set $skip_cache 1;
}

if ($request_uri ~* "/wp-admin/|/wp-login.php|/cart|/checkout|/my-account") {
    set $skip_cache 1;
}

if ($http_cookie ~* "wordpress_logged_in|comment_author|woocommerce_items_in_cart") {
    set $skip_cache 1;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;

    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;
}

然后测试:

sudo nginx -t
sudo systemctl reload nginx

访问网站后查看响应头,如果看到:

X-FastCGI-Cache: HIT

说明缓存命中。

需要注意:带登录状态、购物车、用户中心、后台页面不要缓存,否则可能出现用户数据混乱。


十二、MariaDB / MySQL 优化

很多动态网站慢,根源在数据库。安装 MariaDB:

sudo apt install -y mariadb-server

执行安全初始化:

sudo mysql_secure_installation

编辑配置文件:

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

1. MariaDB 基础优化配置

[mysqld] 下添加或修改:

[mysqld]
bind-address = 127.0.0.1

max_connections = 200
thread_cache_size = 64

table_open_cache = 2048
table_definition_cache = 1024

tmp_table_size = 64M
max_heap_table_size = 64M

innodb_buffer_pool_size = 512M
innodb_buffer_pool_instances = 1
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

配置说明:

  • innodb_buffer_pool_size:InnoDB 最重要参数,一般设置为可用内存的 40%~70%。
  • max_connections:最大连接数,不要盲目设置过大。
  • slow_query_log:开启慢查询日志,便于找出耗时 SQL。
  • innodb_flush_log_at_trx_commit = 2:性能更好,但极端断电情况下可能丢失 1 秒事务,需根据业务选择。

重启 MariaDB:

sudo systemctl restart mariadb

查看慢查询日志:

sudo tail -f /var/log/mysql/slow.log

如果是小内存服务器,例如 1GB 内存,不建议将 innodb_buffer_pool_size 设置过大,可以设置为:

innodb_buffer_pool_size = 256M

如果是 4GB 内存服务器,数据库和 Web 在同一台机器上,可以考虑:

innodb_buffer_pool_size = 1G

十三、使用 Redis 缓存

Redis 常用于对象缓存、会话缓存、页面缓存队列等场景。对于 WordPress、Laravel 等程序,Redis 能有效降低数据库压力。

安装 Redis:

sudo apt install -y redis-server

编辑配置:

sudo vim /etc/redis/redis.conf

建议设置:

bind 127.0.0.1 ::1
protected-mode yes
supervised systemd

maxmemory 256mb
maxmemory-policy allkeys-lru

重启 Redis:

sudo systemctl restart redis-server

查看状态:

sudo systemctl status redis-server

测试:

redis-cli ping

返回:

PONG

说明 Redis 正常运行。

如果是 WordPress,可以安装 Redis Object Cache 插件,并在 wp-config.php 中加入:

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE', true);

Laravel 项目则可以在 .env 中设置:

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379

十四、Debian 系统内核参数优化

系统级优化可以提升高并发场景下的连接处理能力。

编辑:

sudo vim /etc/sysctl.conf

添加以下内容:

fs.file-max = 1000000

net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535

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 65000

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_fastopen = 3

应用配置:

sudo sysctl -p

需要注意,内核参数不是越大越好。对于普通网站,上述配置已经足够。若服务器承载的是金融、交易、订单等关键业务,建议在测试环境充分验证后再上线。


十五、提高文件描述符限制

高并发连接需要足够的文件描述符。查看当前限制:

ulimit -n

编辑:

sudo vim /etc/security/limits.conf

添加:

www-data soft nofile 65535
www-data hard nofile 65535
root soft nofile 65535
root hard nofile 65535

为 Nginx 添加 systemd 限制:

sudo systemctl edit nginx

加入:

[Service]
LimitNOFILE=65535

为 PHP-FPM 添加:

sudo systemctl edit php8.2-fpm

加入:

[Service]
LimitNOFILE=65535

重新加载 systemd:

sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm

十六、图片与前端资源优化

服务器配置优化很重要,但前端资源优化同样关键。很多网站打开慢,不是服务器性能差,而是页面图片过大、JS 太多、第三方脚本太慢。

建议:

  1. 图片使用 WebP 格式
    WebP 通常比 JPG、PNG 更小。

  2. 限制首屏图片大小
    首页 Banner 不应动辄几 MB。

  3. 启用懒加载
    非首屏图片滚动到可视区域再加载。

  4. 压缩 CSS 和 JS
    使用构建工具压缩资源。

  5. 减少第三方脚本
    统计、客服、广告、地图等第三方脚本可能严重拖慢页面。

  6. 使用 CDN
    对全国或全球用户访问的网站,CDN 提升非常明显。

如果是静态资源较多的网站,推荐将图片、CSS、JS 放到对象存储 + CDN,例如阿里云 OSS、腾讯云 COS、七牛云、Cloudflare R2 等。


十七、启用 CDN 加速

CDN 的核心作用是让用户从离自己更近的节点获取静态资源,减少跨地区访问延迟。

适合使用 CDN 的内容:

  • 图片
  • CSS
  • JS
  • 字体文件
  • 视频
  • 下载文件
  • 静态 HTML 页面

不建议随意缓存的内容:

  • 用户后台
  • 购物车
  • 支付页面
  • 会员中心
  • 个性化接口
  • 需要实时更新的数据接口

如果使用 Cloudflare,可以开启:

  • Brotli
  • HTTP/2
  • HTTP/3
  • Auto Minify
  • Cache Rules
  • TLS 1.3
  • Early Hints

如果使用国内 CDN,需要确保域名已备案,并合理设置缓存规则。


十八、使用日志定位性能问题

优化不能只靠猜,日志分析非常重要。

查看 Nginx 访问日志:

sudo tail -f /var/log/nginx/access.log

查看错误日志:

sudo tail -f /var/log/nginx/error.log

查看 PHP-FPM 日志:

sudo journalctl -u php8.2-fpm -f

查看 Nginx 请求耗时,可以自定义日志格式。在 /etc/nginx/nginx.confhttp 块中加入:

log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time uct=$upstream_connect_time '
                    'uht=$upstream_header_time urt=$upstream_response_time';

access_log /var/log/nginx/access.log main_ext;

重载:

sudo nginx -t
sudo systemctl reload nginx

这样可以通过日志看到请求总耗时和后端响应耗时。如果 request_time 很高,但 upstream_response_time 低,可能是网络或客户端问题;如果 upstream_response_time 高,通常说明 PHP、数据库或后端服务慢。


十九、常用检测命令

1. 测试网站响应头

curl -I https://example.com

重点查看:

cache-control
content-encoding
server
x-fastcgi-cache

2. 测试 HTTP/2

curl -I --http2 https://example.com

3. 查看 Nginx 连接

ss -antp | grep nginx

4. 查看 PHP-FPM 进程内存

ps -ylC php-fpm8.2 --sort:rss

或:

ps aux | grep php-fpm

5. 查看端口监听

sudo ss -lntp

6. 简单压力测试

安装 ApacheBench:

sudo apt install -y apache2-utils

测试:

ab -n 1000 -c 50 https://example.com/

参数说明:

  • -n 1000:总请求数 1000。
  • -c 50:并发 50。

注意:不要对不属于自己的服务器做压力测试。


二十、推荐优化顺序

如果你不知道从哪里开始,可以按照下面顺序执行:

  1. 启用 HTTPS + HTTP/2
  2. 开启 Gzip 或 Brotli
  3. 配置静态资源浏览器缓存
  4. 启用 PHP OPcache
  5. 调整 PHP-FPM 进程数
  6. 优化 MariaDB / MySQL
  7. 启用 Redis 对象缓存
  8. 启用 FastCGI 页面缓存
  9. 压缩图片和前端资源
  10. 接入 CDN
  11. 分析日志与慢查询
  12. 根据实际流量调整系统参数

不要一开始就盲目修改大量系统参数。对于大多数网站,真正提升明显的通常是:缓存、压缩、图片优化、数据库优化和 CDN。


二十一、完整 Nginx + PHP-FPM 优化站点配置

下面给出一份可直接参考的完整配置,适合普通 PHP 网站使用。

文件路径:

/etc/nginx/sites-available/example.com.conf

配置内容:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.php index.html index.htm;

    access_log /var/log/nginx/example.com.access.log main_ext;
    error_log /var/log/nginx/example.com.error.log warn;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    set $skip_cache 0;

    if ($request_method = POST) {
        set $skip_cache 1;
    }

    if ($query_string != "") {
        set $skip_cache 1;
    }

    if ($request_uri ~* "/wp-admin/|/wp-login.php|/admin|/user|/cart|/checkout") {
        set $skip_cache 1;
    }

    if ($http_cookie ~* "wordpress_logged_in|comment_author|woocommerce_items_in_cart") {
        set $skip_cache 1;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|css|js|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000, immutable";
        access_log off;
        try_files $uri =404;
    }

    location ~* \.(html)$ {
        expires 10m;
        add_header Cache-Control "public, max-age=600";
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;

        fastcgi_connect_timeout 60s;
        fastcgi_send_timeout 120s;
        fastcgi_read_timeout 120s;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 8 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;

        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;
    }

    location ~ /\. {
        deny all;
    }
}

启用:

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

二十二、总结

在 Debian 上提高网站速度,并不是简单安装一个插件或修改一个参数就能彻底解决,而是需要从多个层面进行系统优化。

最值得优先做的优化包括:

  • Nginx 开启 Gzip、HTTP/2、静态资源缓存;
  • PHP 网站启用 OPcache;
  • 合理调整 PHP-FPM 进程池;
  • MariaDB / MySQL 设置合适的 InnoDB 缓存;
  • 使用 Redis 缓存热点数据;
  • 对动态页面启用 FastCGI 缓存;
  • 压缩图片、减少 JS、优化前端资源;
  • 接入 CDN,降低跨地区访问延迟;
  • 使用日志和慢查询定位真正瓶颈。

对于中小型网站,一台 2 核 2GB 或 2 核 4GB 的 Debian 服务器,只要配置合理、缓存到位、图片不过大,完全可以支撑不错的访问量。真正的优化思路不是“把参数调到最大”,而是根据服务器资源、业务类型、访问量和日志数据,逐步调整并验证效果。

目录结构
全文