คู่มือการตั้งค่า Ngrok Reverse Proxy บน ServBay
Ngrok คือเครื่องมือสร้าง Tunnel ที่มีประสิทธิภาพสูง ใช้เทคโนโลยี Reverse Proxy เพื่อเชื่อมต่อบริการภายในเครื่องกับโดเมนสาธารณะบนอินเทอร์เน็ต คู่มือนี้จะแนะนำวิธีการติดตั้งและตั้งค่า Ngrok ในสภาพแวดล้อมพัฒนา ServBay เพื่อเปิดเผย Web Service, API หรือบริการอื่นๆ ให้เข้าถึงผ่านอินเทอร์เน็ต เหมาะสำหรับการสาธิตระยะไกล, การทำงานร่วมกันในทีม หรือทดสอบ callback จากบริการภายนอก
หลักการทำงานทางเทคนิค
กลไกหลักของ Ngrok คือการสร้าง tunnel ที่เข้าระหว่างเครื่องของคุณกับเซิร์ฟเวอร์ของ Ngrok ทุกครั้งที่มีผู้ใช้ภายนอกเข้าถึงโดเมนสาธารณะที่ Ngrok จัดสรรให้ คำขอจะถูกส่งไปที่เซิร์ฟเวอร์ Ngrok ซึ่งจะส่งต่อไปยังบริการที่รันอยู่บน ServBay ภายในเครื่องผ่าน tunnel ที่ปลอดภัยนี้ ทำให้คุณสามารถให้บริการแก่ผู้ใช้ภายนอกได้ แม้เครื่องของคุณจะอยู่หลังไฟร์วอลล์หรือไม่มี IP สาธารณะ สำหรับ ServBay หมายความว่าคุณสามารถแชร์เว็บไซต์, backend API หรือบริการ HTTP/HTTPS ใดๆ ภายในเครื่องสู่ภายนอกแบบเรียลไทม์เพื่อการทดสอบหรือสาธิต
การเตรียมความพร้อม
ก่อนเริ่มใช้งาน Ngrok กรุณาตรวจสอบสิ่งต่อไปนี้:
- ติดตั้งและเปิดใช้งาน ServBay แล้ว: ตรวจสอบให้แน่ใจว่าได้ติดตั้ง ServBay และตั้งค่า Web Service (เช่น เว็บไซต์) ที่ต้องการเปิดเผยผ่าน Ngrok ไว้ใน ServBay แล้ว คุณสามารถจัดการเว็บไซต์ได้จากเมนู “เว็บไซต์” ของ ServBay
- ติดตั้ง Ngrok Client:
- เข้าไปที่ หน้าดาวน์โหลดอย่างเป็นทางการของ Ngrok เพื่อเลือกไฟล์ติดตั้งตามระบบปฏิบัติการของคุณ
- แตกไฟล์และย้ายไฟล์
ngrok
ไปยังโฟลเดอร์ที่อยู่ใน PATH ของระบบ (เช่น macOS:/usr/local/bin
) เพื่อให้สามารถรันคำสั่งngrok
จากทุก terminal ได้bash# ตัวอย่างสำหรับ macOS ARM64 sudo unzip ~/Downloads/ngrok-v3-stable-darwin-arm64.zip -d /usr/local/bin
1
2 - ตรวจสอบการติดตั้งโดยรัน
ngrok version
เพื่อดูเวอร์ชันbashngrok version # ตัวอย่างผลลัพธ์: ngrok version 3.5.0
1
2
- บัญชี Ngrok (แนะนำ): การสมัครบัญชี Ngrok (ฟรีหรือเสียเงิน) ช่วยให้คุณจัดการ tunnel ได้สะดวกขึ้นและใช้งานโดเมนคงที่กับฟีเจอร์ขั้นสูง เช่น ลงทะเบียนและรับ Auth Token (
ngrok config add-authtoken <YOUR_AUTH_TOKEN>
) เพื่อปลดล็อกข้อจำกัดของ tunnel และใช้งานฟีเจอร์เพิ่มเติม - ตั้งค่าเว็บไซต์ภายในเครื่องแล้ว: มีอย่างน้อย 1 เว็บไซต์ที่ตั้งค่าใน ServBay เช่น
servbay.local
หรือyourproject.servbay.demo
เป็นโดเมนสำหรับเข้าภายใน
วิธีตั้งค่า Tunnel
อธิบายพารามิเตอร์หลัก
โครงสร้างคำสั่งมาตรฐานสำหรับ map บริการมีดังนี้:
bash
ngrok http --domain=<NGROK_DOMAIN> <LOCAL_ENDPOINT> \
--request-header-add='host: <VIRTUAL_HOST>'
1
2
2
พารามิเตอร์ | รายละเอียด |
---|---|
http | สร้าง tunnel แบบ HTTP หรือ HTTPS Ngrok จะจัดการ request ที่เข้ามาทั้งหมด |
--domain <NGROK_DOMAIN> | ระบุโดเมนที่ Ngrok กำหนดให้ (ต้องเปลี่ยนเป็นโดเมนจริงที่ตั้งค่าหรือได้รับจาก Dashboard; ฟรีไม่ต้องใช้) |
<LOCAL_ENDPOINT> | ที่อยู่บริการบน ServBay ที่ต้องการเปิดเผย (เช่น https://servbay.local หรือ http://localhost:พอร์ต ) |
--request-header-add='host: <VIRTUAL_HOST>' | สำคัญ บังคับแก้ไข header Host ใน request ไปเป็นโดเมนภายในเครื่อง ServBay เพื่อ routing ไปเว็บไซต์ที่ถูกต้อง |
ตัวอย่างการตั้งค่า
เช่น ตั้งค่าเว็บไซต์ท้องถิ่นใน ServBay ว่า servbay.local
และต้องการเปิดออกสู่อินเทอร์เน็ต ถ้าใช้แผนฟรีของ Ngrok สามารถ map ได้ทันที:
bash
# map เว็บไซต์ servbay.local ใน ServBay กับโดเมนสุ่มที่ Ngrok สร้างให้
ngrok http https://servbay.local --request-header-add='host: servbay.local'
1
2
2
ถ้าคุณตั้งค่าโดเมนถาวรบน Ngrok Dashboard แล้ว (เช่น your-servbay-demo.ngrok-free.app
หรือโดเมนแบบเสียเงิน):
bash
# map เว็บไซต์ servbay.local ใน ServBay กับโดเมนที่กำหนดเองของ Ngrok
ngrok http --domain=your-servbay-demo.ngrok-free.app https://servbay.local --request-header-add='host: servbay.local'
1
2
2
เมื่อรันคำสั่งดังกล่าวสำเร็จ Ngrok จะแสดงสถานะ tunnel ใน terminal พร้อมที่อยู่สำหรับเข้าถึง (เช่น https://xxxx.ngrok-free.app
หรือโดเมนของคุณ) และที่อยู่สำหรับ dashboard ดูข้อมูล request แบบ real-time (โดยทั่วไปคือ http://127.0.0.1:4040
)
การตรวจสอบบริการ
หลังตั้งค่าและเปิด Ngrok tunnel สำเร็จ ให้ตรวจสอบดังนี้:
- รับ URL สาธารณะ: ดูบรรทัดที่ขึ้นต้นว่า
Forwarding
ในหน้าต่าง terminal Ngrok และจด URLhttps://...
ที่แสดง - ทดสอบผ่านเบราว์เซอร์: เปิดเบราว์เซอร์บนอุปกรณ์ใดก็ได้ที่เชื่อมต่อเน็ต แล้วใส่ URL ที่ได้มา (เช่น
https://cunning-lacewing-fresh.ngrok-free.app
หรือโดเมนที่ตั้งค่าเอง) - ตรวจสอบผลลัพธ์:
- ตรวจสอบว่าเนื้อหาจากเว็บไซต์ใน ServBay ถูกโหลดในเบราว์เซอร์อย่างถูกต้อง
- ดูว่าสัญลักษณ์ HTTPS ปลอดภัยแสดงอยู่หรือไม่ (Ngrok จะออก SSL certificate ให้อัตโนมัติ)
- ดู log หรือสถิติ request ใน terminal Ngrok หรือ dashboard (
http://127.0.0.1:4040
) เพื่อยืนยันว่าส่งผ่านมาถึง ServBay แล้วจริง
ภาพประกอบ: ตัวอย่างสาธิตการเรียกผ่าน tunnel ของ Ngrok สำเร็จผ่าน Web Browser
เทคนิคขั้นสูงและข้อควรระวัง
- การจัดการโดเมน:
- ถ้าใช้ฟรี Ngrok จะสุ่ม subdomain
.ngrok-free.app
และแต่ละ tunnel มีข้อจำกัดเรื่องเวลา - สมัครบัญชี Ngrok แล้วตั้งค่าที่ Ngrok Dashboard เพื่อใช้โดเมนถาวร ป้องกัน URL เปลี่ยนทุกครั้งที่สั่งรัน tunnel
- ผู้ใช้แผนเสียเงินสามารถ bind โดเมนตนเอง, ได้ bandwidth สูงขึ้น, เปิดการเชื่อมต่อพร้อมกันหลาย tunnel ฯลฯ
- ถ้าใช้ฟรี Ngrok จะสุ่ม subdomain
- Map หลายบริการพร้อมกัน: หากต้องเปิดหลายบริการหรือหลาย port บน ServBay สู่อินเทอร์เน็ต สามารถรัน tunnel หลาย instance หรือกำหนดหลาย tunnel ใน config file (
~/.config/ngrok/ngrok.yml
) เช่น:bashหมายเหตุ: สำหรับ virtual host ใน ServBay ให้ map เป็น# map servbay.local (HTTPS 443 + host-based routing) ngrok http --domain=servbay-website.ngrok-free.app https://servbay.local --request-header-add='host: servbay.local' # ใน terminal อีกอัน หรือระบุใน config map application Node.js ที่ port 3000 ngrok http --domain=nodejs-api.ngrok-free.app http://localhost:3000
1
2
3
4
5https://[local domain]
และใช้--request-header-add
แทนการ map พอร์ต 80/443 ตรงๆ เพราะ ServBay จะรันหลายเว็บไซต์บนพอร์ตเดียวกัน - คำสั่งวินิจฉัย:
ngrok config check
: ตรวจไวยากรณ์ของ config file (~/.config/ngrok/ngrok.yml
)ngrok logs
: ดู log รายละเอียดแบบ real-time ใน terminal มีประโยชน์มากเวลา debug
- ความปลอดภัย: การเปิดเผยบริการภายในเครื่องสู่สาธารณะมีความเสี่ยงทางความปลอดภัย ตรวจสอบให้มั่นใจว่าบริการที่เปิดเผยนั้นปลอดภัย และควรเปิด tunnel เท่าที่จำเป็น แผนเสียเงินของ Ngrok มีฟีเจอร์เสริม เช่น IP whitelist, การจำกัดสิทธิ์ เป็นต้น
การแก้ปัญหาเบื้องต้น
อาการ | วิธีแก้ไข |
---|---|
ต่อไม่ได้หรือหน้าเว็บโหลดไม่ได้ | ตรวจสอบว่าเว็บเป้าหมายใน ServBay รันอยู่จริงและเข้าได้ (เช่นลองเข้าจากเบราว์เซอร์ในเครื่อง https://servbay.local ) ตรวจสอบว่า Web Server (Caddy หรือ Nginx) ใน ServBay พร้อมใช้งาน และ firewall ไม่ block การเชื่อมต่อของ Ngrok |
ข้อผิดพลาดใบรับรอง HTTPS | Ngrok จะออก SSL ให้อัตโนมัติ หากใช้โดเมน Ngrok แล้วยังมี error อาจเป็นที่ tunnel หรือเครือข่าย ไม่ใช่ปัญหาของ ServBay ตรวจสอบให้แน่ใจว่ากำลังเข้าผ่าน URL ที่เริ่มต้นด้วย https:// ของ Ngrok ถ้าเกิดกับโดเมนภายใน ให้ตรวจ SSL config ของ ServBay |
Tunnel หลุดหรือเชื่อมต่อช้า | ตรวจความเสถียรของอินเทอร์เน็ตฝั่งคุณ สัญญาณไม่เสถียรทำให้ tunnel ขาดง่าย หากจำเป็นควรใช้สาย LAN หรืออัปเกรดเป็นแผนเสียเงินเพื่อความเสถียรสูงกว่า |
ได้หน้า default ของ ServBay | ตรวจสอบ address <LOCAL_ENDPOINT> และค่าพารามิเตอร์ <VIRTUAL_HOST> ใน --request-header-add='host: <VIRTUAL_HOST>' ให้ถูกต้อง เพราะถ้าค่าผิดจะยิงไปโฮสต์หลัก ไม่ได้เข้าเว็บเป้าหมายใน ServBay |
คำถามที่พบบ่อย (FAQ)
ถาม: เปิดเผยบริการฐานข้อมูลของ ServBay ผ่าน Ngrok ได้ไหม?
ตอบ: Ngrok ออกแบบมาหลักๆ สำหรับ HTTP/HTTPS tunnel แม้จะรองรับ TCP ได้ แต่การเปิดเผยฐานข้อมูลตรงสู่สาธารณะไม่แนะนำเพราะเสี่ยงสูง หากต้องรีโมตฐานข้อมูล ควรใช้ SSH tunnel หรือวิธีที่ปลอดภัยกว่า
ถาม: ทุกครั้งที่เปิด Ngrok โดเมนจะเปลี่ยนเสมอไหม?
ตอบ: ถ้าใช้แผนฟรีจะสุ่มโดเมนใหม่ให้ทุกครั้ง (
.ngrok-free.app
) ต้องลงทะเบียนบัญชีและตั้งค่าใน Dashboard หรือต้องอัปเกรดเป็นผู้ใช้แผนเสียเงินเพื่อได้โดเมนคงที่ถาม: Ngrok ทำให้ ServBay ในเครื่องทำงานช้าลงหรือไม่?
ตอบ: จะมีดีเลย์เพิ่มขึ้นบ้างเพราะต้องส่งผ่านเซิร์ฟเวอร์ Ngrok แต่ระดับการใช้งานเพื่อพัฒนา ทดสอบ หรือสาธิต โดยทั่วไปถือว่ารับได้ ประสิทธิภาพขึ้นกับสเปคเครื่องและตัวเว็บ/แอปของคุณ
สรุป
การใช้ Ngrok ร่วมกับ ServBay ช่วยให้คุณแชร์ผลงานเว็บที่พัฒนาภายในเครื่องออกสู่อินเทอร์เน็ตได้อย่างรวดเร็วและปลอดภัย ง่ายโดยไม่ต้องยุ่งยากกับการตั้งค่าเครือข่าย เหมาะสำหรับการสาธิต ระบบร่วมมือ การทดสอบจากอุปกรณ์และผู้ใช้ภายนอก Ngrok ยังมีเครื่องมือวิเคราะห์และคุณสมบัติเพิ่มด้านความปลอดภัย (บางส่วนเฉพาะแผนเสียเงิน) หากคุณต้องการใช้โดเมนถาวรหรือใช้งานจริงในองค์กร แนะนำให้สมัครแผนเสียเงินเพื่อได้ฟีเจอร์และความเสถียรสูงสุด