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

เซิร์ฟเวอร์เฉพาะ: ตั้งค่า 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 server เพราะมันเป็นเว็บเซิร์ฟเวอร์โอเพนซอร์สที่มีประสิทธิภาพสูงและได้รับความนิยม

เมื่อคุณเข้าถึง 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 ระเบียนใน DNS ชี้ไปยังที่อยู่ 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 build ปกติ

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

sudo apt install -y libnginx-mod-stream

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

คุณจะเพิ่มบล็อก stream ใหม่ในไฟล์หลัก nginx.conf ซึ่งจะกำหนดเซิร์ฟเวอร์ต้นทางและพอร์ตที่ควรเข้าถึงผ่าน 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 สำเร็จแล้ว ไม่ว่าจะเป็นเว็บไซต์หรือเซิร์ฟเวอร์เกม (หรือทั้งสองอย่าง :)) ซึ่งจะช่วยเพิ่มความปลอดภัย ความน่าเชื่อถือ และประสิทธิภาพ หากมีคำถามหรือขอความช่วยเหลือเพิ่มเติม อย่าลังเลที่จะติดต่อทีมซัพพอร์ตของเรา ที่พร้อมช่วยเหลือคุณทุกวัน! 🙂