优化Ubuntu系统下的Nginx配置,需围绕进程模型、连接处理、缓存策略、压缩传输、SSL/TLS、系统内核等核心维度展开,兼顾性能与稳定性。以下是具体优化步骤及参数说明:
保持Nginx版本最新,可获得性能改进与安全修复。执行以下命令更新:
sudo apt update && sudo apt upgrade nginx
auto(自动匹配CPU逻辑核心数)或手动指定(如worker_processes 4;),避免过多进程导致上下文切换开销。worker_cpu_affinity 0001 0010 0100 1000;),减少CPU缓存失效,提升高并发场景性能。worker_connections的值(如worker_rlimit_nofile 65535;),突破系统默认文件描述符限制,避免“Too many open files”错误。在events块中调整以下参数:
1024~10000(根据服务器性能调整),最大并发连接数=worker_processes × worker_connections。select/poll,显著提升高并发处理能力。expires指令设置浏览器缓存过期时间(如expires 365d;),并添加Cache-Control头,减少客户端请求次数:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
}
}
启用Gzip压缩,减小文本类资源(HTML、CSS、JS)的传输体积:
gzip on;
gzip_disable "msie6"; # 禁用IE6的Gzip(兼容性问题)
gzip_vary on; # 根据Accept-Encoding头返回不同内容
gzip_comp_level 5; # 压缩级别(1-9,平衡压缩率与CPU消耗)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 256; # 仅压缩大于256字节的响应
若使用HTTPS,需优化SSL配置以平衡安全与性能:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache和ssl_session_tickets减少SSL握手开销:ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
listen 443 ssl http2;
修改/etc/sysctl.conf文件,调整以下内核参数(需root权限):
# 增大TCP连接队列长度,避免SYN Flood攻击
net.ipv4.tcp_max_syn_backlog = 65536
# 启用TIME-WAIT连接复用,减少端口耗尽
net.ipv4.tcp_tw_reuse = 1
# 快速回收TIME-WAIT连接
net.ipv4.tcp_tw_recycle = 1
# 增大系统最大文件描述符数
fs.file-max = 65536
# 增大临时端口范围(用于客户端连接)
net.ipv4.ip_local_port_range = 1024 65535
执行sudo sysctl -p使配置生效。
error_log设置为warn或error,避免记录过多调试信息:error_log /var/log/nginx/error.log warn;
buffer和flush参数减少磁盘IO频率:access_log /var/log/nginx/access.log main buffer=32k flush=300s;
client_max_body_size 20m; # 限制上传文件大小为20MB
--without-http_autoindex_module等选项禁用不常用模块(如自动索引),减少内存占用。sudo systemctl restart nginx释放内存(建议在低峰期操作)。以上优化措施需根据服务器硬件配置(CPU、内存、带宽)及业务场景(静态/动态内容比例、并发量)灵活调整。每次修改配置后,需使用nginx -t测试语法正确性,再通过sudo systemctl reload nginx重新加载配置。