Tinh chỉnh hiệu năng Nginx: cache, gzip, HTTP/2 và security headers
Nginx mặc định đã nhanh, nhưng vài dòng cấu hình đúng chỗ có thể cắt giảm tải đáng kể và cải thiện cảm giác mượt cho người dùng. Bài này tổng hợp những thiết lập hiệu năng thực dụng nhất cho website tĩnh và proxy ngược.
Kích hoạt HTTP/2
HTTP/2 cho phép ghép nhiều yêu cầu trên một kết nối — giảm thời gian chờ trắng đáng kể:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name chuanweb.com;
# ssl_certificate ...;
}
Hiện tại Nginx khuyến nghị khai báo http2 on; tách riêng thay vì kèm trong tham số listen ở phiên bản mới.
Cache file tĩnh dài hạn
CSS, JS, ảnh ít thay đổi — cho trình duyệt cache lâu và đặt validation:
location ~* \.(css|js|png|jpg|jpeg|webp|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
HTML thì giữ cache ngắn để nội dung mới không bị trễ:
location / {
add_header Cache-Control "public, max-age=60";
}
Gzip và Brotli
Nén làm giảm băng thông vài lần:
gzip on;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types text/plain text/css application/javascript application/json image/svg+xml;
Connection pooling và keepalive
Khi Nginx làm proxy ngược cho ứng dụng phía sau, giữ kết nối upstream tái sử dụng được:
upstream backend {
server 127.0.0.1:3000;
keepalive 32;
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
}
Thêm đó giúp tránh tình trạng mở kết nối mới cho từng yêu cầu.
Security headers bắt buộc
Những header này không làm tăng tốc trực tiếp nhưng bảo vệ trang và cải thiện tín hiệu an toàn:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Với site qua Cloudflare, có thể áp dụng các header này bằng Transform Rules thay cho Nginx.
Kết luận
- HTTP/2, gzip và cache tĩnh dài hạn là ba thay đổi mang lại lợi ích lớn nhất với công sức nhỏ nhất.
- Connection keepalive giúp proxy ngược đỡ bị nghẽn khi có nhiều người dùng cùng lúc.
- Pipe vào
curl -Ivà kiểm tra thời gian phản hồi trước sau khi áp dụng để thấy số liệu thay đổi.