在2核2G的服务器上部署Nginx,需要针对资源限制进行优化。以下是从配置调整到系统层面的综合优化建议:
一、核心配置优化(nginx.conf)
-
工作进程与连接数
worker_processes 2; # 与CPU核心数一致 worker_cpu_affinity 01 10; # 绑定CPU核心(Linux) events { worker_connections 2048; # 单个进程连接数(2G内存建议2048-4096) use epoll; # Linux高性能事件模型 multi_accept on; # 同时接受多个连接 } -
连接与缓冲区优化
http { sendfile on; # 零拷贝传输静态文件 tcp_nopush on; # 合并数据包减少发送次数 tcp_nodelay on; # 禁用Nagle算法 keepalive_timeout 30; # 长连接超时(降低连接开销) keepalive_requests 1000; # 单连接最大请求数 client_body_buffer_size 16k; client_header_buffer_size 1k; large_client_header_buffers 4 8k; } -
静态资源缓存
server { location ~* .(jpg|css|js|png)$ { expires 7d; # 客户端缓存时间 access_log off; # 关闭日志减少磁盘IO } }
二、系统级优化
-
内核参数调整(/etc/sysctl.conf)
net.core.somaxconn = 65535 # 提高连接队列长度 net.ipv4.tcp_tw_reuse = 1 # 复用TIME_WAIT连接 net.ipv4.tcp_max_tw_buckets = 20000 fs.file-max = 65535 # 增加文件描述符限制 -
资源限制(/etc/security/limits.conf)
nginx soft nofile 65535 nginx hard nofile 65535 -
内存管理
- 启用Swap(建议1-2G):防止内存耗尽导致服务崩溃
- 调整Swappiness:
vm.swappiness=10(优先使用物理内存)
三、针对性场景优化
-
高并发场景
http { open_file_cache max=2000 inactive=20s; # 缓存文件描述符 open_file_cache_valid 30s; access_log off; # 生产环境可关闭或异步写入 error_log /var/log/nginx/error.log crit; } -
动态内容XX
upstream backend { least_conn; # 最小连接负载均衡 server 127.0.0.1:8080; keepalive 32; # 复用后端连接 } -
启用Gzip压缩(CPU换带宽)
gzip on; gzip_min_length 1k; # 大于1KB的文件才压缩 gzip_comp_level 2; # 压缩级别(1-9,建议2-3平衡性能) gzip_types text/plain application/json;
四、监控与维护
-
启用状态监控
location /nginx_status { stub_status on; allow 127.0.0.1; # 仅允许本地访问 deny all; } -
日志分割
- 使用logrotate每日切割日志,避免单个文件过大
-
进程保护
# 使用systemd限制资源(/etc/systemd/system/nginx.service) [Service] LimitNOFILE=65535 LimitNPROC=2048
五、安全加固建议
- 隐藏Nginx版本号:
server_tokens off; - 限制请求方法:
if ($request_method !~ ^(GET|POST)$) { return 444; } - 设置缓冲区限制防止溢出攻击
关键权衡点
- 连接数 vs 内存:每个连接约消耗10-20KB内存,2048连接约需40MB内存
- 日志记录:关闭access_log可提升5-10%性能,但不利于排查问题
- Gzip压缩:根据CPU使用率动态调整压缩级别
建议先进行压力测试(如wrk -t2 -c1000),根据实际业务场景微调参数。2核2G配置适合日均10万PV以下的轻量级应用,若流量持续增长,需考虑水平扩展或升级配置。
CLOUD技术笔记