Nginx

Workshop: ตั้งค่า Nginx สำหรับเว็บไซต์ Multi-tenant บน Cloud VPS

การจัดการเว็บไซต์หลายรายจากเซิร์ฟเวอร์เดียวเป็นหนึ่งในความท้าทายที่ผู้ดูแลระบบต้องเผชิญ บทความนี้จะอธิบายวิธีการตั้งค่า Nginx สำหรับเว็บไซต์ Multi-tenant บน Cloud VPS อย่างเชิ่วชาญ เพื่อให้คุณสามารถจัดการโปรเจกต์หลายรายได้อย่างมีประสิทธิภาพ สมดุล และปลอดภัย Workshop นี้จะครอบคลุมทุกด้านตั้งแต่การออกแบบสถาปัตยกรรม การตั้งค่า Server Block ไปจนถึงการรักษาความปลอดภัยด้วย SSL และการจัดการทรัพยากร

Nginx Multi-tenant Cloud VPS เป็นโซลูชันที่ประหยัดต้นทุน เพราะช่วยให้คุณสามารถใช้เซิร์ฟเวอร์เดียวเพื่อให้บริการเว็บไซต์จำนวนมาก โดยสามารถจัดสรรทรัพยากรได้อย่างเหมาะสมและสนับสนุนการขยายตัวของธุรกิจของคุณ ในการค้นหา Nginx Multi-tenant solution ที่มีประสิทธิภาพสูงบน Cloud VPS คุณจะพบว่า Dot Enterprise (DE) นำเสนอบริการ Cloud VPS ที่มีความมั่นคง เสถียร และสนับสนุนการจัดการ Nginx Multi-tenant ได้อย่างสมบูรณ์

ความเข้าใจเกี่ยวกับ Multi-tenant Architecture

Multi-tenant คืออะไร

Multi-tenant หรือ “หลายผู้เช่า” หมายถึงสถาปัตยกรรมการทำงานที่อนุญาตให้เซิร์ฟเวอร์เดียวให้บริการผู้ใช้หรือโปรเจกต์หลายราย โดยแต่ละผู้เช่าจะได้รับพื้นที่และทรัพยากรที่แยกออกมา ดังนั้นจึงมั่นใจได้ว่าข้อมูลของผู้เช่าคนหนึ่งจะไม่สามารถเข้าถึงข้อมูลของผู้เช่นอื่นได้

การใช้ Nginx Multi-tenant บน Cloud VPS เป็นประโยชน์อย่างมากสำหรับ

  • บริษัทให้เช่า hosting หรือ domain reseller
  • บริษัทที่มีเว็บไซต์หลายรายและต้องการจัดการจากที่เดียว
  • ผู้พัฒนาเว็บไซต์ที่มีลูกค้าจำนวนมาก
  • สตาร์ทอัพที่ต้องการลดต้นทุนการโฮสติ้ง

ประโยชน์ของ Nginx Multi-tenant Cloud VPS

หากคุณเลือกใช้ Nginx Multi-tenant บน Cloud VPS คุณจะได้รับประโยชน์หลักดังนี้

  • ประหยัดต้นทุน: ไม่จำเป็นต้องซื้อเซิร์ฟเวอร์หลายเครื่องเพื่อให้บริการเว็บไซต์ที่หลากหลาย
  • บริหารจัดการง่าย: สามารถจัดการเว็บไซต์ทั้งหมดจากจุดเดียว
  • ประสิทธิภาพสูง: Nginx มีความสามารถในการจัดการ request จำนวนมากในเวลาเดียวกัน
  • ความปลอดภัย: สามารถแยกโปรเจกต์และผู้ใช้ให้อย่างปลอดภัย
  • ความยืดหยุ่น: มีความเป็นไปได้ในการขยายขนาดเซิร์ฟเวอร์ตามความต้องการ

การออกแบบสถาปัตยกรรม Nginx Multi-tenant

ก่อนเริ่มตั้งค่า Nginx Multi-tenant ให้คิดอย่างรอบคอบเกี่ยวกับสถาปัตยกรรมของระบบ สถาปัตยกรรมที่ดีจะช่วยให้ระบบสามารถจัดการ request ได้อย่างมีประสิทธิภาพและปลอดภัย

แบบจำลองพื้นฐาน (Basic Model)

แบบจำลองพื้นฐานของ Multi-tenant Nginx มีลักษณะดังนี้

  • Nginx ทำหน้าที่เป็น Reverse Proxy ที่นำ request ไปยัง Backend Application Server
  • แต่ละ Tenant (ผู้เช่า) อยู่ในแอปพลิเคชัน Backend เดียวกันหรือคนละเซิร์ฟเวอร์กัน
  • Nginx ใช้ Server Block เพื่อแยกการจัดการของแต่ละ Domain
  • Database ของแต่ละ Tenant สามารถอยู่ในเซิร์ฟเวอร์เดียวกันหรือแยกกันตามความปลอดภัยที่ต้องการ

เลือกประเภท Multi-tenant Architecture

มีหลายประเภท Multi-tenant Architecture ที่สามารถเลือกใช้ได้ตามความต้องการ

  • Single Database, Shared Schema: ทั้งหมด Tenant ใช้ Database เดียวกัน และ Schema เดียวกัน (แบบง่ายที่สุด แต่ความปลอดภัยต่ำ)
  • Single Database, Separate Schema: ทั้งหมด Tenant ใช้ Database เดียวกัน แต่แต่ละ Tenant มี Schema ของตัวเอง (ดีกว่าแบบแรก ความปลอดภัยเพิ่มขึ้น)
  • Separate Database: แต่ละ Tenant มี Database เป็นของตัวเอง (ความปลอดภัยสูงสุด แต่ต้องทรัพยากรมากขึ้น)

ติดตั้ง Nginx บน Cloud VPS

ขั้นตอนแรกคือการติดตั้ง Nginx บนเซิร์ฟเวอร์ Cloud VPS ของคุณ ต่อไปนี้เป็นขั้นตอนการติดตั้ง Nginx บน Ubuntu/Debian

ติดตั้งแพ็คเกจ Nginx

ในการติดตั้ง Nginx บน Ubuntu หรือ Debian ให้ใช้คำสั่ง apt-get ดังต่อไปนี้

sudo apt-get update
sudo apt-get install nginx

เริ่มต้นและเปิดใช้งาน Nginx

หลังจากติดตั้งแล้ว ให้เริ่มต้นบริการ Nginx และปรับให้เปิดใช้งานอัตโนมัติเมื่อเซิร์ฟเวอร์เริ่มต้น

sudo systemctl start nginx
sudo systemctl enable nginx

ตั้งค่า Nginx Server Block สำหรับ Multi-tenant

Nginx Server Block นั้นเหมือนกับ Virtual Host ใน Apache Server Block นี้เป็นการตั้งค่าสำหรับแต่ละโดเมนหรือเว็บไซต์ การตั้งค่า Server Block ให้เหมาะสมจึงเป็นสิ่งสำคัญในการจัดการ Multi-tenant

สร้าง Server Block สำหรับ Tenant แรก

ลองสร้าง Server Block ไฟล์สำหรับเว็บไซต์ที่ชื่อว่า “tenant1.com”

sudo nano /etc/nginx/sites-available/tenant1.com

จากนั้นวาง Server Block ตัวอย่างดังนี้ลงในไฟล์

server {
    listen 80;
    listen [::]:80;
    server_name tenant1.com www.tenant1.com;

    root /var/www/tenant1.com/html;
    index index.html index.htm index.nginx-debian.html;

    # Log files
    access_log /var/log/nginx/tenant1.com.access.log;
    error_log /var/log/nginx/tenant1.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    # Prevent access to hidden files
    location ~ /\. {
        deny all;
    }
}

เปิดใช้งาน Server Block

หลังจากสร้างไฟล์ Server Block แล้ว ให้สร้าง Symbolic Link เพื่อเปิดใช้งาน

sudo ln -s /etc/nginx/sites-available/tenant1.com /etc/nginx/sites-enabled/

สร้าง Directory สำหรับ Tenant

สร้าง Directory สำหรับเก็บไฟล์ของ Tenant

sudo mkdir -p /var/www/tenant1.com/html
sudo chown -R www-data:www-data /var/www/tenant1.com
sudo chmod -R 755 /var/www/tenant1.com

ทดสอบการตั้งค่า Nginx

ก่อนรีเซิร์ต Nginx ให้ทดสอบการตั้งค่า

sudo nginx -t

หากไม่มีข้อผิดพลาด ก็จะมีผลลัพธ์ดังนี้

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration will be tested successfully

รีเซิร์ต Nginx

หลังจากตรวจสอบแล้ว ให้รีเซิร์ต Nginx

sudo systemctl reload nginx

ตั้งค่า SSL/TLS สำหรับ Multi-tenant

ความปลอดภัยของเว็บไซต์เป็นเรื่องสำคัญ การใช้ SSL/TLS Certificate จึงเป็นสิ่งที่จำเป็น บทส่วนนี้จะอธิบายวิธีการตั้งค่า SSL/TLS สำหรับ Multi-tenant

ติดตั้ง Certbot

Certbot เป็นเครื่องมือสำหรับขออนุญาต SSL Certificate จากจาก Let’s Encrypt ซึ่งเป็นหนึ่งในบริการที่ให้ SSL Certificate ฟรี

sudo apt-get install certbot python3-certbot-nginx

ขออนุญาต SSL Certificate

ขออนุญาต SSL Certificate สำหรับ Domain ของ Tenant ด้วย Certbot

sudo certbot --nginx -d tenant1.com -d www.tenant1.com

Certbot จะแสดงคำถามเพื่อให้คุณตัดสินใจว่าต้องการให้ Redirect HTTP ไปยัง HTTPS หรือไม่ แนะนำให้เลือก Redirect เพื่อเพิ่มความปลอดภัย

ทดสอบการต่ออายุ SSL Certificate โดยอัตโนมัติ

ให้ทดสอบว่า Certbot สามารถต่ออายุ Certificate โดยอัตโนมัติได้หรือไม่

sudo certbot renew --dry-run

ตั้งค่า Upstream และ Load Balancing

หากคุณมี Backend Application Server หลายเครื่อง คุณสามารถตั้งค่า Load Balancing ใน Nginx ได้ ซึ่งจะช่วยให้การกระจายงานของ Request นั้นเป็นไปอย่างสมดุลและมีประสิทธิภาพมากขึ้น

ตั้งค่า Upstream Server

ในไฟล์ nginx.conf หรือในไฟล์ Server Block ของคุณ ให้เพิ่มส่วน upstream ตัวอย่างดังนี้

upstream backend_servers {
    server 192.168.1.10:8000;
    server 192.168.1.11:8000;
    server 192.168.1.12:8000;
}

ใช้ Upstream ใน Server Block

ในส่วน location ของ Server Block ให้ใช้ proxy_pass เพื่อส่ง Request ไปยัง Upstream Server

location / {
    proxy_pass http://backend_servers;
    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;
}

ตั้งค่าการบันทึก (Logging)

การบันทึก Request เป็นสิ่งสำคัญสำหรับการ Debug และการตรวจสอบ Performance Nginx ช่วยให้คุณสามารถตั้งค่าการบันทึกสำหรับแต่ละ Tenant ได้อย่างแยกกัน

ตั้งค่า Access Log สำหรับแต่ละ Tenant

ในแต่ละ Server Block ให้ระบุ Access Log ไฟล์สำหรับ Tenant นั้น ตัวอย่างดังนี้

server {
    ...
    access_log /var/log/nginx/tenant1.com.access.log;
    error_log /var/log/nginx/tenant1.com.error.log;
    ...
}

ตั้งค่า Log Format แบบอื่น ๆ

Nginx มี Format สำหรับบันทึกตั้งแต่พื้นฐาน เช่น combined, main ไปจนถึง Custom Format คุณสามารถสร้าง Custom Log Format ใน nginx.conf ได้

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

log_format detailed '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time"';

access_log /var/log/nginx/access.log main;

ตั้งค่าความปลอดภัยและ Best Practices

เมื่อจัดการ Multi-tenant ความปลอดภัยเป็นสิ่งที่สำคัญมากขึ้น ต่อไปนี้คือ Best Practices สำหรับการตั้งค่า Nginx Multi-tenant อย่างปลอดภัย

ป้องกัน Directory Listing

เพื่อป้องกันไม่ให้ผู้เข้าชมสามารถเห็น Directory Listing ให้ปิดใช้งาน autoindex

autoindex off;

ป้องกันการเข้าถึงไฟล์ที่ซ่อน

ป้องกันการเข้าถึงไฟล์ที่มีชื่อขึ้นต้นด้วยจุด (hidden files) เช่น .htaccess, .git เป็นต้น

location ~ /\. {
    deny all;
}

ตั้งค่า Security Headers

เพิ่ม 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 "no-referrer-when-downgrade" always;

ปิด Server Signature

ปิด Server Signature เพื่อไม่ให้เปิดเผยเวอร์ชันของ Nginx

server_tokens off;

จำกัด Request Size

จำกัดขนาด Request เพื่อป้องกัน Buffer Overflow Attack

client_max_body_size 10M;

การ Monitoring และ Optimization

หลังจากตั้งค่า Nginx Multi-tenant เสร็จแล้ว ให้ติดตามประสิทธิภาพและปรับปรุงการตั้งค่า เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด

ตรวจสอบ Nginx Process

ตรวจสอบว่า Nginx Process ทำงานอยู่หรือไม่

ps aux | grep nginx

ตรวจสอบ Nginx Configuration

ตรวจสอบการตั้งค่า Nginx ของคุณปัจจุบัน

nginx -T

ตรวจสอบ Log Files

ตรวจสอบ Log Files เพื่อค้นหาปัญหา

tail -f /var/log/nginx/tenant1.com.access.log
tail -f /var/log/nginx/tenant1.com.error.log

Optimize Nginx Configuration

บางตัวเลือกการตั้งค่า Nginx ที่ช่วยปรับปรุงประสิทธิภาพ


# เพิ่มจำนวน Worker Connections
worker_processes auto;
worker_connections 1024;

# เปิดใช้ Gzip Compression
gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss;

# ตั้งค่า Keepalive
keepalive_timeout 65;
keepalive_requests 100;

# ตั้งค่า Caching
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

สรุป

ความสามารถในการจัดการหลายโปรเจกต์เว็บไซต์จากเซิร์ฟเวอร์เดียวเป็นหนึ่งในสิ่งที่ทำให้ Nginx กลายเป็นตัวเลือกยอดนิยมสำหรับผู้ดูแลระบบ Workshop นี้ได้ครอบคลุมถึงการออกแบบสถาปัตยกรรม Multi-tenant การตั้งค่า Server Block ตั้งค่า SSL/TLS Certificate Load Balancing Logging และ Best Practices เพื่อเพิ่มความปลอดภัย โดยการทำตามขั้นตอนเหล่านี้ คุณจะสามารถจัดการเว็บไซต์ Multi-tenant บน Cloud VPS ของ Dot Enterprise ได้อย่างมีประสิทธิภาพและปลอดภัย

แนะนำบริการ DE

หากคุณกำลังมองหาเซิร์ฟเวอร์ Cloud VPS ที่เหมาะสำหรับการจัดการเว็บไซต์ Multi-tenant โปรดพิจารณา Dot Enterprise (DE) Cloud VPS Service บริการ Cloud VPS ของ DE ได้รับการออกแบบให้มีประสิทธิภาพสูง เสถียร และมีความปลอดภัยอย่างสูง คุณสามารถเลือก Specifications ของเซิร์ฟเวอร์ได้ตามต้องการ และจ่ายเฉพาะสิ่งที่คุณใช้เท่านั้น บริการ Cloud VPS ของ DE ยังมี Support ที่ดีและการอัพเดตระบบ OS ที่สม่ำเสมอ

ติดต่อเรา: https://de.co.th/cloud-vps