0%
Theme NexT works best with JavaScript enabled
nginx配置优化 性能优化
工作进程配置: worker_processes:设置为与 CPU 核数相同,以充分利用多核处理器。 worker_cpu_affinity:为每个工作进程绑定特定的 CPU 核心,减少上下文切换。 worker_connections:设置每个工作进程的最大连接数,计算公式为 worker_processes * worker_connections。 worker_rlimit_nofile:设置 Nginx 服务器的最大文件描述符数,避免 “too many opened files” 错误。 事件处理模型: use epoll:在 Linux 系统中使用 epoll 事件模型,提高性能。 accept_mutex:控制工作进程对新连接的竞争,避免惊群问题。 accept_mutex_delay:设置工作进程等待锁的时间,平衡负载。 multi_accept:让工作进程一次性接受所有待处理的连接,提高处理效率。日志和错误处理 错误日志: error_log:设置错误日志的路径和日志级别,帮助诊断问题。 log_format:自定义日志格式,记录更多有用的信息。 access_log:设置访问日志的路径和格式,监控访问情况。静态文件处理 缓存: sendfile:启用 sendfile,直接将文件从文件系统发送到客户端,减少内存拷贝。 tcp_nopush:在所有数据准备完毕后一次性发送数据包,减少网络拥塞。 open_file_cache:缓存打开的文件描述符,提高静态文件的访问速度。动态内容处理 FastCGI 缓存: fastcgi_cache:启用 FastCGI 缓存,减少后端服务器的负载。 fastcgi_cache_key:设置缓存键,确保缓存的唯一性。 fastcgi_cache_valid:设置缓存的有效时间。安全性和防护
限制请求速率: limit_req:限制客户端的请求速率,防止 DDoS 攻击。 limit_conn:限制每个客户端的连接数,防止资源耗尽。
隐藏版本信息: server_tokens off;:关闭服务器版本信息的显示,提高安全性。SSL/TLS 配置
SSL/TLS 协议和加密套件: ssl_protocols:指定支持的 SSL/TLS 协议版本。 ssl_ciphers:指定支持的加密套件。 ssl_prefer_server_ciphers on;:优先使用服务器的加密套件。
证书和密钥: ssl_certificate:指定 SSL 证书文件路径。 ssl_certificate_key:指定 SSL 密钥文件路径。负载均衡 上游服务器配置: upstream:定义后端服务器池,实现负载均衡。 least_conn:将请求分配给当前连接数最少的服务器。 ip_hash:基于客户端 IP 地址进行会话保持。反向代理 代理缓存: proxy_cache:启用代理缓存,减少后端服务器的负载。 proxy_cache_key:设置缓存键,确保缓存的唯一性。 proxy_cache_valid:设置缓存的有效时间。其他优化技巧
压缩: gzip:启用 gzip 压缩,减少传输数据量。 gzip_types:指定需要压缩的 MIME 类型。 gzip_comp_level:设置压缩级别,平衡性能和压缩效果。
超时设置: keepalive_timeout:设置长连接的超时时间,减少 TCP 握手次数。 client_header_timeout:设置客户端头部的超时时间。 client_body_timeout:设置客户端请求体的超时时间。
综合优化Nginx配置示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 user nginx; # 设置运行 Nginx 的用户为 nginx worker_processes auto; # 自动设置工作进程数量,通常设置为 CPU 核心数 events { worker_connections 1024; # 每个工作进程允许的最大连接数 use epoll; # 使用 epoll 事件模型,提高性能(适用于 Linux) accept_mutex on; # 启用 accept_mutex,避免惊群问题 accept_mutex_delay 500ms; # 设置工作进程等待锁的时间,平衡负载 multi_accept on; # 让工作进程一次性接受所有待处理的连接,提高处理效率 } http { include mime.types; # 包含 MIME 类型配置文件 default_type application/octet-stream; # 默认 MIME 类型 sendfile on; # 启用 sendfile,直接将文件从文件系统发送到客户端,减少内存拷贝 tcp_nopush on; # 在所有数据准备完毕后一次性发送数据包,减少网络拥塞 tcp_nodelay on; # 启用 TCP_NODELAY,提高小数据包的传输效率 keepalive_timeout 65; # 设置长连接的超时时间,减少 TCP 握手次数 client_header_timeout 10s; # 设置客户端头部的超时时间 client_body_timeout 10s; # 设置客户端请求体的超时时间 gzip on; # 启用 gzip 压缩,减少传输数据量 gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/json; # 指定需要压缩的 MIME 类型 gzip_comp_level 6; # 设置压缩级别,平衡性能和压缩效果 open_file_cache max=1000 inactive=20s; # 缓存打开的文件描述符,提高静态文件的访问速度 open_file_cache_valid 30s; # 设置缓存的有效时间 open_file_cache_min_uses 2; # 文件至少被使用的次数才被缓存 open_file_cache_errors on; # 缓存文件打开错误信息 access_log /var/log/nginx/access.log combined; # 设置访问日志的路径和格式,监控访问情况 error_log /var/log/nginx/error.log warn; # 设置错误日志的路径和日志级别,帮助诊断问题 server { listen 80; # 监听 80 端口 server_name example.com; # 设置服务器名称 location / { root /usr/share/nginx/html; # 设置根目录 index index.html index.htm; # 设置默认索引文件 } location /api { proxy_pass http://backend_server; # 将请求代理到后端服务器 proxy_set_header Host $host; # 设置代理请求头中的 Host 字段 proxy_set_header X-Real-IP $remote_addr; # 设置代理请求头中的 X-Real-IP 字段 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置代理请求头中的 X-Forwarded-For 字段 proxy_set_header X-Forwarded-Proto $scheme; # 设置代理请求头中的 X-Forwarded-Proto 字段 } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 将 PHP 请求传递给 FastCGI 进程 fastcgi_index index.php; # 设置默认的 PHP 文件名 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # 设置脚本文件路径 include fastcgi_params; # 包含 FastCGI 参数配置文件 } error_page 404 /404.html; # 设置 404 错误页面 error_page 500 502 503 504 /50x.html; # 设置 5xx 错误页面 location = /50x.html { root /usr/share/nginx/html; # 设置 5xx 错误页面的根目录 } } upstream backend_server { server 192.168.1.101; # 定义后端服务器地址 server 192.168.1.102; # 定义后端服务器地址 least_conn; # 使用最少连接数算法进行负载均衡 } limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 限制每个客户端的请求速率,防止 DDoS 攻击 limit_conn_zone $binary_remote_addr zone=addr:10m; # 限制每个客户端的连接数,防止资源耗尽 ssl_protocols TLSv1.2 TLSv1.3; # 指定支持的 SSL/TLS 协议版本 ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-GCM-SHA384'; # 指定支持的加密套件 ssl_prefer_server_ciphers on; # 优先使用服务器的加密套件 server { listen 443 ssl; # 监听 443 端口,并启用 SSL server_name example.com; # 设置服务器名称 ssl_certificate /etc/nginx/ssl/example.com.crt; # 指定 SSL 证书文件路径 ssl_certificate_key /etc/nginx/ssl/example.com.key; # 指定 SSL 密钥文件路径 location / { root /usr/share/nginx/html; # 设置根目录 index index.html index.htm; # 设置默认索引文件 } } }