为了实现 Nginx 的高并发处理能力,需要从 **硬件资源**、**操作系统**、**Nginx 配置** 等多个方面进行优化。以下是详细的配置和示例:
---
### **一、硬件与操作系统优化**
1. **增加 CPU 和内存**:
- 高并发场景下,CPU 和内存是主要瓶颈,建议使用多核 CPU 和大容量内存。
2. **优化网络配置**:
- 增加网络带宽,使用高性能网卡(如万兆网卡)。
- 调整操作系统网络参数:
```bash
# 增加最大连接数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
# 增加文件描述符限制
echo "fs.file-max = 65535" >> /etc/sysctl.conf
# 启用 TCP 快速回收
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
# 应用配置
sysctl -p
```
3. **调整文件描述符限制**:
- 修改系统文件描述符限制:
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
```
---
### **二、Nginx 配置优化**
以下是一些关键的 Nginx 配置优化项:
#### 1. **Worker 进程优化**
- 设置 Worker 进程数为 CPU 核心数:
```nginx
worker_processes auto;
```
- 绑定 Worker 进程到特定 CPU 核心(减少上下文切换):
```nginx
worker_cpu_affinity auto;
```
#### 2. **连接数优化**
- 增加每个 Worker 进程的最大连接数:
```nginx
events {
worker_connections 65535;
use epoll; # 使用 epoll 事件模型(Linux)
}
```
#### 3. **启用高效传输模式**
- 启用 `sendfile` 和 `tcp_nopush`:
```nginx
sendfile on;
tcp_nopush on;
```
#### 4. **Keepalive 优化**
- 启用长连接,减少 TCP 握手开销:
```nginx
keepalive_timeout 65;
keepalive_requests 1000;
```
#### 5. **缓冲区优化**
- 调整缓冲区大小,避免频繁分配内存:
```nginx
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 8k;
```
#### 6. **Gzip 压缩**
- 启用 Gzip 压缩,减少传输数据量:
```nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
```
#### 7. **静态文件缓存**
- 配置静态文件缓存,减少磁盘 I/O:
```nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 30d;
access_log off;
}
```
#### 8. **负载均衡**
- 使用 Nginx 的负载均衡功能,分散请求压力:
```nginx
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
location / {
proxy_pass http://backend;
}
}
```
#### 9. **限制请求速率**
- 防止恶意请求占用资源:
```nginx
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
location / {
limit_req zone=one burst=5;
}
```
#### 10. **日志优化**
- 减少日志写入频率,降低磁盘 I/O:
```nginx
access_log off; # 关闭访问日志
error_log /var/log/nginx/error.log crit; # 只记录严重错误
```
---
### **三、示例配置**
以下是一个完整的高并发 Nginx 配置示例:
```nginx
user www-data;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 8k;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
server 192.168.1.103;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
limit_req zone=one burst=5;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 30d;
access_log off;
}
}
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
```
---
### **四、测试与监控**
1. **压力测试**:
- 使用工具(如 `ab`、`wrk`)测试 Nginx 性能:
```bash
```
2. **监控工具**:
- 使用 `htop`、`netstat`、`nginx-status` 等工具监控系统资源和 Nginx 状态。
通过以上优化,Nginx 可以轻松应对高并发场景,提升系统性能和稳定性。