603 words
3 minutes
ngrok - เปิด Port แบบง่ายๆ ไม่ต้องยุ่งกับ Router

ngrok - เปิด Port แบบง่ายๆ#

เคยไหมครับ… สร้างเว็บเสร็จแล้ว อยากให้เพื่อนลองดู แต่มันอยู่แค่ใน localhost 😭

หรือทำ Line Bot เสร็จแล้ว แต่ต้องการ URL สำหรับ Webhook…

ngrok ช่วยได้ครับ!


ngrok คืออะไร?#

ngrok เป็นเครื่องมือที่สร้าง secure tunnel จากเครื่องของเราไปยัง ngrok server ครับ

พูดง่ายๆ คือมันจะเอา localhost ของเรา ไปสร้าง URL ให้คนอื่นเข้าถึงได้

┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Your App │─────▶│ ngrok │─────▶│ Internet │
│ localhost │ │ Tunnel │ │ Users │
└─────────────┘ └─────────────┘ └─────────────┘
:8080 abc123.ngrok.io

ข้อดีของ ngrok#

  • ✅ ไม่ต้อง forward port ผ่าน router
  • ✅ ได้ HTTPS URL ฟรี
  • ✅ เหมาะสำหรับทดสอบ webhook, Line Bot, Discord Bot
  • ✅ ใช้งานง่ายมากครับ!

สิ่งที่ต้องมี#

  1. บัญชี ngrok — สมัครฟรีได้ที่ dashboard.ngrok.com/signup
  2. Auth Token — จะได้หลังจากสมัครบัญชีเรียบร้อยครับ

ขั้นตอนที่ 1: ติดตั้ง ngrok#

Windows#

วิธีที่ 1 — ติดตั้งผ่าน Microsoft Store:

  1. เปิด Microsoft Store
  2. ค้นหา “ngrok”
  3. กด Install

วิธีที่ 2 — ดาวน์โหลดโดยตรง:

  1. ไปที่ download.ngrok.com
  2. ดาวน์โหลด ngrok สำหรับ Windows
  3. แตกไฟล์ไปยังโฟลเดอร์ที่ต้องการ (เช่น C:\ngrok)
  4. เพิ่ม path ไปยัง Environment Variables (optional)

macOS#

Terminal window
brew install ngrok

Linux (Debian/Ubuntu)#

Terminal window
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
| sudo tee /etc/apt/sources.list.d/ngrok.list \
&& sudo apt update \
&& sudo apt install ngrok

ยาวหน่อย แต่ copy paste ทีเดียวจบครับ

ตรวจสอบการติดตั้ง#

Terminal window
ngrok help

ถ้าเห็น help menu แสดงว่าติดตั้งสำเร็จแล้วครับ ✅


ขั้นตอนที่ 2: เชื่อมต่อบัญชี#

หลังจากสมัครบัญชีที่ ngrok.com ให้ทำตามนี้ครับ:

  1. เข้าสู่ระบบที่ dashboard.ngrok.com
  2. ไปที่ “Your Authtoken” ในเมนูซ้าย
  3. คัดลอก Auth Token ของคุณ

จากนั้นรันคำสั่งนี้ใน terminal:

Terminal window
ngrok config add-authtoken YOUR_TOKEN_HERE

ตัวอย่าง:

Terminal window
ngrok config add-authtoken 2abc123def456ghi789jkl

💡 หมายเหตุ: ทำขั้นตอนนี้แค่ครั้งเดียวครับ! Token จะถูกบันทึกไว้ในเครื่องให้เอง


ขั้นตอนที่ 3: เปิด Port!#

กรณีที่ 1: เปิด Port สำหรับ Web Server (HTTP)#

สมมติว่าเรามีเว็บรันอยู่ที่ localhost:3000:

Terminal window
ngrok http 3000

จะได้หน้าจอแบบนี้ครับ:

ngrok (Ctrl+C to quit)
Session Status online
Account your-email@example.com (Plan: Free)
Version 3.x.x
Region Asia Pacific (ap)
Latency 25ms
Web Interface http://127.0.0.1:4040
Forwarding https://abc123.ngrok-free.app -> http://localhost:3000
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

🎉 URL ที่ใช้แชร์คือ: https://abc123.ngrok-free.app

กรณีที่ 2: เปิด Port อื่นๆ#

Terminal window
# Port 8080
ngrok http 8080
# Port 5000 (Flask default)
ngrok http 5000
# Port 5173 (Vite default)
ngrok http 5173
# Port 4200 (Angular default)
ngrok http 4200

กรณีที่ 3: TCP Port (ไม่ใช่ HTTP)#

สำหรับ SSH, Database, หรือ port อื่นๆ ครับ:

Terminal window
# SSH (port 22)
ngrok tcp 22
# MySQL (port 3306)
ngrok tcp 3306
# Minecraft Server (port 25565)
ngrok tcp 25565

จะได้ address แบบ 0.tcp.ngrok.io:12345 ให้เพื่อนใช้เชื่อมต่อครับ


ขั้นตอนที่ 4: ดู Web Interface#

ngrok มี dashboard ในตัวครับ! ลองเปิด browser แล้วไปที่:

http://127.0.0.1:4040

ที่นี่จะเห็น:

  • 📊 สถิติการเชื่อมต่อ
  • 📝 Request logs (HTTP requests ทั้งหมด)
  • 🔄 Replay requests (ส่ง request ซ้ำได้)

เหมาะมากตอน debug webhook ครับ!


ตัวอย่างการใช้งานจริง#

เปิดเว็บ React/Vue/Next.js#

Terminal window
# React (default port 3000)
ngrok http 3000
# Vue (default port 5173)
ngrok http 5173
# Next.js dev
ngrok http 3000

เปิด Python Flask/FastAPI#

Terminal window
# Flask default port
ngrok http 5000
# FastAPI with uvicorn
ngrok http 8000

ทำ Line Bot / Discord Bot Webhook#

Terminal window
ngrok http 3000

เอา URL ที่ได้ (เช่น https://abc123.ngrok-free.app) ไปใส่ใน:

  • Line Developer Console → Messaging API → Webhook URL
  • Discord Developer Portal → Bot → Interactions Endpoint URL

เปิด Minecraft Server ให้เพื่อนเข้า#

Terminal window
ngrok tcp 25565

จะได้ address แบบ 0.tcp.ngrok.io:12345 ให้เพื่อนใช้เชื่อมต่อครับ


เทคนิคเพิ่มเติม#

1. ใส่รหัสผ่านป้องกัน#

กันคนแปลกหน้าเข้ามาครับ:

Terminal window
ngrok http 3000 --basic-auth="username:password"

ตอนเข้าเว็บจะต้องใส่ username/password ก่อน

2. ดู Logs แบบ Real-time#

Terminal window
ngrok http 3000 --log=stdout

3. เปิดหลาย Port พร้อมกัน#

สร้างไฟล์ ngrok.yml:

version: "2"
authtoken: YOUR_TOKEN
tunnels:
frontend:
addr: 3000
proto: http
backend:
addr: 8080
proto: http
database:
addr: 5432
proto: tcp

จากนั้นรัน:

Terminal window
ngrok start --all

4. แก้ไข Config#

Terminal window
ngrok config edit

จะเปิด config file ขึ้นมาให้แก้ไขครับ


เพิ่มความปลอดภัย#

Basic Authentication#

Terminal window
ngrok http 3000 --basic-auth="user:pass123"

ตอนเข้าเว็บจะขอ username/password ก่อนครับ

OAuth (Google Login)#

สำหรับความปลอดภัยขั้นสูง สามารถตั้งค่าให้ login ด้วย Google ก่อนเข้าได้ครับ

แก้ไขไฟล์ ngrok.yml:

endpoints:
- name: my-app
url: YOUR_DOMAIN
traffic_policy:
on_http_request:
- actions:
- type: oauth
config:
provider: google
upstream:
url: 8080
protocol: http1

ปัญหาที่เจอบ่อย#

1. “Too many connections”#

สาเหตุ: Free tier มี connection limit ครับ

แก้ไข: รอสักครู่แล้วลองใหม่ หรืออัปเกรดแผน

2. “Session expired”#

สาเหตุ: Free tier session หมดอายุ

แก้ไข: รัน ngrok http ใหม่อีกครั้งครับ

3. ngrok ทำงานแต่เข้าเว็บไม่ได้#

สาเหตุ: App ไม่ได้รันหรือรันผิด port

แก้ไข: ตรวจสอบว่า app รันอยู่จริงที่ port ที่ระบุ

Terminal window
# Windows - ดูว่า port ถูกใช้งานหรือไม่
netstat -an | findstr 3000
# Linux/Mac
netstat -an | grep 3000

4. URL เปลี่ยนทุกครั้งที่รัน#

ใช่ครับ Free plan เป็นแบบนี้ 😅

ถ้าอยากได้ URL คงที่ ต้องอัปเกรดแผน หรือใช้ custom domain ครับ


สรุปคำสั่งที่ใช้บ่อย#

ทำอะไรคำสั่ง
เปิด HTTP portngrok http 3000
เปิด TCP portngrok tcp 22
เพิ่ม auth tokenngrok config add-authtoken TOKEN
ใส่รหัสผ่านngrok http 3000 --basic-auth="user:pass"
เปิดทุก tunnelngrok start --all
แก้ไข configngrok config edit
ดู dashboardเข้า http://localhost:4040


ทำไมถึงชอบใช้#

  1. ง่ายมาก — คำสั่งเดียวจบ
  2. ได้ HTTPS ฟรี — ไม่ต้องทำ certificate เอง
  3. Debug ได้ — เห็น request ทุกอันที่เข้ามา
  4. ไม่ต้องยุ่งกับ router — ใครก็ทำได้

บอกเลยว่า ngrok นี่ใช้บ่อยมากครับ โดยเฉพาะตอนทำ bot หรือ demo งานให้คนอื่นดู

ไม่ว่าจะทดสอบ webhook, demo ให้ลูกค้าดู, หรือแชร์งานกับเพื่อน — ngrok ทำให้ทุกอย่างง่ายขึ้นมากเลยครับ

ลองใช้ดูนะครับ!

Terminal window
ngrok http 3000

🚀

ngrok - เปิด Port แบบง่ายๆ ไม่ต้องยุ่งกับ Router
https://blog.lukkid.dev/posts/ngrok-port-forwarding-guide/
Author
LUKKID
Published at
2024-12-19
License
CC BY-NC-SA 4.0