Nginx 能做的优化
Nginx 是一个高性能的反向代理服务器,广泛用于负载均衡、反向代理、缓存、静态资源处理等场景。在 Web 性能优化方面,Nginx 可以提供以下优化:
📌 1. 静态资源缓存
通过设置合适的缓存策略,可以减少资源的加载时间,提高网站性能。
(1) 设置缓存头
location ~* .(jpg|jpeg|png|gif|css|js|woff|woff2|svg)$ {
expires 30d; # 设定静态资源缓存为 30 天
add_header Cache-Control "public, no-transform, max-age=2592000";
}
✅ 作用:为图片、CSS、JavaScript 等静态资源添加缓存头,减少后续请求。
(2) 使用 etag 和 Last-Modified
location / {
etag on;
if_modified_since exact;
}
✅ 作用:启用 ETag 和 Last-Modified,可以让浏览器根据文件的最后修改时间判断是否重新加载。
📌 2. Gzip 压缩
开启 Gzip 压缩可以显著减少响应内容的大小,提升页面加载速度。
配置 Gzip 压缩
gzip on;
gzip_comp_level 6;
gzip_types text/plain application/xml application/javascript text/css application/json image/svg+xml;
gzip_vary on;
✅ 作用:启用 Gzip 压缩,压缩常见文本文件(如 HTML、CSS、JavaScript),减少传输数据的大小。
📌 3. HTTP/2 支持
HTTP/2 是 HTTP 协议的第二个版本,相比 HTTP/1.1,它减少了延迟,提高了性能。
启用 HTTP/2
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/cert.key;
# 其他配置
}
✅ 作用:开启 HTTP/2,提供多路复用、更高效的资源加载。
📌 4. 负载均衡
Nginx 可以作为反向代理服务器,进行负载均衡,分发请求到多台服务器,增强网站的可伸缩性。
基本负载均衡配置
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
✅ 作用:通过 upstream 配置,Nginx 将流量分发给多台后端服务器,负载均衡提升应用的性能和可用性。
📌 5. 限制请求速率
Nginx 可以用来限制请求速率,以防止恶意用户进行 DDOS 攻击或滥用资源。
配置请求速率限制
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location / {
limit_req zone=mylimit burst=20;
}
}
}
✅ 作用:限制每个 IP 的请求速率,防止暴力攻击和资源浪费。
📌 6. SSL/TLS 性能优化
启用 TLS 和优化 SSL 配置可以加速 HTTPS 请求的建立。
优化 SSL 配置
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/cert.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_dhparam /etc/nginx/dhparam.pem;
}
✅ 作用:优化 SSL 配置,启用更高效的加密协议,提高安全性和性能。
📌 7. 反向代理缓存
通过缓存后端服务器的响应,减少后端负担,提高性能。
配置反向代理缓存
location /api/ {
proxy_cache api_cache;
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout updating;
proxy_pass http://backend;
}
✅ 作用:缓存 API 响应,减少后端请求,提升网站响应速度。
📌 8. 防止热链接(Hotlinking)
通过防止外部网站直接访问你的网站资源,可以减少带宽浪费。
配置防止热链接
location ~ .(jpg|jpeg|png|gif|css|js)$ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
✅ 作用:只允许指定的域名加载资源,防止外部网站直接链接图片、视频等静态资源。
📌 9. 连接池和 keepalive
通过启用 keepalive 连接池功能,可以复用连接,减少建立新连接的开销。
配置 keepalive
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
keepalive 64; # 连接池大小
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Connection "";
}
}
}
✅ 作用:启用 keepalive 连接池,减少每个请求建立新连接的开销,提升请求性能。
📌 10. 配置更合适的时间限制
通过设置请求和响应的超时时间,避免请求挂起过久。
设置连接超时
server {
client_max_body_size 50M; # 最大请求体大小
client_body_timeout 12s; # 请求超时
send_timeout 10s; # 响应超时
}
✅ 作用:通过合理的超时设置,防止请求挂起或阻塞,提升性能和稳定性。
📌 总结
通过使用 Nginx 配置缓存、压缩、负载均衡、连接池、HTTP/2 等优化措施,可以大幅度提高 Web 应用的性能,提升响应速度和用户体验。不同的优化手段适用于不同的场景,灵活配置能有效提升系统整体表现。
💡 你有哪个特定的 Nginx 优化需求吗?