Nginx 配置文件的优化可以从多个方面进行,以下是一些常见的优化建议:
根据服务器的 CPU 核心数来设置 worker 进程数。通常设置为 CPU 核心数的两倍。
worker_processes auto; # 或者设置为 CPU 核心数
每个 worker 进程可以同时处理的最大连接数。这个值需要根据系统的可用内存和网络带宽来调整。
events {
worker_connections 1024; # 可以根据需要调整
}
保持连接可以减少 TCP 握手的开销。
http {
keepalive_timeout 65; # 保持连接的超时时间(秒)
keepalive_requests 100; # 每个连接允许的最大请求数
}
压缩传输的数据可以减少带宽使用。
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
对于静态文件,可以设置缓存以减少对后端服务器的请求。
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
对于动态内容,可以使用 Nginx 的反向代理缓存功能。
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_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
编译 Nginx 时禁用不需要的模块可以减少二进制文件的大小和提高启动速度。
./configure --without-http_gzip_static_module --without-http_autoindex_module
如果客户端支持,启用 HTTP/2 可以提高性能。
server {
listen 443 ssl http2;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privatekey.pem;
}
减少日志记录的详细程度可以减少 I/O 开销。
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log combined buffer=32k flush=300s;
这些选项可以优化 TCP 传输。
tcp_nopush on;
tcp_nodelay on;
确保 Nginx 有足够的文件描述符可用。
ulimit -n 65535
如果有多台后端服务器,可以使用负载均衡来分散请求。
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
确保 Nginx 配置文件的安全性,例如限制访问、使用 SSL/TLS 等。
使用监控工具(如 Prometheus 和 Grafana)来监控 Nginx 的性能,并根据监控数据进行调优。
通过以上这些优化措施,可以显著提高 Nginx 的性能和稳定性。记得在每次修改配置文件后,重新加载或重启 Nginx 服务以应用更改。