- 1. บทนำสู่ Load Balancing และ CDN
- 2. รู้จัก Nginx
- 3. Kong as Reverse Proxy
- 4. Cloudflare as DNS Server / CDN
- 5. การทำ Route Services สำหรับ Web Application
- 6. การทำ Multi-Routing
- 7. Load Balance
- 8. แนวทางการประยุกต์ใช้ในองค์กร
ในยุคที่เทคโนโลยีดิจิทัลเติบโตอย่างรวดเร็ว การให้บริการแอปพลิเคชันออนไลน์ต้องเผชิญกับความท้าทายด้านประสิทธิภาพ ความเสถียร และความปลอดภัย โดยเฉพาะเมื่อมีผู้ใช้งานจำนวนมาก ทำให้เกิดโซลูชันสองประเภทที่สำคัญอย่างยิ่ง:
Load Balancing: คือกระบวนการกระจายการร้องขอ (traffic) ไปยังเซิร์ฟเวอร์หลายๆ เครื่อง เพื่อแบ่งเบาภาระการทำงาน ทำให้ระบบมีความสามารถในการรองรับผู้ใช้งานมากขึ้น และมีความเสถียรสูง
Content Delivery Network (CDN): คือเครือข่ายของเซิร์ฟเวอร์ที่กระจายตัวอยู่ในภูมิภาคต่างๆ ทั่วโลก เพื่อจัดเก็บ cache ของเนื้อหาเว็บไซต์เช่น รูปภาพ วิดีโอ CSS และไฟล์ JavaScript เพื่อให้ผู้ใช้งานสามารถเข้าถึงเนื้อหาได้จากเซิร์ฟเวอร์ที่อยู่ใกล้ที่สุด ลดเวลาในการโหลดหน้าเว็บ
- Load Balancing แบบเดิม: ใช้อุปกรณ์ฮาร์ดแวร์เฉพาะ (Hardware Load Balancer) ที่มีราคาแพงและขาดความยืดหยุ่น
- การ Cache แบบเดิม: องค์กรต้องติดตั้งเซิร์ฟเวอร์ในหลายๆ ภูมิภาค และจัดการซิงค์ข้อมูลเอง ซึ่งมีต้นทุนสูงและซับซ้อน
- ความท้าทาย: ขาดความยืดหยุ่น ปรับขยายยาก ต้นทุนสูง และต้องใช้ทีมงานที่มีความชำนาญเฉพาะด้าน
- Software-Defined Load Balancing: ใช้ซอฟต์แวร์เช่น Nginx, HAProxy หรือ Kong ซึ่งสามารถรันบน commodity hardware ทั่วไปได้
- Cloud-Based CDN: บริการ CDN แบบ cloud เช่น Cloudflare, Akamai ที่ให้บริการแบบ global และมีค่าใช้จ่ายที่เหมาะสม
- ข้อดี: ยืดหยุ่นสูง ปรับขนาดได้ง่าย รองรับการทำงานแบบอัตโนมัติ มีฟีเจอร์ความปลอดภัยที่ทันสมัย และบูรณาการกับระบบอื่นๆ ได้ดี
เหตุผลที่วิธีการปัจจุบันดีกว่า:
- ความยืดหยุ่นและปรับขนาดได้: ซอฟต์แวร์ Load Balancer และ CDN แบบ cloud สามารถเพิ่มหรือลดขนาดตามความต้องการได้อย่างรวดเร็ว
- ต้นทุนที่ลดลง: ไม่จำเป็นต้องซื้ออุปกรณ์ราคาแพงและลดค่าใช้จ่ายในการดูแลรักษา
- การบูรณาการที่ดีขึ้น: รองรับการทำงานร่วมกับเครื่องมือและบริการอื่นๆ ผ่าน API
- ความสามารถด้านความปลอดภัย: มีระบบป้องกัน DDoS, WAF และฟีเจอร์ความปลอดภัยอื่นๆ
- การให้บริการระดับโลก: CDN ปัจจุบันมี edge servers หลายพันแห่งทั่วโลก
เหตุผลที่จำเป็น:
- การเติบโตของข้อมูล: ปริมาณข้อมูลและการใช้งานเว็บไซต์เพิ่มขึ้นอย่างมหาศาล
- ความคาดหวังของผู้ใช้: ผู้ใช้คาดหวังประสบการณ์ที่รวดเร็ว เสถียร ไม่ว่าจะอยู่ที่ไหนในโลก
- ความท้าทายด้านความปลอดภัย: ภัยคุกคามไซเบอร์มีความซับซ้อนมากขึ้น
- โครงสร้างที่กระจายตัว: แอปพลิเคชันปัจจุบันมักใช้สถาปัตยกรรมแบบไมโครเซอร์วิส ต้องการการจัดเส้นทาง (routing) ที่ชาญฉลาด
- การแข่งขันทางธุรกิจ: องค์กรต้องการมอบประสบการณ์ที่ดีที่สุดให้ผู้ใช้เพื่อรักษาความได้เปรียบทางการแข่งขัน
graph TB
subgraph "อดีต"
A[Hardware Load Balancer] --> B1[เซิร์ฟเวอร์ 1]
A --> B2[เซิร์ฟเวอร์ 2]
A --> B3[เซิร์ฟเวอร์ 3]
C[ผู้ใช้ทั่วโลก] --> D[Origin Server]
end
subgraph "ปัจจุบัน"
E[Software Load Balancer] --> F1[คอนเทนเนอร์ 1]
E --> F2[คอนเทนเนอร์ 2]
E --> F3[คอนเทนเนอร์ 3]
E --> F4[คอนเทนเนอร์ 4]
E --> F5[คอนเทนเนอร์...]
G[ผู้ใช้ทั่วโลก] --> H[CDN Edge Server ใกล้ผู้ใช้]
H --> I[Origin Server]
end
Nginx (อ่านว่า "เอ็นจินเอ็กซ์") เป็น web server, reverse proxy, และ load balancer ที่มีประสิทธิภาพสูง สร้างขึ้นเพื่อแก้ปัญหา C10k (ความท้าทายในการรองรับการเชื่อมต่อพร้อมกัน 10,000 connections) โดยใช้สถาปัตยกรรมแบบ event-driven และ asynchronous ทำให้สามารถจัดการกับ traffic จำนวนมากได้ด้วยทรัพยากรที่จำกัด
- ประสิทธิภาพสูง: สามารถจัดการ concurrent connections จำนวนมากด้วยการใช้หน่วยความจำน้อย
- ความเสถียร: เป็นที่รู้จักในด้านความเสถียรและความน่าเชื่อถือ
- ความยืดหยุ่น: สามารถทำได้หลายบทบาท เช่น web server, reverse proxy, load balancer, API gateway
- การปรับแต่ง: มี configuration ที่ยืดหยุ่นและ module system ที่ขยายความสามารถได้
- ชุมชนขนาดใหญ่: มีการสนับสนุนจากชุมชนและมี documentation ที่ดี
- Open Source: มีทั้งเวอร์ชัน open-source และ commercial (Nginx Plus)
| คุณสมบัติ | Nginx | Apache HTTP Server | IIS |
|---|---|---|---|
| Architecture | Event-driven, asynchronous | Process/thread-based | Asynchronous (recent versions) |
| Performance under high load | ดีเยี่ยม | ปานกลาง | ดี |
| Memory usage | ต่ำ | สูงกว่า | ปานกลางถึงสูง |
| OS support | Cross-platform (Linux, Unix, Windows) | Cross-platform | Windows only |
| Config syntax | Centralized, มีการใช้ blocks | Directory-based (.htaccess) | GUI และ XML |
| Market share (2023) | ~33% | ~31% | ~15% |
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginxsudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx- ไฟล์หลัก: /etc/nginx/nginx.conf
- Sites available: /etc/nginx/sites-available/
- Sites enabled: /etc/nginx/sites-enabled/
- Log files: /var/log/nginx/
server {
listen 80;
server_name example.com www.example.com;
location / {
root /var/www/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
}Reverse proxy เป็นเซิร์ฟเวอร์ที่อยู่หน้าเว็บเซิร์ฟเวอร์อื่นๆ และส่งต่อคำขอจากไคลเอ็นต์ไปยังเซิร์ฟเวอร์เหล่านั้น
graph LR
A[Client] --> B[Nginx - Reverse Proxy]
B --> C1[Backend Server 1]
B --> C2[Backend Server 2]
B --> C3[Backend Server 3]
server {
listen 80;
server_name myapp.example.com;
location / {
proxy_pass http://backend_server;
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;
}
}upstream backend {
least_conn; # ใช้อัลกอริทึม least connections
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
server_name myapp.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}การตั้งค่า HTTPS ด้วย SSL/TLS:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
# ส่วนที่เหลือของการกำหนดค่า
# ...
}Kong เป็น API Gateway และ Reverse Proxy ที่สร้างบนพื้นฐานของ Nginx และ LuaJIT ออกแบบมาเพื่อจัดการกับ API ที่มีปริมาณมาก มีความยืดหยุ่นสูง และมี plugin ecosystem ที่กว้างขวาง Kong ทำหน้าที่เป็นชั้นกลางระหว่างไคลเอ็นต์และบริการต่างๆ โดยรองรับทั้งแบบ self-hosted และ cloud-managed service
| คุณสมบัติ | Kong | Nginx ธรรมดา |
|---|---|---|
| API Management | มีระบบจัดการ API แบบครบวงจร | ต้องกำหนดค่าเพิ่มเติมเอง |
| พื้นฐาน | สร้างบน Nginx + LuaJIT | NGINX เอง |
| การขยายความสามารถ | Plugin system แบบรวดเร็ว | ต้องเขียน Module ในภาษา C |
| การจัดการ | Admin API, GUI (Kong Manager) | ไฟล์ config เท่านั้น |
| Authentication | มี plugins หลายแบบ | ต้องกำหนดเอง |
| Rate Limiting | มีในตัว | ต้องกำหนดเอง |
| Analytics | มีในตัว | ต้องใช้โซลูชันภายนอก |
| Microservices | ออกแบบมาเพื่อ microservices | ต้องกำหนดค่าเพิ่มเติม |
# สร้าง network
docker network create kong-net
# ติดตั้ง database
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kongpass" \
postgres:13
# เตรียม database migrations
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kongpass" \
kong:latest kong migrations bootstrap
# เริ่ม Kong
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kongpass" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latestKong มีแนวคิดสำคัญ 2 อย่าง:
- Services: แทนปลายทางของ API หรือไมโครเซอร์วิส
- Routes: กำหนดว่าคำขอใดควรไปที่ service ไหน
# สร้าง Service
curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org'
# สร้าง Route
curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'protocols[]=http' \
--data 'hosts[]=example.com' \
--data 'paths[]=/api'Kong มี plugins มากมายที่ช่วยเพิ่มความสามารถให้กับ API Gateway:
curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=rate-limiting' \
--data 'config.minute=5' \
--data 'config.hour=100'- Authentication: JWT, Key Authentication, OAuth2, LDAP
- Security: CORS, IP Restriction, Bot Detection
- Traffic Control: Rate Limiting, Request Size Limiting
- Analytics & Monitoring: Prometheus, Datadog, Zipkin
- Transformation: Request Transformer, Response Transformer
- Logging: HTTP Log, TCP Log, Syslog
graph TD
A[Client] --> B[Kong API Gateway]
B --> C1[Auth Service]
B --> C2[User Service]
B --> C3[Product Service]
B --> C4[Payment Service]
B --> C5[Notification Service]
# สร้าง Services สำหรับแต่ละ Microservice
curl -i -X POST --url http://localhost:8001/services/ --data 'name=auth-service' --data 'url=http://auth-service:3000'
curl -i -X POST --url http://localhost:8001/services/ --data 'name=user-service' --data 'url=http://user-service:3001'
curl -i -X POST --url http://localhost:8001/services/ --data 'name=product-service' --data 'url=http://product-service:3002'
# สร้าง Routes
curl -i -X POST --url http://localhost:8001/services/auth-service/routes --data 'paths[]=/auth'
curl -i -X POST --url http://localhost:8001/services/user-service/routes --data 'paths[]=/users'
curl -i -X POST --url http://localhost:8001/services/product-service/routes --data 'paths[]=/products'Cloudflare เป็นบริษัทที่ให้บริการด้านความปลอดภัยและประสิทธิภาพของเว็บไซต์ โดยมีบริการหลักๆ ได้แก่ CDN, DNS, DDoS Protection, WAF (Web Application Firewall) และอื่นๆ อีกมากมาย Cloudflare มีเครือข่าย edge locations กว่า 275+ เมืองทั่วโลก ทำให้สามารถส่งมอบเนื้อหาได้อย่างรวดเร็วและปกป้องเว็บไซต์จากภัยคุกคามต่างๆ
- ต้นทุนสูง: CDN เป็นบริการที่มีค่าใช้จ่ายสูง เหมาะสำหรับบริษัทใหญ่เท่านั้น
- การตั้งค่ายาก: ต้องใช้ผู้เชี่ยวชาญในการตั้งค่า
- การทำงานแยกส่วน: บริการ CDN, DNS, และความปลอดภัยมักแยกจากกัน
- ขาดความยืดหยุ่น: การปรับเปลี่ยนการตั้งค่าทำได้ช้าและยาก
- เข้าถึงง่าย: มีแผนฟรี และราคาที่เหมาะสมสำหรับธุรกิจทุกขนาด
- ตั้งค่าง่าย: UI ที่ใช้งานง่าย และมี dashboard ที่เข้าใจได้ง่าย
- บูรณาการ: รวม CDN, DNS, WAF, DDoS protection และบริการอื่นๆ ไว้ในแพลตฟอร์มเดียว
- ยืดหยุ่น: สามารถปรับเปลี่ยนการตั้งค่าได้ทันทีผ่าน dashboard หรือ API
- ขนาดใหญ่: มีเครือข่ายที่ใหญ่ที่สุดแห่งหนึ่งของโลก
Cloudflare DNS เป็นบริการ DNS ที่รวดเร็วและน่าเชื่อถือ มีคุณสมบัติที่โดดเด่นคือ:
- ความเร็ว: เป็นหนึ่งในบริการ DNS ที่เร็วที่สุดในโลก
- ความปลอดภัย: มีการป้องกัน DNS poisoning และ DDoS attacks
- Anycast Network: ใช้เทคโนโลยี Anycast ทำให้คำขอ DNS ไปยัง server ที่ใกล้ที่สุด
- DNSSEC: รองรับการเข้ารหัส DNS เพื่อความปลอดภัยเพิ่มเติม
Cloudflare CDN ช่วยให้เว็บไซต์ทำงานได้เร็วขึ้นด้วยการ cache เนื้อหาสถิตและส่งมอบจาก edge server ที่ใกล้ผู้ใช้มากที่สุด:
- Auto Minify: ลดขนาดไฟล์ HTML, CSS และ JavaScript โดยอัตโนมัติ
- Brotli Compression: การบีบอัดด้วย algorithm ที่มีประสิทธิภาพสูง
- Argo Smart Routing: เลือกเส้นทางเครือข่ายที่เร็วที่สุดจาก edge ไปยัง origin
- Cache Rules: สามารถกำหนดกฎการ cache ได้อย่างละเอียด
- Cache Analytics: วิเคราะห์ประสิทธิภาพการ cache ได้
- สมัครบัญชี: สมัครบัญชีบนเว็บไซต์ Cloudflare
- เพิ่มเว็บไซต์: เพิ่ม domain ของคุณเข้าสู่ระบบ Cloudflare
- ตรวจสอบ DNS Records: Cloudflare จะดึง DNS records ที่มีอยู่ ให้คุณตรวจสอบ
- เปลี่ยน Nameservers: เปลี่ยน nameservers ของ domain ให้ชี้ไปที่ nameservers ของ Cloudflare
- รอการ Propagation: รอให้การเปลี่ยนแปลง nameservers มีผล (อาจใช้เวลา 24-48 ชั่วโมง)
- ตรวจสอบสถานะ: ตรวจสอบว่า domain อยู่ในสถานะ "Active" บน dashboard ของ Cloudflare
Cloudflare มีตัวเลือก SSL/TLS หลายแบบ:
- Off: ไม่ใช้ SSL
- Flexible: เข้ารหัสระหว่างผู้ใช้กับ Cloudflare แต่ไม่เข้ารหัสระหว่าง Cloudflare กับ origin server
- Full: เข้ารหัสตลอดเส้นทาง แต่ไม่ตรวจสอบความถูกต้องของใบรับรองที่ origin server
- Full (Strict): เข้ารหัสตลอดเส้นทางและตรวจสอบความถูกต้องของใบรับรองที่ origin server
Cloudflare รวมบริการ DNS, CDN และ Proxy เข้าด้วยกันในแพลตฟอร์มเดียว ทำให้การทำงานมีประสิทธิภาพและความปลอดภัยสูง
sequenceDiagram
participant User as ผู้ใช้
participant CloudflareDNS as Cloudflare DNS
participant CloudflareCache as Cloudflare Cache/CDN
participant CloudflareSecurity as Cloudflare Security
participant Origin as Origin Server
User->>CloudflareDNS: 1. DNS Query (example.com)
CloudflareDNS-->>User: 2. IP ของ Cloudflare Edge
User->>CloudflareCache: 3. HTTP Request
alt มี Cache
CloudflareCache-->>User: 4a. ส่งข้อมูลจาก Cache
else ไม่มี Cache
CloudflareCache->>CloudflareSecurity: 4b. ตรวจสอบความปลอดภัย
CloudflareSecurity->>Origin: 5. ส่งคำขอไปยัง Origin
Origin-->>CloudflareSecurity: 6. ส่งข้อมูลกลับ
CloudflareSecurity-->>CloudflareCache: 7. ผ่านการตรวจสอบ
CloudflareCache-->>User: 8. ส่งข้อมูลให้ผู้ใช้และเก็บ Cache
end
- DNS Query: ผู้ใช้พิมพ์ URL ในเบราว์เซอร์ เช่น example.com
- Recursive DNS Resolution: DNS resolver ของผู้ใช้ค้นหาข้อมูลจาก DNS server ต่างๆ จนกว่าจะถึง nameserver ของ Cloudflare
- Anycast Routing: คำขอ DNS จะถูกส่งไปยัง Cloudflare DNS server ที่ใกล้ที่สุดด้วยเทคโนโลยี Anycast
- DNS Response: Cloudflare DNS ตอบกลับด้วย IP address ของ Cloudflare edge server (ไม่ใช่ origin server)
- TTL Management: Cloudflare จัดการ Time-To-Live (TTL) เพื่อควบคุมระยะเวลาการ cache DNS records
graph TD
A[ผู้ใช้] -->|1. ค้นหา example.com| B[Local DNS Resolver]
B -->|2. ถาม Root DNS| C[Root DNS Servers]
C -->|3. ตอบข้อมูล TLD Servers| B
B -->|4. ถาม .com TLD| D[.com TLD Servers]
D -->|5. ตอบข้อมูล Cloudflare Nameservers| B
B -->|6. ถาม example.com| E[Cloudflare DNS]
E -->|7. ตอบ IP Cloudflare Edge| B
B -->|8. IP Address| A
A -->|9. HTTP Request| F[Cloudflare Edge]
F -->|10. HTTP Request (ถ้าจำเป็น)| G[Origin Server]
- Edge Server Selection: เมื่อผู้ใช้เชื่อมต่อมาที่ IP address ของ Cloudflare จะถูกนำไปยัง edge server ที่ใกล้ที่สุด
- Cache Lookup: Cloudflare ตรวจสอบว่ามีข้อมูลที่ร้องขอใน cache หรือไม่
- Cache Hit: ถ้ามีข้อมูลใน cache Cloudflare จะส่งข้อมูลนั้นกลับไปยังผู้ใช้ทันที (ไม่ต้องไปถึง origin)
- Cache Miss: ถ้าไม่มีข้อมูลใน cache Cloudflare จะส่งคำขอไปยัง origin server และเก็บผลลัพธ์ไว้ใน cache
- Cache Rules: Cloudflare ใช้กฎต่างๆ ในการกำหนดว่าควรเก็บ cache อะไร นานแค่ไหน
flowchart TD
A[ผู้ใช้] -->|HTTP Request| B[Cloudflare Edge Server]
B -->|Cache Lookup| C{มีใน Cache?}
C -->|Yes| D[ส่งข้อมูลจาก Cache]
C -->|No| E[ส่งคำขอไปยัง Origin]
E --> F[Origin Server]
F -->|ส่งข้อมูลกลับ| G[บันทึกใน Cache]
G --> D
D -->|HTTP Response| A
style C fill:#ffcccc,stroke:#ff6666
style D fill:#ccffcc,stroke:#66ff66
style G fill:#ccccff,stroke:#6666ff
Cloudflare Workers เป็นบริการ serverless computing ที่ช่วยให้นักพัฒนาสามารถรันโค้ด JavaScript และ WebAssembly ที่ edge network ของ Cloudflare ใกล้กับผู้ใช้มากที่สุด
- Edge Computing: รันโค้ดที่ edge servers ใกล้ผู้ใช้
- Serverless: ไม่ต้องจัดการ infrastructure
- Low Latency: เวลาตอบสนองต่ำกว่า cloud functions ทั่วไป
- Global Deployment: deploy ไปยัง edge locations ทั่วโลกในทันที
- KV Storage: เก็บข้อมูลแบบ key-value ใน Workers KV
- Durable Objects: สร้าง stateful applications บน edge
- Cron Triggers: จัดตาราง worker ให้ทำงานตามเวลาที่กำหนด
1. A/B Testing บน Edge
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// สุ่มตัวเลข 0 หรือ 1
const VARIANT = Math.random() < 0.5 ? 'A' : 'B'
// ดึงเนื้อหาตาม variant
const response = await fetch(`https://example.com/${VARIANT}.html`)
// เพิ่ม header เพื่อติดตามผล
const newResponse = new Response(response.body, response)
newResponse.headers.append('X-Variant', VARIANT)
return newResponse
}2. API Authentication
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// ตรวจสอบ API key จาก headers
const apiKey = request.headers.get('X-API-Key')
if (!apiKey || !isValidApiKey(apiKey)) {
return new Response('Unauthorized', { status: 401 })
}
// ส่งคำขอต่อไปยัง origin
return fetch(request)
}
function isValidApiKey(key) {
// Logic ตรวจสอบ key กับ database หรือ KV store
const validKeys = ['key1', 'key2', 'key3']
return validKeys.includes(key)
}Workers KV เป็นระบบจัดเก็บข้อมูลแบบ key-value ที่มีการกระจายตัวทั่วโลก เหมาะสำหรับข้อมูลที่อ่านบ่อยแต่เขียนไม่บ่อย:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
const userId = url.pathname.split('/')[2]
if (!userId) {
return new Response('User ID required', { status: 400 })
}
// อ่านข้อมูลจาก KV store
const userData = await USER_DATA.get(userId, 'json')
if (!userData) {
return new Response('User not found', { status: 404 })
}
return new Response(JSON.stringify(userData), {
headers: { 'Content-Type': 'application/json' }
})
}graph TD
A[Client Request] --> B[Cloudflare Worker]
B --> C{Cache Check}
C -->|Cache Miss| D[Workers KV]
C -->|Cache Hit| E[Return Cached Data]
D -->|KV Miss| F[Origin Server]
D -->|KV Hit| G[Return KV Data]
F --> H[Process Response]
H --> I[Store in KV]
G --> J[Return to Client]
E --> J
I --> J
Cloudflare Pages เป็นบริการ hosting สำหรับ static sites และ JAMstack applications ที่มีการทำงานร่วมกับ GitHub และ GitLab เพื่อ automate deployment
- Continuous Deployment: เชื่อมต่อกับ GitHub/GitLab เพื่อ auto-deploy เมื่อมีการ push
- Preview Deployments: สร้าง preview URL สำหรับแต่ละ branch
- Custom Domains: ใช้ custom domain กับ SSL แบบอัตโนมัติ
- Integrated Functions: ใช้ Cloudflare Workers ร่วมกับ Pages ได้อย่างไร้รอยต่อ
- Analytics: ติดตามการใช้งานและประสิทธิภาพ
- Large Site Support: รองรับเว็บไซต์ขนาดใหญ่ที่มีไฟล์จำนวนมาก
Cloudflare Pages รองรับ frameworks ยอดนิยมเกือบทั้งหมด:
| Framework | Build Command | Build Output Directory |
|---|---|---|
| React (Create React App) | npm run build |
build |
| Next.js | npm run build |
.next or out |
| Vue.js | npm run build |
dist |
| Svelte | npm run build |
build or public |
| Angular | npm run build |
dist/project-name |
| Astro | npm run build |
dist |
Cloudflare Zero Trust (เดิมชื่อ Cloudflare Access และ Cloudflare Gateway) เป็นชุดเครื่องมือสำหรับการรักษาความปลอดภัยเครือข่ายแบบ Zero Trust:
- Access: ควบคุมการเข้าถึงแอปพลิเคชันภายในองค์กร (internal applications)
- Gateway: กรองและติดตาม traffic ของอุปกรณ์
- WARP Client: VPN client สำหรับเชื่อมต่ออุปกรณ์กับ Cloudflare network
- Browser Isolation: เรียกใช้เว็บในสภาพแวดล้อมแยกส่วน (isolated environment)
flowchart LR
subgraph Users
Employee[พนักงาน]
Partner[พันธมิตร]
Contractor[ผู้รับเหมา]
end
subgraph "Cloudflare Zero Trust"
WARP[WARP Client]
Gateway[Cloudflare Gateway]
Access[Cloudflare Access]
BI[Browser Isolation]
end
subgraph Applications
Internal[Internal Apps]
SaaS[SaaS Apps]
Public[Public Internet]
end
Employee --> WARP
Partner --> WARP
Contractor --> WARP
WARP --> Gateway
Gateway --> Access
Gateway --> BI
Access --> Internal
Access --> SaaS
BI --> Public
style Gateway fill:#f9f,stroke:#333
style Access fill:#bbf,stroke:#333
style WARP fill:#bfb,stroke:#333
- User Authentication: ผู้ใช้ authenticate ผ่าน identity provider (เช่น Google, Okta, Azure AD)
- Policy Evaluation: Cloudflare ตรวจสอบสิทธิ์ตามนโยบายที่กำหนด
- JWT Tokens: สร้าง JSON Web Token (JWT) เพื่อการ authorization
- Continuous Verification: ตรวจสอบสิทธิ์อย่างต่อเนื่องแทนที่จะเป็นครั้งเดียว
sequenceDiagram
participant User as ผู้ใช้
participant CF as Cloudflare Access
participant IdP as Identity Provider
participant App as Internal Application
User->>CF: เข้าถึง app.internal.com
CF->>User: เปลี่ยนเส้นทางไปยัง Login
User->>IdP: Login ด้วย Credentials
IdP->>CF: ส่งข้อมูลการ authentication
CF->>CF: ตรวจสอบนโยบาย (Policies)
alt อนุญาต
CF->>User: สร้าง Cookie ที่มี JWT
User->>App: เข้าถึงแอปพลิเคชัน พร้อม Cookie
App->>CF: ตรวจสอบความถูกต้องของ Cookie
CF->>App: ยืนยัน/ปฏิเสธความถูกต้อง
else ไม่อนุญาต
CF->>User: แสดงข้อความปฏิเสธการเข้าถึง
end
Cloudflare มีโซลูชันเฉพาะสำหรับบริษัทที่ให้บริการ SaaS โดยเฉพาะที่มีการใช้งานแบบ multi-tenant
SSL for SaaS ช่วยให้ผู้ให้บริการ SaaS สามารถให้ลูกค้าใช้ custom domains ของตัวเองกับบริการได้โดยอัตโนมัติ:
- Custom Domains: ลูกค้าสามารถใช้ domain ของตัวเอง (เช่น dashboard.customer.com)
- Automatic SSL: Cloudflare จัดการ SSL certificates โดยอัตโนมัติ
- CNAME Setup: ใช้ CNAME records เพื่อชี้มายัง SaaS platform
graph TD
A[Customer Domain<br>app.customer.com] -->|CNAME Record| B[SaaS Provider Domain<br>customer.saas-app.com]
B -->|Cloudflare SSL for SaaS| C[SaaS Application]
D[SSL Certificate] -->|Automatic Provisioning| B
ใช้ Cloudflare Workers เพื่อจัดการ routing ในแอปพลิเคชัน multi-tenant:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// ดึง hostname จาก request (เช่น tenant1.saas-app.com)
const url = new URL(request.url)
const hostname = url.hostname
// แยก tenant ID จาก hostname
const tenantId = hostname.split('.')[0]
if (!tenantId || tenantId === 'www') {
// เป็นหน้าหลักของ SaaS
return fetch(`https://main-app.saas-app.com${url.pathname}${url.search}`)
}
// ค้นหาข้อมูล tenant จาก KV store
const tenantData = await TENANTS.get(tenantId, 'json')
if (!tenantData) {
return new Response('Tenant not found', { status: 404 })
}
// ส่งคำขอไปยัง backend ที่เหมาะสม พร้อมกับข้อมูล tenant
const modifiedRequest = new Request(request)
modifiedRequest.headers.set('X-Tenant-ID', tenantId)
modifiedRequest.headers.set('X-Tenant-Plan', tenantData.plan)
return fetch(`https://backend.saas-app.com${url.pathname}${url.search}`, modifiedRequest)
}ความท้าทาย:
- รับมือกับ traffic สูงในช่วงเทศกาล
- ป้องกัน DDoS attacks และ bot traffic
- ปรับปรุงความเร็วของเว็บไซต์ทั่วโลก
โซลูชัน Cloudflare:
- CDN สำหรับ static assets (รูปภาพ, CSS, JS)
- Rate limiting สำหรับ API endpoints
- Bot Management เพื่อป้องกัน scalping bots
- Page Rules เพื่อปรับแต่ง cache behavior
- Image Optimization เพื่อลดขนาดรูปภาพสินค้า
ผลลัพธ์:
- ลด page load time ลง 60%
- ลด bandwidth costs ลง 70%
- เพิ่มอัตราการ conversion 15%
- ป้องกัน DDoS attacks ได้มากกว่า 20 ครั้งต่อเดือน
ความท้าทาย:
- ต้องการความปลอดภัยสูงสุดสำหรับข้อมูลการเงิน
- รองรับการขยายตัวอย่างรวดเร็ว
- ปฏิบัติตามกฎระเบียบด้านความปลอดภัย (PCI DSS, GDPR)
โซลูชัน Cloudflare:
- Cloudflare Access สำหรับการเข้าถึงระบบภายใน
- WAF (Web Application Firewall) เพื่อป้องกัน SQL injection และ XSS
- Argo Smart Routing เพื่อปรับปรุงความเร็วของ API
- Zero Trust security model
- Cloudflare Workers ส