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. 性能优化
    (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;  # 同时接受多个连接
}
影响:减少`Too many open files`错误

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. 安全优化
    (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;
}

影响:防止恶意请求
  1. 缓存 & 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;

影响:比Gzip节省10%~20%带宽

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连接处理能力
posted @ 2025-04-22 12:27  你腿别抖了  阅读(27)  评论(0)    收藏  举报