Nginx là reverse proxy phổ biến nhất. Bài này từ setup cơ bản đến các config production mình đang dùng.
Cài đặt
# Ubuntu/Debian
sudo apt install nginx
# Kiểm tra
sudo nginx -t
sudo systemctl start nginx
Reverse Proxy cơ bản
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
HTTPS với Let's Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d myapp.com
Certbot tự thêm SSL config và auto-renew.
Load Balancing
upstream backend {
least_conn; # Chọn server ít connection nhất
server 127.0.0.1:3001;
server 127.0.0.1:3002;
server 127.0.0.1:3003;
}
server {
listen 80;
server_name myapp.com;
location / {
proxy_pass http://backend;
}
}
Các algorithm: round-robin (mặc định), least_conn, ip_hash (sticky session).
Caching static files
server {
location /static/ {
alias /app/public/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d;
add_header Cache-Control "public";
}
}
Rate Limiting
# Định nghĩa zone
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://backend;
}
}
10 request/giây/IP, cho phép burst 20 request.
WebSocket
location /ws {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'" always;
Monitoring
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
Config Nginx nào bạn thấy hữu ích nhất? Share nhé!
Top comments (0)