nginx优化做过那些
| 优化方向 | 优化措施 | 说明 |
|---|---|---|
| 并发性能优化 | 调整 worker 进程数 | 根据 CPU 核心数设置 worker_processes,充分利用多核 CPU 性能 |
| 并发性能优化 | 优化连接数限制 | 增大 worker_connections 值,调整系统文件描述符限制,避免连接数受限 |
| 缓存优化 | 启用 HTTP 缓存 | 为静态资源设置缓存策略,减少对服务器的请求 |
| 缓存优化 | 配置 FastCGI 缓存 | 缓存动态内容,减轻后端应用服务器负载 |
| 静态资源优化 | 开启 gzip 压缩 | 减少数据传输量,提高页面加载速度 |
| 静态资源优化 | 合并和压缩资源文件 | 减少请求数量和文件大小 |
| 网络优化 | 优化 TCP 参数 | 调整 tcp_nopush、tcp_nodelay 等参数,减少网络延迟和数据包数量 |
| 网络优化 | 启用 HTTP/2 | 实现多路复用、头部压缩等功能,提高传输效率 |
| 安全优化 | 限制请求速率 | 防止服务器被恶意流量攻击,如 DDoS 攻击 |
| 安全优化 | 配置 SSL/TLS 安全策略 | 使用强加密套件,禁用不安全的 SSL 协议和加密算法,确保数据传输安全 |
| 日志优化 | 优化日志记录 | 根据实际需求设置日志格式和记录级别,减少日志对性能的影响 |
| 日志优化 | 定期清理日志 | 设置日志轮转策略,避免日志文件占用过多磁盘空间 |
| 监控优化 | 启用 Nginx_status 模块 | 实时监控 Nginx 运行状态,包括连接数、请求量、响应时间等指标 |
| 监控优化 | 集成监控工具 | 结合 Prometheus、Grafana 等监控工具,实现全方位监控和告警 |
具体实现
- 性能优化
(1) 调整 Worker 进程
目标:充分利用 CPU 多核性能
点击查看代码
worker_processes auto; # 自动匹配 CPU 核心数
worker_cpu_affinity auto; # 绑定 CPU 核心(Linux)
worker_rlimit_nofile 65535; # 提高文件描述符限制
(2) 调整连接数
目标:支持更高并发连接
点击查看代码
events {
worker_connections 65535; # 每个 Worker 的最大连接数
use epoll; # Linux 高性能事件模型
multi_accept on; # 同时接受多个连接
}
TCP/IP & Keepalive 优化
目标:减少 TCP 握手开销
点击查看代码
http {
sendfile on; # 零拷贝传输
tcp_nopush on; # 减少 TCP 报文数量
tcp_nodelay on; # 禁用 Nagle 算法(低延迟)
keepalive_timeout 65; # Keepalive 超时时间
keepalive_requests 1000; # Keepalive 最大请求数
reset_timedout_connection on; # 关闭超时连接
}
- 安全优化
(1) 隐藏 Nginx 版本
目标:防止攻击者利用已知漏洞
点击查看代码
server_tokens off;
(2) HTTPS & SSL/TLS 优化
目标:提高 HTTPS 安全性 & 性能
点击查看代码
ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧版 SSL
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
(3) IP & Rate Limiting
目标:防止 DDoS & CC攻击
点击查看代码
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
limit_conn conn_limit 20; # IP最大连接数
limit_req zone=req_limit burst=20 nodelay; # IP请求速率限制
deny 192.168.1.100; # IP黑名单
allow all;
}
- 缓存 & Gzip压缩
(1) Gzip压缩
目标:减少传输数据量
点击查看代码
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript;
gzip_comp_level 6;
gzip_vary on;
(2) Proxy & FastCGI缓存
目标:减少后端服务器压力
点击查看代码
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid any 1m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://backend;
}
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fcgi_cache:10m inactive=60m;
location \~ \.php$ {
fastcgi_cache fcgi_cache;
fastcgi_cache_valid any 1h;
fastcgi_cache_min_uses 1;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
add_header X-FastCGI-Cache $upstream_cache_status;
}
点击查看代码
- **影响**:加速动态内容访问
---
## **4. HTTP/2 & Brotli压缩**
### **(1) HTTP/2**
- **目标**:提升 HTTPS性能(多路复用)
- **操作**:
```nginx
server {
listen 443 ssl http2;
http2_max_concurrent_streams 128; # HTTP/2并发流限制
}
(2) Brotli压缩(比Gzip更高效)
目标:进一步减小传输数据量
点击查看代码
brotli on;
brotli_static on;
brotli_types text/plain text/css application/json application/javascript;
brotli_comp_level 6;
5.日志优化
(1) Log Rotation & Buffer
目标:减少磁盘 I/O
点击查看代码
access_log /var/log/nginx/access.log combined buffer=32k flush=5s gzip=1;
error_log /var/log/nginx/error.log warn;
# Log Rotation (logrotate)
/var/log/nginx/*.log {
daily
rotate 30
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 $(cat /var/run/nginx.pid)
endscript
}<details>
影响:避免日志文件过大
6.系统级优化
(1) Linux内核参数调优
<details>
<summary>点击查看代码</summary>
/etc/sysctl.conf
net.core.somaxconn = 65535 # TCP最大队列长度
net.ipv4.tcp_max_syn_backlog = 8192 # SYN队列大小
net.ipv4.tcp_tw_reuse = 1 # TIME_WAIT复用
net.ipv4.tcp_fin_timeout = 30 # FIN超时时间
ulimit调整(防止 "Too many open files")
ulimit -n 65535
</details>
影响:提升TCP连接处理能力

浙公网安备 33010602011771号