针对小VPS(如1核CPU/1GB内存)的Nginx优化,以下是一套系统化的解决方案,兼顾性能与资源节省:
工作进程调优
worker_processes auto; # 自动匹配CPU核心数(小VPS通常设为1)
worker_rlimit_nofile 2048; # 每个worker能打开的最大文件描述符数
事件模型优化
events {
worker_connections 1024; # 根据内存调整(1GB建议1024)
use epoll; # Linux系统启用高效epoll模型
multi_accept on; # 一次接受所有新连接
}
关闭非必要日志
access_log off; # 或仅记录关键请求
error_log /var/log/nginx/error.log warn; # 只记录警告及以上级别
连接优化
keepalive_timeout 15; # 保持连接时间(秒)
keepalive_requests 100; # 单个连接最大请求数
sendfile on; # 启用零拷贝传输
tcp_nopush on; # 数据包累积后发送
tcp_nodelay on; # 禁用Nagle算法
缓冲与超时
client_body_buffer_size 16K;
client_header_buffer_size 1k;
client_max_body_size 8m; # 根据需求调整上传限制
client_body_timeout 12;
client_header_timeout 12;
启用Gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;
gzip_comp_level 3; # 压缩级别1-9,小VPS建议3-5
缓存控制
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
基础防护
server_tokens off; # 隐藏Nginx版本号
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 50; # 单IP最大并发连接数
防慢速攻击
client_body_timeout 5s;
client_header_timeout 5s;
reset_timedout_connection on;
启用HTTP/2
listen 443 ssl http2; # 需先配置SSL证书
反向代理优化
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;
系统级配合
# 调整内核参数(/etc/sysctl.conf)
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 1024
实时状态检查
nginx -t # 测试配置
top -p $(pgrep -d ',' nginx) # 监控进程资源占用
压测工具验证
ab -n 1000 -c 50 http://yourdomain.com/
nginx -s reload
swap
分区(临时方案)通过以上配置,1GB内存VPS可轻松应对日均5000~10000次请求(静态页面)。动态内容需结合PHP/数据库优化(如OPcache、MySQL调优)。