基本优化参数
1. worker_processes
worker_processes auto;
说明及好处:
- 自动配置工作进程数,通常设置为与CPU核心数相同或略多,可以充分利用多核CPU,提高并发处理能力。
2. worker_connections
worker_connections 10240;
说明及好处:
- 每个工作进程的最大连接数,增大可以处理更多并发连接。根据服务器内存和需求适当调整。
3. worker_rlimit_nofile
worker_rlimit_nofile 65535;
说明及好处:
- 设置每个工作进程可打开的最大文件描述符数,与
ulimit
设置保持一致,确保不会因为文件描述符不足而影响性能。
4. use epoll
events {
use epoll;
}
说明及好处:
epoll
是Linux下高效的I/O多路复用机制,适用于高并发场景,提高性能。
HTTP核心优化参数
5. sendfile
sendfile on;
说明及好处:
- 开启
sendfile
可以减少数据拷贝,提高文件传输效率。
6. tcp_nopush
tcp_nopush on;
说明及好处:
- 减少TCP包的数量,优化发送性能,特别适用于大文件传输。
7. tcp_nodelay
tcp_nodelay on;
说明及好处:
- 关闭Nagle算法,减少延迟,适用于实时性要求较高的应用。
8. keepalive_timeout
keepalive_timeout 65;
说明及好处:
- 设置keep-alive连接的超时时间,增大可以减少重新建立连接的开销,但需要平衡资源占用。
9. client_max_body_size
client_max_body_size 100m;
说明及好处:
- 限制客户端请求主体的最大大小,防止大文件上传导致服务器资源耗尽。
缓存和压缩优化
10. gzip
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
说明及好处:
- 开启gzip压缩,减少传输数据量,提高响应速度。压缩级别和压缩类型根据需求调整。
11. proxy_cache
proxy_cache_path /var/cache/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 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
说明及好处:
- 配置代理缓存,提高响应速度,减少后端服务器压力。缓存路径、大小和时间根据实际需求调整。
安全性优化
12. limit_conn
和 limit_req
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_conn addr 10;
limit_req zone=one burst=5;
}
}
}
说明及好处:
- 限制单个IP的并发连接数和请求频率,防止恶意流量和DDoS攻击。
日志优化
13. access_log
和 error_log
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;
说明及好处:
- 配置访问日志和错误日志,设置日志缓冲和刷新时间,减少I/O操作对性能的影响。
示例配置
以下是一个综合示例配置:
worker_processes auto;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;
server {
listen 80;
server_name example.com;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
limit_conn addr 10;
limit_req zone=one burst=5;
}
}
}
通过这些参数调优,可以显著提升Nginx服务器的性能,确保网站在高并发、高负载的情况下依然保持快速响应和低延迟。实际使用中需要根据具体场景进行调整和测试,以达到最佳效果。