调整Nginx的worker进程数与每个进程的最大连接数,充分挖掘服务器多核性能。
auto可自动检测),确保每个核心对应一个进程,避免进程竞争。keepalive_timeout设为65秒(平衡连接复用与资源占用),keepalive_requests设为100(每个连接允许的最大请求数)。静态文件(图片、CSS、JS等)的访问无需经过PHP或数据库,优化其处理流程可显著降低后端负载。
expires指令设置缓存时间(如30天),并添加Cache-Control头,让浏览器缓存静态资源,减少重复请求。示例:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
access_log off; # 关闭访问日志,减少磁盘I/O
}
sendfile(直接在内核空间传输文件,减少CPU介入)、tcp_nopush(配合sendfile,防止数据包拆分)、tcp_nodelay(立即发送数据,减少延迟)。示例:sendfile on;
tcp_nopush on;
tcp_nodelay on;
启用Gzip压缩可减少HTML、CSS、JS等文本数据的传输量(通常压缩率为60%-80%),加快页面加载速度。
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024; # 只压缩大于1KB的文件(小文件压缩反而增加CPU开销)
gzip_comp_level 5; # 压缩级别(1-9,5为平衡点,兼顾速度与压缩率)
gzip_disable "msie6"; # 禁用IE6的Gzip(兼容性问题)
HTTP/2的多路复用(一个连接并行处理多个请求)、头部压缩(减少请求头大小)等特性,可显著提升页面加载速度(尤其是有多个小资源的页面)。
http2指令:server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他SSL配置
}
通过缓存动态内容或静态资源,减少后端应用(PHP、MySQL)的处理压力。
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; # 后端PHP-FPM或其他应用服务器
proxy_cache_valid 200 302 10m; # 200/302状态码缓存10分钟
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 缓存失效时可返回旧数据
}
}
SSL/TLS加密会增加CPU开销,通过优化加密配置可减少性能损耗。
HIGH:!aNULL:!MD5)。示例:ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m; # 共享缓存,大小10MB
ssl_session_timeout 1h; # 会话有效期1小时
ssl_session_tickets on; # 开启会话票证(更轻量的会话复用方式)
当单台服务器无法应对高并发时,通过Nginx的反向代理功能将请求分发到多台后端服务器,提升整体处理能力。
round-robin(默认,轮询)或least_conn(最少连接)算法分发请求。示例:upstream backend {
server backend1.example.com;
server backend2.example.com;
least_conn; # 优先将请求分发给当前连接数最少的服务器
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1; # 使用HTTP/1.1(负载均衡需要)
proxy_set_header Connection ""; # 清除客户端连接头,避免后端服务器保持长连接
}
}
减少不必要的日志记录,降低磁盘I/O开销(尤其是高并发场景下)。
error_log级别设为warn(仅记录警告及以上级别的错误),避免debug级别的详细日志占用过多资源。buffer和flush参数设置访问日志的缓冲大小与刷新时间,减少频繁写入磁盘的次数。示例:error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log combined buffer=32k flush=300s; # 缓冲32KB,每5分钟刷新一次
以上优化措施需根据服务器硬件配置(CPU、内存、磁盘)、业务场景(静态/动态内容比例、并发量)及实际性能测试结果进行调整,建议每次修改配置后使用nginx -t检查语法正确性,再通过nginx -s reload重新加载配置(无需重启服务)。