Nginx เป็น web server ที่มีประสิทธิภาพสูง น้ำหนักเบา และใช้ resources น้อย จึงเป็นตัวเลือกยอดนิยมสำหรับการรัน application บน Cloud VPS นั่นหมายความว่า การเลือก Nginx สำหรับ VPS ของคุณจะช่วยให้คุณสามารถโฮสต์เว็บไซต์และ application ได้มากกว่า ด้วยต้นทุนที่ต่ำกว่า แต่เพื่อให้ได้ผลสูงสุดจาก Nginx บน Cloud VPS จำเป็นต้องตั้งค่าและปรับแต่งให้เหมาะสม บทความนี้จะแนะนำ best practices ที่ช่วยให้คุณสามารถตั้งค่า Nginx ที่ปลอดภัย มีประสิทธิภาพ และเสถียร บนระบบ VPS ของคุณ
1. เลือก VPS Specs ที่เหมาะสมสำหรับ Nginx
ขั้นตอนแรกในการตั้งค่า Nginx บน Cloud VPS คือการเลือก server specs ที่เหมาะสม ในขณะที่ Nginx เป็น web server ที่มีประสิทธิภาพ แต่ resources ของ VPS ยังคงมีความสำคัญต่อประสิทธิภาพโดยรวม
ข้อพิจารณาเรื่องทรัพยากร
- CPU — สำหรับเว็บไซต์ขนาดกลาง ขอแนะนำให้ใช้ VPS ที่มี CPU cores อย่างน้อย 2-4 cores หากแอปพลิเคชันมี CPU-intensive tasks ให้พิจารณาขยายขนาด CPU
- RAM — Nginx ใช้ memory น้อย แต่ application ที่รัน บนนั้นอาจต้องการ memory มาก ขอแนะนำให้เริ่มต้นด้วย 2-4 GB RAM สำหรับสภาพแวดล้อมการผลิต
- Storage — เลือก SSD ถ้าเป็นไปได้ เพื่อให้ได้ I/O performance ที่ดีกว่า NVMe ถือเป็นตัวเลือกที่ดีสำหรับ application ที่ต้องอ่านเขียนข้อมูลบ่อย
- Bandwidth — พิจารณา traffic ที่คาดว่าจะได้รับ เลือก VPS ที่มี bandwidth allocation ที่เพียงพอสำหรับความต้องการของคุณ
แนะนำ DE Cloud VPS — Cloud VPS จาก Dot Enterprise มี options ที่หลากหลาย เหมาะสำหรับตั้งค่า Nginx ตั้งแต่เว็บไซต์ขนาดเล็กจนถึง application ขนาดใหญ่ ด้วย uptime guarantee 99.9% และ 24/7 support
2. ตั้งค่า Server เบื้องต้นสำหรับ Nginx
หลังจาก launch VPS แล้ว ต้องทำการตั้งค่า server เบื้องต้นก่อนติดตั้ง Nginx
ปรับปรุงระบบและติดตั้ง updates
sudo apt update
sudo apt upgrade -y
sudo apt install curl wget git build-essential -y
ตั้งค่า Firewall (UFW)
sudo apt install ufw -y
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw status
ตั้งค่า SSH Key และปิดใช้งาน Password Authentication
# สร้าง SSH directory (ถ้ายังไม่มี)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# เพิ่ม public key ของคุณ
echo "your-public-key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# แก้ไข SSH config
sudo nano /etc/ssh/sshd_config
# เปลี่ยนค่าต่อไปนี้:
# PasswordAuthentication no
# PubkeyAuthentication yes
# PermitRootLogin no
# บันทึกการเปลี่ยนแปลง
sudo systemctl restart ssh
3. ติดตั้ง Nginx บน Cloud VPS
ติดตั้ง Nginx จาก Official Repository
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
ตรวจสอบการติดตั้ง
nginx -v
curl http://localhost
หากเห็นหน้า “Welcome to nginx!” แสดงว่าการติดตั้งสำเร็จแล้ว
4. Nginx Security Hardening — ปรับแต่งความปลอดภัย
การป้องกันข้อมูล security threats เป็นสิ่งสำคัญเมื่อ deploy Nginx ในระบบ production
ปิดใช้งาน Server Tokens
Server tokens ที่เปิดการใช้งาน อาจเปิดเผยข้อมูลเกี่ยวกับเวอร์ชัน Nginx ซึ่งอาจช่วยให้ผู้โจมตีหา vulnerabilities ได้ง่าย ปิดการแสดง server tokens ดังนี้
sudo nano /etc/nginx/nginx.conf
# เพิ่มหรือแก้ไข:
server_tokens off;
จำกัด HTTP Methods
# ในบล็อก server{}
location / {
limit_except GET HEAD POST {
deny all;
}
}
เพิ่ม Security Headers
# ในบล็อก server{}
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 "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
5. SSL/TLS Configuration — ตั้งค่า HTTPS
ติดตั้ง Certbot สำหรับ Let’s Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot certonly --nginx -d yourdomain.com -d www.yourdomain.com
ตั้งค่า Nginx สำหรับ HTTPS
sudo nano /etc/nginx/sites-available/yourdomain.com
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# SSL Configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# HSTS Header
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://localhost:3000; # หรือ port ของแอป
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
เปิดใช้งาน site และ test configuration:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
สร้าง cron job เพื่อ auto-renew certificate:
sudo certbot renew --dry-run # ทดสอบก่อน
sudo systemctl enable certbot.timer # เปิดใช้งาน auto-renewal
6. Nginx Performance Tuning — ปรับแต่งประสิทธิภาพ
ปรับ Worker Processes และ Connections
sudo nano /etc/nginx/nginx.conf
# จำนวน worker processes ควรเท่ากับจำนวน CPU cores
worker_processes auto;
# จำนวน connection ที่แต่ละ worker สามารถจัดการได้
events {
worker_connections 2048;
use epoll; # สำหรับ Linux
}
# ใช้ gzip compression
http {
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
Caching Configuration
# เพิ่มใน http block
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
# ในบล็อก server{}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
expires 365d;
add_header Cache-Control "public, immutable";
}
# สำหรับ Dynamic Content
location / {
proxy_cache my_cache;
proxy_cache_valid 200 10m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
7. Monitoring และ Alerting — ติดตามประสิทธิภาพ
การติดตาม Nginx ในระบบ production เป็นสิ่งจำเป็นเพื่อรับรู้ปัญหาและจัดการได้ทันที
เปิดใช้งาน Nginx Status Module
sudo nano /etc/nginx/sites-available/yourdomain.com
# เพิ่มใน server block
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow your-monitoring-server-ip;
deny all;
}
sudo nginx -t && sudo systemctl reload nginx
ติดตั้ง Prometheus + Node Exporter
# ติดตั้ง Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
sudo mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
# สร้าง systemd service
sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
8. Log Management — จัดการ Log Files
Nginx สร้าง access logs และ error logs ที่สามารถกลายเป็นขนาดใหญ่มาก โดยเฉพาะในเว็บไซต์ที่มี traffic สูง ควรตั้งค่า log rotation เพื่อเก็บ log ได้อย่างมีประสิทธิภาพ
ตั้งค่า Logrotate
sudo nano /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate {
if [ -d /etc/logrotate.d/httpd-prerotate.d ]; then \
run-parts /etc/logrotate.d/httpd-prerotate.d; \
fi
}
postrotate {
if [ -f /var/run/nginx.pid ]; then \
kill -USR1 `cat /var/run/nginx.pid`; \
fi
}
}
Centralized Logging (ตัวเลือก)
สำหรับ environment ที่มีหลาย servers ลองใช้ ELK Stack (Elasticsearch, Logstash, Kibana) หรือ Loki สำหรับ centralized logging
9. Backup Strategy — กลยุทธการ Backup
Backup Configuration Files
# สร้าง script backup
sudo nano /usr/local/bin/backup-nginx.sh
#!/bin/bash
BACKUP_DIR="/backup/nginx-$(date +%Y%m%d-%H%M%S)"
mkdir -p $BACKUP_DIR
cp -r /etc/nginx $BACKUP_DIR/
tar czf ${BACKUP_DIR}.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR
echo "Nginx backup completed"
sudo chmod +x /usr/local/bin/backup-nginx.sh
# ตั้งค่า cron job
sudo crontab -e
0 2 * * * /usr/local/bin/backup-nginx.sh
Backup Website Content
# Backup website files
sudo tar czf /backup/website-$(date +%Y%m%d).tar.gz /var/www/html/
# Upload ไปยัง external storage (AWS S3, Google Cloud Storage, เป็นต้น)
aws s3 cp /backup/website-*.tar.gz s3://your-bucket/backups/
10. Load Balancing และ High Availability
ใช้ Nginx เป็น Load Balancer
upstream backend {
server app1.example.com weight=1;
server app2.example.com weight=1;
server app3.example.com weight=1;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
11. CDN Integration — บูรณาการกับ CDN
บูรณาการ Nginx กับ CDN เช่น Cloudflare จะช่วยปรับปรุงประสิทธิภาพและลดโหลดบน server
ตั้งค่า Nginx สำหรับ Cloudflare
# อนุญาต Cloudflare IPs เท่านั้น
geo $http_cf_connecting_ip {
default 0;
~^(?:103\.21\.|103\.22\.|103\.23\.|103\.24\.|103\.25\.|103\.26\.|103\.27\.|103\.28\.|103\.29\.|103\.30\.|103\.31\.|104\.16\.|104\.17\.|104\.18\.|104\.19\.|104\.20\.|104\.21\.|104\.22\.|104\.23\.|104\.24\.|104\.25\.|104\.26\.|104\.27\.|104\.28\.|104\.29\.|104\.30\.|104\.31\.) 1;
}
server {
listen 80;
server_name yourdomain.com;
if ($http_cf_connecting_ip = 0) {
return 403;
}
# Cache static assets
location ~* \.(jpg|jpeg|png|gif|css|js|svg|webp)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
12. Auto-Scaling Considerations
หากความต้องการของ traffic นั้น unpredictable หรือมี spike ในช่วงบางเวลา ลองพิจารณา auto-scaling solutions
ใช้ Kubernetes กับ Nginx Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
ingressClassName: nginx
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 3000
13. Caching Strategies — กลยุทธการ Caching
Browser Caching
# Cache static assets สำหรับเบราว์เซอร์
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
Server-side Caching
# ใช้ FastCGI Cache สำหรับ PHP applications
fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=FASTCGICACHE:100m inactive=60m;
location ~ \.php$ {
fastcgi_cache FASTCGICACHE;
fastcgi_cache_valid 200 60m;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
14. High-Traffic Handling — การจัดการ High Traffic
Rate Limiting
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=api:10m rate=100r/m;
server {
location / {
limit_req zone=general burst=20 nodelay;
}
location /api/ {
limit_req zone=api burst=50 nodelay;
}
}
Connection Timeouts
keepalive_timeout 65;
client_max_body_size 100M;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;
15. Disaster Recovery Plan — แผนสำรองช่องทาง
Regular Backups
- สำรองข้อมูล configuration files และ website content ทุกวัน
- เก็บ backups ใน multiple locations (local + remote)
- ทดสอบการ restore จาก backups อย่างน้อยทีละเดือน
Failover Setup
upstream backend {
server primary-server.com;
server backup-server.com backup;
}
16. Maintenance และ Updates
ปรับปรุง Nginx เป็นเวอร์ชันล่าสุด
sudo apt update
sudo apt upgrade nginx -y
sudo systemctl restart nginx
nginx -v
ตรวจสอบ SSL Certificate Expiry
# ตรวจสอบวันหมดอายุ certificate
certbot certificates
# ตั้ง alert สำหรับการหมดอายุ
echo "0 0 * * * certbot renew --quiet && systemctl reload nginx" | crontab -
17. Production Checklist — เช็คลิสต์สำหรับ Production
| Item | Status | Notes |
| SSL/TLS Configuration | ✓ | HTTPS enabled, TLSv1.2+ only |
| Firewall Rules | ✓ | UFW enabled, ports 22/80/443 allowed |
| Security Headers | ✓ | HSTS, X-Frame-Options, CSP configured |
| Server Tokens Disabled | ✓ | server_tokens off; |
| Gzip Compression | ✓ | Enabled for text/HTML/CSS/JS |
| Log Rotation | ✓ | Logrotate configured |
| Monitoring Setup | ✓ | Prometheus/Node Exporter running |
| Backups Automated | ✓ | Daily backups, tested restore |
| Rate Limiting | ✓ | Configured for general and API |
| CDN Integration | ✓ | Cloudflare or similar configured |
| Update Strategy | ✓ | Auto-updates enabled |
| Disaster Recovery | ✓ | Failover plan documented |
สรุป
Nginx เป็น web server ที่มีประสิทธิภาพสูงและเหมาะสำหรับใช้งาน บน Cloud VPS เมื่อตั้งค่าและปรับแต่งให้ถูกต้อง ด้วยการปฏิบัติตามหลักการที่เป็น best practices ในบทความนี้ คุณจะสามารถ:
- สร้าง Nginx server ที่ปลอดภัยและป้องกัน security threats ได้อย่างมีประสิทธิภาพ
- ปรับปรุงประสิทธิภาพและลด latency ผ่านการ tuning และ caching
- จัดการและติดตาม Nginx ในระบบ production ได้อย่างมีประสิทธิภาพ
- เตรียมพร้อมสำหรับ disaster recovery และ high-traffic scenarios
- บำรุงรักษา Nginx อย่างมีประสิทธิภาพ โดยลดการ downtime และความเสี่ยง
การตั้งค่า Nginx ที่ถูกต้องนั้นต้องใช้เวลาและความเข้าใจในการกำหนดค่า แต่ผลประโยชน์ที่จะได้รับนั้นคุ้มค่ากับความพยายาม กระดวนวร! (Best of luck!)
แนะนำ DE Cloud VPS สำหรับ Nginx Setup
Dot Enterprise Cloud VPS มี features ที่เหมาะสำหรับการตั้งค่า Nginx production-grade ทั้ง cloud VPS ที่ปรับขนาดได้ การรักษาความปลอดภัยที่เข้มแข็ง และ 24/7 technical support คุณสามารถเลือก VPS specs ที่เหมาะกับความต้องการของคุณ ทั้งสำหรับเว็บไซต์ขนาดเล็กถึง application ขนาดใหญ่
ลองใช้ DE Cloud VPS วันนี้และสัมผัสความแตกต่างของ managed infrastructure ที่เสถียร ปลอดภัย และทรงประสิทธิภาพ ไปที่ Cloud VPS หรือ Cloud Hosting เพื่อดูตัวเลือกและราคาที่เหมาะสมกับงานของคุณ

