VPS上Nginx配置优化:Gzip压缩、缓存策略和并发连接调优

Gzip压缩、浏览器缓存、worker并发和Keep-Alive四项配置提升网站速度
发布于
2

Nginx默认配置能跑,但远不是最优——没有开启Gzip压缩浪费带宽、没有文件缓存每次请求都读磁盘、并发连接数默认只有512在高流量下不够用。花十分钟调几个关键参数,性能和用户体验有明显提升。

开启Gzip压缩——最直接的提速

网页的HTML/CSS/JS在传输前先压缩,浏览器收到后解压再渲染。压缩率通常50-70%——一个100KB的HTML压缩后只有30KB,用户下载快一倍。在nginx.conf的http块里加:

gzip on;
gzip_vary on;
gzip_comp_level 6;           # 1-9,6是性能和压缩率的最佳平衡
gzip_min_length 256;         # 小于256字节的文件不压缩(太小压缩反而慢)
gzip_types text/plain text/css text/javascript application/json application/javascript text/xml application/xml text/html;
# 不要压缩图片和视频——它们已经被压缩过了再压一次浪费CPU

验证:打开网页→F12→Network→看Response Headers里有Content-Encoding: gzip。如果没有说明Gzip没生效。

浏览器缓存——把静态文件存在用户本地

CSS/JS/图片这些文件很少变,没必每次访问都重新下载。告诉浏览器”这个文件可以缓存多久”:

location ~* .(css|js|jpg|jpeg|png|gif|ico|woff2|svg)$ {
    expires 30d;              # 缓存30天
    add_header Cache-Control "public, immutable";
    add_header X-Content-Type-Options "nosniff";
}

# HTML文件不缓存或短缓存(内容会变)
location ~* .html$ {
    expires 1h;
    add_header Cache-Control "public";
}

immutable告诉浏览器”这个文件不会变,过期之前别来问我”——省掉了重新验证的往返请求。如果文件更新了,给它起个新名字(比如style.v2.css)绕过缓存。

并发连接优化

Nginx默认 worker_connections 512——单worker最多同时处理512个连接。双核VPS开2个worker × 512 = 1024并发,小网站够用但中型网站晚高峰可能不够。

# /etc/nginx/nginx.conf
worker_processes auto;            # 自动检测CPU核心数
worker_connections 1024;          # 每个worker的连接数
multi_accept on;                  # 一次接受多个连接
events {
    use epoll;                    # Linux下最高效的事件模型
    worker_connections 1024;
}

另外系统级别的文件描述符限制也要调:echo “* soft nofile 65536” >> /etc/security/limits.conf。默认1024的连接限制就是因为系统只开了这么多个文件句柄。

Keep-Alive设置

Keep-Alive让浏览器和服务器之间复用同一个TCP连接发多个请求,不用每次都TCP三次握手:

keepalive_timeout 65;      # 连接保持65秒
keepalive_requests 100;    # 一个连接最多处理100个请求

65秒是合理的——太短用户还没加载完下个页面连接就断了,太长占用服务器资源。

限制请求速率防滥用

防止某个IP疯狂刷请求拖慢服务器:

# 在http块定义限制区域
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# 在需要限制的location块里
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
}

rate=10r/s每秒10个请求。burst=20允许瞬间突发20个请求(超过的直接返回503)。nodelay让突发请求不排队等待。

雨云VPS基础就够跑这些Nginx优化——CPU配置不需要高,Nginx优化主要在配置层面不涉及硬件。优惠码 admin01 首月五折。

优化前后效果检查清单

  1. Gzip生效:Response Headers里看到Content-Encoding: gzip
  2. 缓存生效:第二次访问相同文件返回304 Not Modified
  3. 并发数够:nginx -T | grep worker_connections确认值已改
  4. HTTPS TLS版本:ssl_protocols TLSv1.2 TLSv1.3禁用老旧协议
  5. 用PageSpeed Insights或Lighthouse测网站加载分,改前后对比

常见问题

Gzip压缩后会增加CPU负担吗?

会,但通常可忽略。gzip_comp_level 6的CPU开销约增加1-3%——带宽节省远大于CPU开销。1核VPS上跑gzip完全没问题除非同时处理几百个并发压缩请求。

改了Nginx配置需要重启吗?

用nginx -t先检查语法正确性。没问题用systemctl reload nginx(不是restart)——reload平滑重载不中断现有连接,restart会断开所有连接。

缓存设了30天,更新了文件用户看不到新版本?

文件更新后改文件名——style.css改成style.v2.css或style.css?ver=2.0(加查询参数)。浏览器会当它是新文件重新下载。或者降低缓存时间为1天。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600

一台VPS撑不住了——CPU跑满、带宽打满、偶尔502。这时候加配置是一条路,但单机的上限摆在那里。更灵活的做法是加机器做负载均衡:多台VPS分担流量,一台挂了其他继续服务。本文用Nginx反向代理搭建一个最基础的负载均衡方案,三台后端服务

VPS用着用着突然变卡,网站打开要好几秒、SSH敲命令有明显延迟——这种情况比完全断连更难排查。不是挂了,是慢了。本文用四个命令分别定位CPU、内存、磁盘IO和网络的瓶颈,告诉你性能卡在哪个环节。 排查前的第一步:确认不是自己的网络问题 很

1GB内存的VPS跑MySQL+PHP+Nginx,内存用满只是时间问题。加SWAP(虚拟内存)能让系统在内存不够时用磁盘当临时内存用。但它不是免费午餐——SSD的读写速度比内存慢几十倍,SWAP用多了系统卡成狗。 什么时候该加SWAP S

代理IP延迟高的原因可能是网络路径长的客观事实(物理距离决定的延迟降不了),也可能是节点配置问题(可以优化)。先测清楚延迟卡在哪一段再动手。 延迟到底卡在哪——从你到目标的分段测速 你通过代理IP访问目标网站的延迟由三段组成:你到代理IP