优化Nginx以提升Ubuntu服务器性能,需从进程模型调优、传输效率优化、缓存策略、操作系统内核参数、HTTP/2配置及监控等多维度入手,以下是具体步骤:
auto,让Nginx自动匹配Ubuntu服务器的CPU核心数(可通过lscpu命令查看核心数),充分利用多核处理能力。65535(需结合系统文件描述符限制,后续会提到)。events块中添加use epoll;(Ubuntu默认支持),epoll是Linux下高效的多路复用IO模型,能显著提升高并发场景下的性能。sendfile on;),避免数据在用户态和内核态之间多次拷贝,提高静态文件(如图片、CSS、JS)的传输效率。sendfile配合使用,在发送数据包时进行优化组合,减少网络阻塞。tcp_nodelay on;),降低延迟,提升实时响应性(如实时聊天、在线游戏等场景)。location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; # 缓存1年
add_header Cache-Control "public, max-age=31536000"; # 允许公共缓存
}
open_file_cache加速静态文件访问,减少磁盘IO。配置示例如下:open_file_cache max=1000 inactive=20s; # 缓存1000个文件,20秒未访问则失效
open_file_cache_valid 30s; # 每30秒验证缓存有效性
open_file_cache_min_uses 2; # 文件被访问2次后加入缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
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分钟
}
编辑Ubuntu的/etc/sysctl.conf文件,添加以下参数以优化内核性能:
net.core.somaxconn = 65535 # 最大待处理连接数(默认128,需与Nginx的listen backlog一致)
net.ipv4.ip_local_port_range = 1024 65535 # 临时端口范围(扩大范围,支持更多并发连接)
net.ipv4.tcp_tw_reuse = 1 # 快速回收TIME-WAIT连接(减少连接建立时间)
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度(应对高并发SYN请求)
fs.file-max = 2097152 # 系统最大文件描述符数(需配合ulimit -n使用)
修改后执行sudo sysctl -p使配置生效。同时,调整Ubuntu用户的文件描述符限制(编辑/etc/security/limits.conf):
* soft nofile 65535
* hard nofile 65535
在Nginx的server块中启用HTTP/2协议(需配合SSL证书),通过头部压缩和多路复用减少延迟:
server {
listen 443 ssl http2; # 启用HTTP/2
ssl_protocols TLSv1.2 TLSv1.3; # 仅使用安全协议
ssl_session_cache shared:SSL:10m; # 会话缓存(减少TLS握手时间)
ssl_session_timeout 10m; # 会话超时时间
# SSL证书路径
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
}
启用Gzip压缩静态资源(如HTML、CSS、JS),降低网络传输体积(通常可减少60%-70%的传输量):
gzip on; # 开启Gzip
gzip_min_length 1k; # 超过1KB的文件才压缩(避免小文件压缩反而增加CPU开销)
gzip_comp_level 4; # 压缩级别(1-9,4是性能与压缩比的平衡点)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 压缩的文件类型
gzip_vary on; # 添加Vary头,兼容老旧代理服务器
通过keepalive配置保持客户端与服务器的长连接,减少TCP三次握手和四次挥手的次数:
http {
keepalive_timeout 65; # 长连接超时时间(秒,建议65秒以内,避免占用过多资源)
keepalive_requests 100; # 每个长连接允许的最大请求数(避免单个连接占用过久)
}
status模块,查看实时性能指标(如活跃连接数、请求速率、缓存命中率)。在nginx.conf中添加:server {
listen 8080;
server_name localhost;
location /nginx_status {
stub_status on; # 开启状态页
allow 127.0.0.1; # 仅允许本地访问
deny all;
}
}
访问http://服务器IP:8080/nginx_status即可查看状态(需确保防火墙放行8080端口)。htop(查看CPU/内存使用率)、iotop(查看磁盘IO)、vnstat(查看网络流量)等工具监控Ubuntu服务器的资源使用情况,根据监控结果调整Nginx配置(如增加worker_connections、优化缓存大小)。通过以上优化措施,可显著提升Ubuntu服务器上Nginx的性能,应对高并发场景。需注意的是,优化参数应根据实际业务负载(如并发量、静态资源大小、动态内容复杂度)进行调整,避免盲目增大参数导致资源浪费。