Nginx性能优化:Gzip/缓存/HTTP2


搬瓦工VPS的硬件资源有限,合理优化Nginx配置可以显著提升网站性能。本文从Gzip压缩、代理缓存、HTTP/2协议和静态资源优化四个方面,介绍实用的Nginx性能调优方案。

Gzip压缩配置

Gzip压缩能大幅减小传输数据量,文本类资源通常可压缩60%-80%。编辑Nginx主配置文件:

sudo nano /etc/nginx/nginx.conf

http 块中添加Gzip配置:

http {
    # 开启Gzip压缩
    gzip on;

    # 最小压缩文件大小(小于1KB的文件不压缩)
    gzip_min_length 1024;

    # 压缩级别(1-9,推荐4-6,越高CPU消耗越大)
    gzip_comp_level 5;

    # 需要压缩的MIME类型
    gzip_types
        text/plain
        text/css
        text/javascript
        text/xml
        application/json
        application/javascript
        application/xml
        application/xml+rss
        application/atom+xml
        image/svg+xml;

    # 在响应头中添加Vary: Accept-Encoding
    gzip_vary on;

    # 对代理请求也启用压缩
    gzip_proxied any;

    # 压缩使用的缓冲区
    gzip_buffers 16 8k;

    # HTTP版本要求
    gzip_http_version 1.1;

    # 禁止对IE6压缩(兼容性考虑)
    gzip_disable "MSIE [1-6]\.";
}

验证Gzip是否生效:

curl -H "Accept-Encoding: gzip" -I https://example.com

# 响应头中应包含:
# Content-Encoding: gzip
Tip: 图片(JPEG/PNG/WebP)和已压缩的文件不要开启Gzip,它们本身已经压缩过,再次压缩反而浪费CPU。

静态资源缓存

通过设置浏览器缓存头,让客户端缓存静态资源,减少重复请求:

server {
    listen 443 ssl;
    server_name example.com;

    # 图片缓存30天
    location ~* \.(jpg|jpeg|png|gif|ico|webp|svg)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # CSS和JS缓存7天
    location ~* \.(css|js)$ {
        expires 7d;
        add_header Cache-Control "public";
        access_log off;
    }

    # 字体文件缓存1年
    location ~* \.(woff|woff2|ttf|eot)$ {
        expires 365d;
        add_header Cache-Control "public, immutable";
        access_log off;
    }
}

Proxy Cache代理缓存

当Nginx作为反向代理时,可以将后端响应缓存到本地磁盘,减少对后端的请求压力:

# 在http块中定义缓存区域
http {
    proxy_cache_path /var/cache/nginx levels=1:2
        keys_zone=my_cache:10m
        max_size=1g
        inactive=60m
        use_temp_path=off;
}

server {
    listen 443 ssl;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        # 启用缓存
        proxy_cache my_cache;

        # 缓存有效期
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;

        # 缓存Key
        proxy_cache_key "$scheme$request_method$host$request_uri";

        # 响应头中添加缓存状态(HIT/MISS/BYPASS)
        add_header X-Cache-Status $upstream_cache_status;

        # 后端故障时使用过期缓存
        proxy_cache_use_stale error timeout http_500 http_502 http_503;

        # 只允许一个请求回源,其他等待缓存
        proxy_cache_lock on;
    }

    # API接口不缓存
    location /api/ {
        proxy_pass http://127.0.0.1:3000;
        proxy_cache off;
        proxy_no_cache 1;
    }
}

参数说明:

启用HTTP/2

HTTP/2协议支持多路复用、头部压缩和服务器推送,能显著提升页面加载速度。Nginx启用HTTP/2非常简单:

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

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

    # HTTP/2相关优化
    http2_max_concurrent_streams 128;

    location / {
        root /var/www/example.com;
        index index.html;
    }
}

HTTP/2要求HTTPS,因此必须先配置好SSL证书。验证HTTP/2是否生效:

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

# 响应中应包含 HTTP/2 200

Worker进程和连接优化

根据VPS的CPU核心数和内存调整Nginx的Worker配置:

# 查看CPU核心数
nproc

# 编辑nginx.conf
worker_processes auto;  # 自动匹配CPU核心数

events {
    worker_connections 1024;    # 每个Worker的最大连接数
    multi_accept on;            # 一次接受多个新连接
    use epoll;                  # Linux高效事件模型
}

http {
    # 开启sendfile零拷贝
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    # 长连接超时
    keepalive_timeout 65;
    keepalive_requests 100;

    # 文件类型哈希表
    types_hash_max_size 2048;

    # 请求体大小限制
    client_max_body_size 50m;
    client_body_buffer_size 128k;
}

搬瓦工VPS通常是1-2个CPU核心,worker_processes auto 会自动适配。worker_connections 设置为1024对于小型站点足够,大流量站点可增加到4096。

开启Brotli压缩(可选)

Brotli是比Gzip更高效的压缩算法,压缩率高15%-20%。需要编译安装Nginx Brotli模块:

# 安装编译依赖
sudo apt install git build-essential libpcre3-dev zlib1g-dev libssl-dev -y

# 克隆Brotli模块
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init

# 查看当前Nginx编译参数
nginx -V

# 下载对应版本Nginx源码并编译添加模块
# --add-dynamic-module=/path/to/ngx_brotli

编译安装后,在配置中启用:

http {
    brotli on;
    brotli_comp_level 6;
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
}

性能监控

启用Nginx状态监控页面,实时查看连接和请求数据:

server {
    listen 8080;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        allow 127.0.0.1;
        deny all;
    }
}

# 查看状态
curl http://127.0.0.1:8080/nginx_status

# 输出示例:
# Active connections: 5
# server accepts handled requests
#  1234 1234 5678
# Reading: 0 Writing: 2 Waiting: 3
Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程