插件窝 干货文章 nginx配置优化实例分析

nginx配置优化实例分析

Nginx 优化 配置 连接 281    来源:    2025-04-21

以下是一个详细的Nginx配置优化实例分析,包含常见场景的优化方案和配置示例:


一、基础性能优化

1. 工作进程优化

worker_processes auto;  # 自动匹配CPU核心数
worker_cpu_affinity auto;  # CPU亲和性(Nginx 1.9+)
worker_rlimit_nofile 65535;  # 每个worker能打开的最大文件数

2. 事件模型优化

events {
    worker_connections 4096;  # 单个worker最大连接数
    use epoll;  # Linux环境使用epoll
    multi_accept on;  # 一次性接受所有新连接
}

3. 高效传输配置

http {
    sendfile on;  # 启用零拷贝传输
    tcp_nopush on;  # 数据包累积到一定大小再发送
    tcp_nodelay on;  # 禁用Nagle算法

    keepalive_timeout 65;  # 长连接超时
    keepalive_requests 1000;  # 单个长连接最大请求数
}

二、静态资源优化

1. 静态文件缓存

server {
    location ~* \.(jpg|png|gif|css|js)$ {
        expires 365d;  # 缓存1年
        access_log off;  # 关闭日志
        add_header Cache-Control "public";
    }
}

2. Gzip压缩

gzip on;
gzip_comp_level 5;  # 压缩级别(1-9)
gzip_min_length 256;  # 最小压缩文件大小
gzip_types text/plain text/css application/json application/javascript;

三、安全优化

1. 隐藏Nginx版本号

server_tokens off;

2. 限制HTTP方法

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 405;
}

3. 防DDoS基础配置

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

location / {
    limit_req zone=req_limit burst=20 nodelay;
}

四、高级场景优化

1. 负载均衡配置

upstream backend {
    least_conn;  # 最少连接算法
    server 10.0.0.1:8080 weight=3;
    server 10.0.0.2:8080;
    keepalive 32;  # 连接池大小
}

2. HTTP/2优化

server {
    listen 443 ssl http2;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    # 启用OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
}

3. 动态内容缓存

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_use_stale error timeout updating;
}

五、调试与监控

1. 状态监控页面

location /nginx_status {
    stub_status on;
    access_log off;
    allow 192.168.1.0/24;
    deny all;
}

2. 日志优化

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" $request_time';
access_log /var/log/nginx/access.log main buffer=32k flush=1m;

六、常见问题解决方案

问题1:502 Bad Gateway

# 增加代理超时时间
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;

问题2:Too many open files

# 系统级调整
ulimit -n 65535
# 在/etc/security/limits.conf添加:
* soft nofile 65535
* hard nofile 65535

优化效果评估方法

  1. 使用abwrk进行压力测试
  2. 通过top -H观察worker进程CPU占用
  3. 监控ss -s查看TCP连接状态
  4. 分析nginx -T输出的完整配置

根据实际业务场景,建议逐步应用这些优化配置,并通过监控工具观察效果。生产环境修改前务必做好备份和灰度测试。