ข้ามไปยังเนื้อหาหลัก

VPS: ตั้งค่า Reverse Proxy ด้วย nginx บน Linux

คู่มือนี้ถูกสร้างขึ้นด้วยผลิตภัณฑ์ดังต่อไปนี้:

(รายละเอียดอาจแตกต่างกันไปตามผลิตภัณฑ์จากผู้ให้บริการต่างๆ แต่แนวคิดหลักยังคงเหมือนเดิม)

แนะนำ

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

ในคู่มือนี้ เราจะพาคุณไปดูขั้นตอนการตั้งค่า reverse proxy แบบทั่วไปสำหรับเว็บไซต์ รวมถึงแบบที่ออกแบบมาเฉพาะสำหรับเซิร์ฟเวอร์เกม

การเตรียมตัว

เพื่อจะตั้งค่า reverse proxy คุณจะต้องมี เซิร์ฟเวอร์ Linux ที่จะใช้โฮสต์ proxy server ของคุณ ในตัวอย่างนี้ เราจะใช้ Ubuntu เป็นดิสโทร Linux แต่ขั้นตอนการติดตั้งควรจะคล้ายกันมากกับดิสโทร Linux ส่วนใหญ่

สเปค VPS ที่แนะนำ

สำหรับ reverse proxy ที่ออกแบบมาสำหรับเซิร์ฟเวอร์เกม เราแนะนำให้ซื้อความเร็วเน็ตเวิร์คที่สูงขึ้น โดยเฉพาะถ้าเซิร์ฟเวอร์ของคุณมีผู้เล่นจำนวนมาก เพราะ VPS ของคุณจะสตรีมข้อมูล TCP/UDP ดิบโดยตรงระหว่างไคลเอนต์ (ผู้เล่น) กับเซิร์ฟเวอร์เกม แต่ถ้าเป็น proxy สำหรับเว็บทั่วไป เซิร์ฟเวอร์ที่มีสเปคพื้นฐานและอัปเกรดน้อยๆ ก็เพียงพอแล้ว :)

เราแนะนำให้ตั้ง proxy ด้วย โดเมน ที่คุณเป็นเจ้าของ สำหรับซับโดเมนแต่ละอันที่คุณจะใช้ คุณควรสร้างระเบียน A DNS (เช่น zapdocs.example.com) ชี้ไปที่ ที่อยู่ IP ของ Linux VPS ของคุณ นี่คือสิ่งที่ผู้ใช้จะใช้เข้าถึงเว็บไซต์หรือเซิร์ฟเวอร์เกมของคุณ

การเข้าถึง VPS

เมื่อคุณมี Linux VPS พร้อมแล้ว คุณจะต้องเชื่อมต่อเข้าไป ใช้คู่มือ SSH Initial Access ของเราเพื่อเรียนรู้วิธีการเชื่อมต่อ

การติดตั้ง Nginx

คุณจะใช้ Nginx เพื่อโฮสต์ reverse proxy เพราะมันเป็นเว็บเซิร์ฟเวอร์โอเพนซอร์สที่มีประสิทธิภาพสูงและได้รับความนิยม

เมื่อคุณเข้าถึง VPS แล้ว ใช้คำสั่งนี้เพื่อติดตั้ง Nginx

sudo apt install nginx

เมื่อติดตั้งเสร็จ คุณจะต้องปรับไฟร์วอลล์เพื่อให้บริการนี้เข้าถึงได้จากอินเทอร์เน็ต สำหรับคู่มือนี้ เราจะใช้ UFW Firewall เพราะ Nginx ลงทะเบียนตัวเองเป็นแอป ทำให้ปรับแต่งง่าย คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ UFW Firewall ได้จากคู่มือ Linux Security Tips ของเรา

บันทึก

ถ้าคุณใช้ไฟร์วอลล์อื่น (เช่น Iptables) กรุณาแน่ใจว่าได้เปิดพอร์ตที่เกี่ยวข้องให้ Nginx โดยเฉพาะพอร์ต 80 และ 443 ซึ่งเป็นพอร์ตที่ nginx ใช้งาน

คุณสามารถตรวจสอบโปรไฟล์ของ Nginx ได้โดยรัน sudo ufw app list ในกรณีนี้ เราจะเลือกตัวเลือก Nginx Full ซึ่งจะเปิดให้เข้าถึง HTTP สำหรับทดสอบ และ HTTPS สำหรับใช้งานจริง

sudo ufw allow 'Nginx Full'

เมื่อ Nginx ตั้งค่าเสร็จแล้ว ลองเข้าหน้าผ่านเบราว์เซอร์เพื่อเช็คว่าทำงานได้ตามคาดหรือไม่ ถ้าหน้าทดสอบขึ้นตามที่คาดไว้ คุณก็พร้อมจะดำเนินการต่อในคู่มือนี้

http://[your_serverip]

สำหรับเว็บไซต์

reverse proxy สำหรับเว็บไซต์มีประโยชน์มากมาย เช่น การรีไดเรกต์ไปยังทรัพยากรภายในเซิร์ฟเวอร์ เช่น อินสแตนซ์ vaultwarden (โดยไม่ต้องใส่พอร์ตใน URL) หรือส่งต่อผู้ใช้ไปยังเนื้อหาภายนอก ซึ่งช่วยในเรื่องการบาลานซ์โหลดและการป้องกัน

ข้อดีใหญ่คือเซิร์ฟเวอร์ของคุณสามารถจัดการคำขอจากแหล่ง/โดเมนได้หลายที่ตามต้องการ ต่างจากเว็บเซิร์ฟเวอร์ทั่วไปที่ทำงานบนพอร์ต 80/443 เพียงพอร์ตเดียว

การตั้งค่า Nginx

เริ่มจากสร้างไฟล์คอนฟิกในไดเรกทอรีของ Nginx สำหรับโดเมนที่คุณเลือกไว้ก่อนหน้านี้ ซึ่งโดยปกติจะเป็นซับโดเมน เช่น zapdocs.example.com ตามตัวอย่างของเรา

important

ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า A record ชี้ไปที่ ที่อยู่ IP ของ proxy server ก่อนดำเนินการต่อ ถ้าไม่เช่นนั้น โดเมนและขั้นตอนถัดไปจะไม่ทำงานตามที่คาดหวัง

เข้าไปที่โฟลเดอร์บล็อกเซิร์ฟเวอร์ด้วยคำสั่งนี้ ที่นี่คือที่เก็บคอนฟิก proxy ทั้งหมดของคุณ

cd /etc/nginx/sites-available/

ใช้คำสั่งนี้เพื่อสร้างไฟล์คอนฟิกใหม่ เราแนะนำให้ใช้ชื่อไฟล์เป็นชื่อโดเมนเพื่อให้ง่ายต่อการระบุ (เช่น zapdocs.example.com) แทนที่ [your_filename] ด้วยชื่อไฟล์ที่คุณต้องการ

sudo nano [your_filename]

จะเปิด nano editor ให้คุณใส่เนื้อหา คัดลอกเทมเพลตนี้ลงไปใน editor แล้วปรับ [your_domain] เป็นโดเมนที่คุณต้องการ proxy ตามด้วย [your_target_server] สำหรับเซิร์ฟเวอร์เป้าหมายที่คุณต้องการเข้าถึง

upstream targetServer {
# ใส่เซิร์ฟเวอร์เป้าหมายที่คุณต้องการเข้าถึง ซึ่งอาจเป็น:
# รีไดเรกต์ภายใน "localhost" (เช่น 127.0.0.1:9090)
# เซิร์ฟเวอร์ภายนอก (เช่น 103.146.43.52:9000)
server [your_target_server];
}

server {
listen 80;
listen [::]:80;

# โดเมนที่ต้องการจัดการ (เช่น zapdocs.example.com)
server_name [your_domain];

location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_request_headers on;
proxy_http_version 1.1;
proxy_pass http://targetServer;
}
}

เมื่อปรับค่าทั้งหมดเรียบร้อยแล้ว ให้บันทึกไฟล์และออกจาก nano โดยกด CTRL + X ตามด้วย Y เพื่อยืนยัน และกด ENTER

ตอนนี้คุณต้องเปิดใช้งานไฟล์บล็อกเซิร์ฟเวอร์โดยสร้าง symlink ไปยังไดเรกทอรี active

sudo ln -s /etc/nginx/sites-available/[your_filename] /etc/nginx/sites-enabled/[your_filename]

เพื่อให้แน่ใจว่าทุกอย่างถูกต้อง โดยเฉพาะเรื่องไวยากรณ์ ให้ใช้คำสั่ง sudo nginx -t เพื่อตรวจสอบ ถ้าไม่มีปัญหา ให้รีสตาร์ท Nginx เพื่อให้บล็อกเซิร์ฟเวอร์ใหม่มีผล

systemctl reload nginx.service

เมื่อรีสตาร์ทบริการแล้ว ให้ลองเข้าถึงโดเมนที่คุณใช้สำหรับ reverse proxy ผ่านเบราว์เซอร์ ถ้าสำเร็จ หน้าควรโหลดเนื้อหาที่คุณตั้งเป็นพารามิเตอร์ targetServer ถ้าเจอปัญหา เราแนะนำให้เช็คล็อกเพื่อแก้ไขปัญหาด้วยคำสั่ง journalctl -f -u nginx.service เพื่อดูข้อผิดพลาดที่อาจเกิดขึ้น

สำหรับเซิร์ฟเวอร์เกม

reverse proxy สำหรับเซิร์ฟเวอร์เกมมีประโยชน์มากมาย เช่น การเพิ่มชั้นความปลอดภัยและความน่าเชื่อถือด้วยการช่วยบรรเทาและจำกัดการเข้าถึงโฮสต์หลัก

เคล็ดลับ

เซิร์ฟเวอร์เกมเฉพาะส่วนใหญ่ควรทำงานได้ดีมากกับ raw TCP/UDP endpoint proxy ที่คุณจะตั้งค่า อย่างไรก็ตาม เกมบางเกมเล็กน้อย เช่น BeamMP อาจไม่ทำงานดีนักกับ VPN และ proxy ดังนั้นคุณต้องทดสอบเป็นรายเกม

การตั้งค่า Nginx

การตั้งค่านี้ต้องใช้โมดูล Nginx Stream ซึ่งไม่ได้รวมมาใน Nginx แบบดีฟอลต์

ติดตั้งโมดูล Nginx stream

sudo apt install -y libnginx-mod-stream

การตั้งค่า Nginx stream

คุณจะเพิ่มบล็อก stream ใหม่ในไฟล์หลัก nginx.conf ซึ่งจะกำหนดเซิร์ฟเวอร์ upstream และพอร์ตที่ควรเข้าถึงผ่าน proxy

เปิดไฟล์นี้ด้วยคำสั่ง

sudo nano /etc/nginx/nginx.conf

จากนั้นคัดลอกเทมเพลตนี้ลงไปในไฟล์ ซึ่งเพิ่มบล็อก stream ใหม่ คุณต้องแทนที่ [your_target_server] ด้วยเซิร์ฟเวอร์ที่คุณต้องการสตรีมไป รวมพอร์ตที่เกี่ยวข้อง (เช่น :30120 สำหรับ FiveM) และแทนที่ [your_port_listener] ด้วยพอร์ตที่คุณต้องการให้คนเข้าถึงผ่าน proxy server

stream {
upstream targetServer {
# ใส่เซิร์ฟเวอร์เป้าหมายที่คุณต้องการเข้าถึง (เช่น 103.146.43.52:30120)
server [your_target_server];
}

server {
# พอร์ตที่รับและเชื่อมต่อ (เช่น 30120)
listen [your_port_listener];
proxy_pass targetServer;
}
}

โดยสรุป Nginx จะฟังที่พอร์ตที่กำหนดสำหรับการเชื่อมต่อเข้ามา และสตรีมทุกอย่างไปยังเซิร์ฟเวอร์เป้าหมายที่คุณกำหนด (จาก proxy server ของคุณไปยังเซิร์ฟเวอร์เกมจริง)

เมื่อปรับค่าทั้งหมดเรียบร้อยแล้ว ให้บันทึกไฟล์และออกจาก nano โดยกด CTRL + X ตามด้วย Y เพื่อยืนยัน และกด ENTER

เพื่อให้แน่ใจว่าทุกอย่างถูกต้อง โดยเฉพาะเรื่องไวยากรณ์ ให้ใช้คำสั่ง sudo nginx -t เพื่อตรวจสอบ ถ้าไม่มีปัญหา ให้รีสตาร์ท Nginx เพื่อให้คอนฟิกใหม่มีผล

systemctl reload nginx.service

เมื่อรีสตาร์ทบริการแล้ว ให้ลองเชื่อมต่อกับเซิร์ฟเวอร์เกมผ่านโดเมน proxy ถ้าสำเร็จ คุณควรเชื่อมต่อกับเซิร์ฟเวอร์เกมได้ โดยเฉพาะเซิร์ฟเวอร์ที่คุณตั้งเป็นพารามิเตอร์ targetServer ถ้าเจอปัญหา เราแนะนำให้เช็คล็อกเพื่อแก้ไขปัญหาด้วยคำสั่ง journalctl -f -u nginx.service เพื่อดูข้อผิดพลาดที่อาจเกิดขึ้น

ใบรับรอง SSL

เมื่อคุณตั้งค่า reverse proxy เสร็จแล้ว เราแนะนำอย่างยิ่งให้เพิ่มใบรับรอง SSL ให้กับโดเมนที่ใช้ เพื่อให้เว็บไซต์ส่งข้อมูลอย่างปลอดภัยผ่าน HTTPS กรุณาดูคู่มือ Install Certbot ของเรา ซึ่งครอบคลุมขั้นตอนการขอและต่ออายุใบรับรอง SSL อัตโนมัติสำหรับโดเมนของคุณ

สรุป

ยินดีด้วย คุณตั้งค่า reverse proxy สำเร็จแล้ว ไม่ว่าจะเป็นเว็บไซต์หรือเซิร์ฟเวอร์เกม (หรือทั้งสองอย่าง :)) ซึ่งจะช่วยเพิ่มความปลอดภัย ความน่าเชื่อถือ และประสิทธิภาพ หากมีคำถามเพิ่มเติมหรือต้องการความช่วยเหลือ อย่าลังเลที่จะติดต่อทีมซัพพอร์ตของเรา ที่พร้อมให้บริการทุกวันเพื่อช่วยเหลือคุณ! 🙂