一、基础优化
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;
}