一、基础优化
1、调整 worker_processes
Nginx 的 worker_processes 参数决定了工作进程的数量,不宜设置过高,否则会占用大量的 CPU 和内存资源,每个进程一般占用 1MB 左右的内存。在大多数情况下,建议将 worker_processes 设置为 CPU 核心数的值,以提高 CPU 利用率和响应速度。
worker_processes 4;
2、调整 worker_connections
worker_connections 指定了每个 worker 进程所支持的最大连接数,过低的话会导致请求被拒绝的问题,过高则会导致服务质量下降,建议根据实际情况适当调整。
worker_connections 1024;
3、开启 sendfile
sendfile 可以提高文件传输效率,通过直接在内核空间和磁盘之间传输数据来实现服务端零拷贝。
sendfile on;
二、缓存优化
1、开启缓存
可以通过设置 proxy_cache_path 和 proxy_cache 启用 Nginx 的缓存功能,将一部分静态资源缓存到本地,避免多次请求带来的延迟。
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m; location / { proxy_cache my_cache; proxy_cache_valid 200 1h; proxy_cache_valid 403 404 1m; proxy_pass http://backend; }
2、开启 gzip 压缩
启用 gzip 压缩可以减少传输数据的大小,加快响应速度,并节省带宽资源。
gzip on; gzip_comp_level 2; gzip_min_length 1000; gzip_proxied any; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
三、安全优化
1、限制文件上传大小
在上传文件时,为了防止用户恶意上传过大的文件占用服务器空间,可以限制文件上传大小。
client_max_body_size 10m;
2、开启 SSL
如果网站需要加密传输,可以开启 SSL,通过 HTTPS 协议进行通信,增加数据传输的安全性。
server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256; ... }
3、添加安全头部
通过添加安全头部,可以进一步加强网站的安全性,例如防止 XSS 攻击。
add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options "SAMEORIGIN";
四、性能优化
1、使用反向代理
Nginx 可以通过反向代理的方式将请求转发到后端服务,提高服务响应速度和稳定性。
location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
2、开启 TCP_NODELAY
TCP_NODELAY 参数可以减少 TCP 连接的延迟,提高数据传输的速度。
tcp_nopush on; tcp_nodelay on;
3、使用 FastCGI 缓存
FastCGI 可以将请求转发到静态资源缓存服务器,将一部分请求缓存到磁盘上,减少后续请求的响应时间。
fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m; location / { fastcgi_cache my_cache; fastcgi_cache_valid 200 1h; fastcgi_cache_valid 403 404 1m; include fastcgi_params; fastcgi_pass backend; }