Cloudflare CDN cloud network

เชื่อมต่อ VPS กับ Cloudflare: CDN + DDoS Protection

มิถุนายน 2026 · อ่าน 7 นาที

การใช้ Cloudflare เป็น reverse proxy หน้า VPS ของคุณเป็นหนึ่งในวิธีที่คุ้มค่าที่สุดในการได้รับ CDN, DDoS Protection ระดับองค์กร, Web Application Firewall (WAF) และ SSL Certificate ฟรี — โดยไม่ต้องเสียค่าใช้จ่ายเพิ่มเติม บทความนี้จะพาคุณตั้งค่าตั้งแต่ต้นจนจบแบบ step-by-step

Cloudflare ทำงานอย่างไรกับ VPS

เมื่อเปิดใช้ Cloudflare proxy (ไอคอนเมฆสีส้ม) DNS ของโดเมนจะชี้ไปที่ IP ของ Cloudflare แทน IP จริงของ VPS ทราฟฟิกทุกชิ้นจะวิ่งผ่าน Cloudflare ก่อน แล้วค่อยส่งต่อมายัง VPS ของคุณ ผลที่ได้คือ:

หมายเหตุ: Cloudflare Free Plan ให้ DDoS Protection, CDN, WAF พื้นฐาน และ SSL ฟรีทั้งหมด เหมาะสำหรับเว็บไซต์และ API ทั่วไปบน VPS โดยไม่ต้องอัปเกรด Plan

ขั้นตอนที่ 1 — สมัครและเพิ่มโดเมนเข้า Cloudflare

  1. ไปที่ dash.cloudflare.com แล้วสมัครบัญชีฟรี
  2. คลิก "Add a Site" แล้วพิมพ์ชื่อโดเมนของคุณ (เช่น example.com)
  3. เลือก Plan Free แล้วคลิก Continue
  4. Cloudflare จะ scan DNS records เดิมของโดเมนให้อัตโนมัติ ตรวจสอบว่า A record ชี้ไป IP ของ VPS ถูกต้อง
  5. คัดลอก Nameserver 2 ตัวที่ Cloudflare กำหนดให้ (เช่น ada.ns.cloudflare.com และ bob.ns.cloudflare.com)
  6. เข้าไปที่ Registrar ที่คุณซื้อโดเมน แล้วเปลี่ยน Nameserver เป็นของ Cloudflare
เวลาที่ใช้: การเปลี่ยน Nameserver อาจใช้เวลา 5 นาที ถึง 48 ชั่วโมงในการ propagate ทั่วโลก แต่โดยทั่วไปจะเสร็จภายใน 1-2 ชั่วโมง

ขั้นตอนที่ 2 — ตั้งค่า DNS Records และเปิด Proxy

หลัง Nameserver ถ่ายโอนสำเร็จ ให้เข้าไปที่แท็บ DNS ใน Dashboard และตรวจสอบ records ดังนี้:

ข้อควรระวัง: ถ้าคุณใช้ VPS เป็น Mail Server ด้วย อย่าเปิด Proxy บน A record ที่ MX ชี้ไป เพราะ Cloudflare Proxy รองรับเฉพาะ HTTP/HTTPS ไม่รองรับ SMTP/IMAP/POP3

ขั้นตอนที่ 3 — ตั้งค่า SSL/TLS Mode

ไปที่ SSL/TLS → Overview แล้วเลือก Mode ที่เหมาะกับสถานการณ์:

Flexible SSL

Cloudflare เชื่อมต่อกับ Browser ผ่าน HTTPS แต่เชื่อมกับ VPS ผ่าน HTTP ธรรมดา ใช้ได้ถ้า VPS ยังไม่มี SSL Certificate ติดตั้ง เหมาะสำหรับการทดสอบเบื้องต้น

Full SSL (แนะนำ)

เชื่อมต่อกับ VPS ผ่าน HTTPS ด้วย แต่ Cloudflare ไม่ตรวจสอบว่า Certificate บน VPS Valid หรือไม่ ต้องมี SSL Certificate บน VPS (Self-signed ก็ได้)

Full (Strict) — ปลอดภัยที่สุด

เหมือน Full แต่ Cloudflare ตรวจสอบว่า Certificate บน VPS ต้องเป็น Certificate ที่ Valid จริง (Let's Encrypt หรือ Cloudflare Origin Certificate)

แนะนำ: ใช้ Full (Strict) ร่วมกับ Cloudflare Origin Certificate เป็นวิธีที่ปลอดภัยที่สุดและไม่ต้องต่ออายุ Certificate เองทุก 90 วัน

ขั้นตอนที่ 4 — ติดตั้ง Cloudflare Origin Certificate บน VPS

Origin Certificate คือ Certificate ที่ Cloudflare ออกให้ใช้กับ VPS โดยเฉพาะ อายุสูงสุด 15 ปี และใช้ได้เฉพาะเมื่อ Traffic ผ่าน Cloudflare เท่านั้น

  1. ใน Cloudflare Dashboard ไปที่ SSL/TLS → Origin Server
  2. คลิก "Create Certificate"
  3. เลือก Hostnames ที่ต้องการ (เช่น example.com และ *.example.com)
  4. เลือกอายุ Certificate (แนะนำ 15 ปีเพื่อไม่ต้อง renew บ่อย)
  5. คัดลอก Origin Certificate และ Private Key แล้วบันทึกลงใน VPS

SSH เข้า VPS แล้วสร้างไฟล์ Certificate:

ssh root@YOUR_VPS_IP

# สร้างโฟลเดอร์เก็บ Certificate
mkdir -p /etc/ssl/cloudflare

# บันทึก Origin Certificate
nano /etc/ssl/cloudflare/cert.pem
# วาง Certificate ที่คัดลอกจาก Cloudflare แล้วกด Ctrl+X, Y, Enter

# บันทึก Private Key
nano /etc/ssl/cloudflare/key.pem
# วาง Private Key แล้วกด Ctrl+X, Y, Enter

# จำกัดสิทธิ์ไฟล์
chmod 600 /etc/ssl/cloudflare/key.pem
chmod 644 /etc/ssl/cloudflare/cert.pem

ตั้งค่า Nginx ให้ใช้ Origin Certificate

nano /etc/nginx/sites-available/example.com
server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate     /etc/ssl/cloudflare/cert.pem;
    ssl_certificate_key /etc/ssl/cloudflare/key.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/html;
    index index.php index.html;

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

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}
# ทดสอบ config
nginx -t

# รีโหลด Nginx
systemctl reload nginx

ตั้งค่า Apache ให้ใช้ Origin Certificate

nano /etc/apache2/sites-available/example.com-ssl.conf
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html

    SSLEngine on
    SSLCertificateFile    /etc/ssl/cloudflare/cert.pem
    SSLCertificateKeyFile /etc/ssl/cloudflare/key.pem

    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
</VirtualHost>
a2enmod ssl
a2ensite example.com-ssl
systemctl reload apache2

ขั้นตอนที่ 5 — ตั้งค่า Firewall ให้รับ Traffic เฉพาะจาก Cloudflare

เพื่อป้องกันไม่ให้ผู้โจมตีเข้าถึง IP จริงของ VPS โดยตรง ให้ Block Port 80/443 จากทุกที่ ยกเว้น IP ของ Cloudflare:

# ดาวน์โหลด IP ranges ของ Cloudflare
curl -s https://www.cloudflare.com/ips-v4 -o /tmp/cf_ipv4.txt
curl -s https://www.cloudflare.com/ips-v6 -o /tmp/cf_ipv6.txt

# Reset กฎ iptables เดิมสำหรับ port 80/443
iptables -D INPUT -p tcp --dport 80 -j ACCEPT 2>/dev/null
iptables -D INPUT -p tcp --dport 443 -j ACCEPT 2>/dev/null

# อนุญาตเฉพาะ Cloudflare IPv4
while read ip; do
  iptables -I INPUT -p tcp --dport 80 -s "$ip" -j ACCEPT
  iptables -I INPUT -p tcp --dport 443 -s "$ip" -j ACCEPT
done < /tmp/cf_ipv4.txt

# Block ทุก IP อื่นที่ไม่ใช่ Cloudflare
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP

# บันทึกกฎ (Debian/Ubuntu)
apt-get install -y iptables-persistent
netfilter-persistent save
ข้อควรระวัง: ตรวจสอบให้แน่ใจว่า SSH Port (22 หรือที่กำหนดเอง) ยังเปิดอยู่ก่อนบันทึกกฎ iptables ไม่เช่นนั้นคุณจะล็อกตัวเองออกจาก VPS

ขั้นตอนที่ 6 — ตั้งค่า WAF และ Security Rules

ไปที่ Security → WAF ใน Cloudflare Dashboard:

เปิด Managed Rules (Free Plan)

ตั้งค่า Security Level

ไปที่ Security → Settings แล้วปรับ Security Level:

ขั้นตอนที่ 7 — ตั้งค่า Caching สำหรับ Static Assets

ไปที่ Caching → Configuration:

สร้าง Page Rule สำหรับ Cache Static Files ทั้งหมด:

  1. ไปที่ Rules → Page Rules แล้วคลิก "Create Page Rule"
  2. URL pattern: example.com/static/*
  3. Setting: Cache Level → Cache Everything
  4. Edge Cache TTL: 1 เดือน

ขั้นตอนที่ 8 — ตั้งค่า Always Use HTTPS และ HSTS

ใน Cloudflare Dashboard ไปที่ SSL/TLS → Edge Certificates:

ข้อควรระวัง: การเปิด HSTS แบบ preload ทำให้ยากมากที่จะ "ถอน" ออกในภายหลัง ควรทดสอบให้แน่ใจว่าเว็บรองรับ HTTPS 100% ก่อนเปิด HSTS

การตรวจสอบว่าตั้งค่าถูกต้อง

หลังตั้งค่าครบแล้ว ทดสอบด้วยคำสั่งเหล่านี้:

# ตรวจสอบว่า Response Header มี "cf-ray" จาก Cloudflare
curl -sI https://example.com | grep -E "cf-ray|server|x-cache"

# ตรวจสอบ SSL Certificate ที่ได้รับ
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer -dates

# ตรวจสอบว่า HTTP redirect ไป HTTPS
curl -sI http://example.com | grep location

ผลลัพธ์ที่ถูกต้องจะเห็น Header cf-ray: ใน Response และ Issuer ของ Certificate จะเป็น Cloudflare Inc ECC CA-3 หรือ CloudFlare Origin CA

การแก้ปัญหาที่พบบ่อย

Error 521 — Web server is down

Cloudflare เชื่อมต่อ VPS ไม่ได้ ตรวจสอบ:

Error 525 — SSL Handshake Failed

Certificate บน VPS มีปัญหา ตรวจสอบ:

Redirect Loop (ERR_TOO_MANY_REDIRECTS)

เกิดจาก SSL Mode เป็น Flexible แต่ VPS ก็ redirect HTTP→HTTPS ด้วย แก้ไขโดยเปลี่ยน SSL Mode เป็น Full หรือปิด redirect บน VPS


สรุปขั้นตอนทั้งหมด

การตั้งค่า Cloudflare หน้า VPS ให้ครบถ้วนประกอบด้วยขั้นตอนหลักดังนี้:

  1. สมัคร Cloudflare และเพิ่มโดเมน จากนั้นเปลี่ยน Nameserver ที่ Registrar
  2. ตั้งค่า DNS A Records และเปิด Proxy (เมฆสีส้ม) สำหรับโดเมนหลัก
  3. เลือก SSL Mode เป็น Full (Strict) เพื่อความปลอดภัยสูงสุด
  4. สร้าง Origin Certificate จาก Cloudflare และติดตั้งบน Nginx/Apache
  5. ตั้ง Firewall ให้รับ Traffic Port 80/443 เฉพาะจาก Cloudflare IP Ranges
  6. เปิด WAF Managed Rules เพื่อป้องกัน OWASP Top 10
  7. ตั้งค่า Caching สำหรับ Static Assets เพื่อลด Load บน VPS
  8. เปิด Always Use HTTPS และ HSTS
ข้อดีสรุป: หลังตั้งค่าครบ VPS ของคุณจะได้รับการปกป้องจาก DDoS โดยอัตโนมัติ, IP จริงถูกซ่อน, SSL ฟรีโดยไม่ต้องต่ออายุบ่อย, Static Content โหลดเร็วขึ้นจาก Edge Node ใกล้ผู้ใช้ และ WAF คอยกรอง Traffic อันตรายก่อนถึง VPS — ทั้งหมดนี้ใช้ได้ฟรีบน Cloudflare Free Plan

ตรวจสอบว่า Cloudflare ทำงานถูกต้อง

# ตรวจสอบว่า Response Header มี cf-ray จาก Cloudflare
curl -sI https://example.com | grep -i "cf-ray\|server\|x-cache"

# ตรวจสอบ Issuer ของ SSL Certificate (ควรเป็น Cloudflare)
echo | openssl s_client -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -issuer -dates

# ตรวจสอบว่า HTTP redirect ไป HTTPS ถูกต้อง
curl -sI http://example.com | grep -i location

# ตรวจสอบ IP ที่ DNS resolve มา (ควรเป็น IP ของ Cloudflare ไม่ใช่ VPS)
dig +short A example.com
Tip: ถ้าเห็น Header cf-ray: xxxxxxxx-BKK และ Issuer เป็น E6 หรือ Cloudflare Inc ECC CA-3 แปลว่า traffic ผ่าน Cloudflare ถูกต้องแล้ว

แก้ปัญหาเพิ่มเติมที่พบบ่อย

Error 522 — Connection timed out

ต่างจาก 521 (Web server is down) ตรงที่ Cloudflare เชื่อมต่อ TCP ได้แต่ไม่ได้รับ response ในเวลา — มักเกิดจาก Firewall บล็อก Cloudflare IP

# ตรวจสอบว่า Cloudflare IP ถูก block
iptables -L INPUT -n | grep -E "80|443"

# ตรวจสอบว่า Nginx ฟัง port อยู่
ss -tlnp | grep -E "80|443"

# ดาวน์โหลด IP ranges ล่าสุดของ Cloudflare แล้วเพิ่มกฎ
curl -s https://www.cloudflare.com/ips-v4 | head

Cache ไม่อัพเดท — ผู้ใช้เห็นเนื้อหาเก่า

Cloudflare cache ไฟล์ Static ไว้ที่ Edge ต้องสั่ง purge เมื่อเนื้อหาเปลี่ยน

# Purge cache ทั้งหมดผ่าน Dashboard:
# Caching → Configuration → Purge Everything

# หรือ Purge เฉพาะ URL ผ่าน API
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "Authorization: Bearer API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"files":["https://example.com/style.css"]}'

WebSocket ไม่ทำงานผ่าน Cloudflare

Cloudflare รองรับ WebSocket แต่ต้องเปิดใช้งานก่อน

# เปิดใน Dashboard:
# Network → WebSockets → On

# ตรวจสอบว่า Nginx config รองรับ WebSocket upgrade
location /ws/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Real IP ของ Visitor ไม่ถูกต้องใน Log (เห็นแต่ Cloudflare IP)

ต้องตั้งค่า Nginx ให้ใช้ Header CF-Connecting-IP แทน

# เพิ่มใน nginx.conf ส่วน http {}
set_real_ip_from 103.21.244.0/22;   # Cloudflare IP ranges
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 173.245.48.0/20;
real_ip_header CF-Connecting-IP;

sudo nginx -t && sudo systemctl reload nginx

คำถามที่พบบ่อย

ใช้ Cloudflare Free Plan เพียงพอสำหรับเว็บทั่วไปไหม?

เพียงพอสำหรับเว็บขนาดกลาง Free Plan ให้ DDoS Protection ไม่จำกัด CDN ทั่วโลก WAF พื้นฐาน SSL ฟรี และ Analytics เบื้องต้น สิ่งที่ต้องอัพเกรดเป็น Pro+ คือ Advanced WAF Rules, Image Optimization, Real-time Analytics และ Priority Support

Cloudflare เห็น HTTPS traffic ของเราได้ไหม?

ได้ เพราะ Cloudflare เป็น middleman ที่ decrypt SSL แล้ว re-encrypt ก่อนส่งไปยัง VPS (SSL Termination at Edge) ข้อมูล request/response จะผ่านมือ Cloudflare แม้จะใช้ Full (Strict) mode ก็ตาม ถ้าต้องการ End-to-End Encryption ที่ Cloudflare ไม่เห็น ต้องใช้ Cloudflare Tunnel หรือไม่ใช้ Cloudflare proxy

Origin Certificate ของ Cloudflare ใช้กับเว็บอื่นได้ไหม?

ไม่ได้ Origin Certificate ที่ Cloudflare ออกให้ใช้ได้เฉพาะเมื่อ traffic ผ่าน Cloudflare เท่านั้น Browser จะแสดง Warning ถ้าพยายามเข้าถึง VPS โดยตรง (bypass Cloudflare) เพราะ Certificate นี้ไม่ได้รับการ Trust จาก Browser CA Store ทั่วไป