插件窝 干货文章 Nginx配置和内核怎么优化

Nginx配置和内核怎么优化

tcp 优化 net Nginx 810    来源:    2025-04-24

Nginx配置与Linux内核优化指南

Nginx配置优化

1. 基础性能优化

worker_processes auto;  # 自动设置为CPU核心数
worker_rlimit_nofile 100000;  # 每个worker进程能打开的文件描述符数量

events {
    worker_connections 4096;  # 每个worker的最大连接数
    multi_accept on;  # 一次接受所有新连接
    use epoll;  # 使用epoll事件模型(Linux)
}

2. HTTP优化

http {
    sendfile on;  # 启用sendfile系统调用
    tcp_nopush on;  # 启用TCP_CORK
    tcp_nodelay on;  # 禁用Nagle算法

    keepalive_timeout 30;  # 保持连接超时
    keepalive_requests 1000;  # 每个保持连接的最大请求数

    client_max_body_size 10m;  # 最大上传文件大小
    client_body_buffer_size 128k;  # 请求体缓冲区大小

    open_file_cache max=200000 inactive=20s;  # 文件描述符缓存
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

3. Gzip压缩

gzip on;
gzip_min_length 1024;  # 最小压缩文件大小
gzip_comp_level 6;  # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_disable "msie6";  # 禁用旧版IE的压缩

4. SSL优化

ssl_session_cache shared:SSL:10m;  # 共享SSL会话缓存
ssl_session_timeout 10m;  # SSL会话超时
ssl_protocols TLSv1.2 TLSv1.3;  # 启用安全的TLS版本
ssl_prefer_server_ciphers on;  # 优先使用服务器端加密套件
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_stapling on;  # OCSP装订
ssl_stapling_verify on;

Linux内核优化

1. 网络相关参数

# 编辑/etc/sysctl.conf添加以下内容

# 最大连接数相关
net.core.somaxconn = 65535  # 每个端口最大监听队列长度
net.ipv4.tcp_max_syn_backlog = 65536  # SYN队列长度

# TCP连接重用
net.ipv4.tcp_tw_reuse = 1  # 允许TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 0  # 不建议启用,可能导致NAT环境问题

# TCP Keepalive
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10

# 内存相关
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 6291456  # 最小/默认/最大接收窗口
net.ipv4.tcp_wmem = 4096 16384 4194304  # 最小/默认/最大发送窗口

# 拥塞控制算法
net.ipv4.tcp_congestion_control = bbr  # 使用BBR算法(需要内核4.9+)

# 其他优化
net.ipv4.tcp_fin_timeout = 30  # FIN-WAIT-2状态超时
net.ipv4.tcp_slow_start_after_idle = 0  # 禁用空闲后慢启动
net.ipv4.ip_local_port_range = 1024 65535  # 本地端口范围

# 应用修改
sysctl -p

2. 文件描述符限制

# 编辑/etc/security/limits.conf添加
* soft nofile 100000
* hard nofile 100000
root soft nofile 100000
root hard nofile 100000

# 编辑/etc/systemd/system.conf和/etc/systemd/user.conf
DefaultLimitNOFILE=100000

3. 磁盘I/O优化

# 使用deadline或noop调度器(SSD推荐)
echo deadline > /sys/block/sda/queue/scheduler

# 增加文件系统inode缓存
echo 30 > /proc/sys/vm/vfs_cache_pressure

# 调整脏页比例
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio

监控与调优建议

  1. 监控工具

    • htop - 查看系统负载
    • iftop - 网络流量监控
    • iotop - 磁盘I/O监控
    • nginx-status - Nginx状态监控
  2. 压力测试

    • 使用ab(Apache Benchmark)或wrk进行压力测试
    • 逐步调整参数,观察性能变化
  3. 安全考虑

    • 所有优化应在安全加固后进行
    • 定期更新Nginx和系统内核

以上优化需要根据实际硬件配置和应用场景进行调整,建议在生产环境部署前进行充分测试。