温馨提示×

怎样提升Nginx在CentOS的性能

小樊
43
2025-07-20 22:07:51
栏目: 智能运维

提升Nginx在CentOS上的性能可以通过多种方式实现,以下是一些关键的优化技巧:

系统层面优化

  • 调整内核参数
    • 增加系统允许的最大文件描述符数:
      echo "fs.file-max = 65535" >> /etc/sysctl.conf
      
    • 增加TCP连接队列长度:
      echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
      
    • 增加系统允许的最大连接数:
      echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
      
    • 启用TCP Fast Open:
      echo 3 > /proc/sys/net/ipv4/tcp_fastopen
      
    • 应用配置:
      sysctl -p
      

Nginx配置优化

  • 调整工作进程和连接数
    • 设置工作进程数为CPU核心数:
      worker_processes auto;
      
    • 设置每个工作进程的最大连接数:
      events {
          worker_connections 1024;
      }
      
  • 启用高效文件传输模式
    • 启用sendfile:
      sendfile on;
      
    • 启用TCP_NOPUSH和TCP_NODELAY:
      tcp_nopush on;
      tcp_nodelay on;
      
  • 启用Gzip压缩
    • 减少传输的数据量:
      http {
          gzip on;
          gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
      }
      
  • 缓存静态文件
    • 缓存静态资源如图片、CSS、JavaScript文件:
      location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
          expires 30d;
          add_header Cache-Control "public, no-transform";
      }
      
  • 启用HTTP/2协议
    • 利用多路复用和头部压缩提高页面加载速度:
      server {
          listen 443 ssl http2;
      }
      
  • 优化SSL/TLS配置
    • 合理配置SSL/TLS协议,提高安全性和性能:
      server {
          ssl_protocols TLSv1.2 TLSv1.3;
          ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
          ssl_prefer_server_ciphers on;
      }
      
  • 使用多核处理器
    • 通过multi_accept指令让每个工作进程尽可能多地接受连接请求:
      events {
          multi_accept on;
      }
      
  • 调整缓冲区大小
    • 调整客户端请求的缓冲区大小,避免缓冲区溢出:
      http {
          client_body_buffer_size 10K;
          client_header_buffer_size 1k;
          client_max_body_size 8m;
          large_client_header_buffers 4 4k;
      }
      
  • 优化日志记录
    • 设置日志每5秒刷新一次:
      http {
          open_log_file_cache max=1000 inactive=20s min_uses=2;
      }
      
  • 配置反向代理
    • 通过proxy_pass指令将请求转发到后端服务器:
      server {
          listen 80;
          server_name example.com;
          location / {
              proxy_pass http://localhost:8080;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }
      
  • 启用文件缓存
    • 使用proxy_cache或fastcgi_cache模块缓存频繁请求的静态资源或动态内容:
      http {
          proxy_cache_path /tmp/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_cache_valid 200 302 30m;
                  proxy_cache_valid 404 1m;
              }
          }
      }
      

在进行任何更改之前,请确保备份配置文件,并进行适当的测试和性能监测,以确保所做的优化不会导致任何不良影响。

0