Hướng Dẫn Cấu Hình Dịch Vụ Reverse Proxy Ngrok Trong ServBay
Ngrok là một công cụ mạnh mẽ hỗ trợ tạo tunnel bảo mật, sử dụng công nghệ reverse proxy cho phép xuyên qua tường lửa/NAT, map các dịch vụ đang chạy local ra một tên miền công khai. Hướng dẫn này sẽ giúp bạn tích hợp, thiết lập Ngrok trong môi trường phát triển ServBay, từ đó cho phép truy cập website, API hay các dịch vụ khác đang chạy local qua Internet, phù hợp cho trình diễn từ xa, làm việc nhóm hoặc test callback từ dịch vụ bên thứ ba.
Nguyên Lý Kỹ Thuật
Ngrok sẽ tạo một kết nối tunnel mã hóa giữa máy local của bạn và máy chủ Ngrok. Khi người dùng bên ngoài truy cập tên miền công khai mà Ngrok cung cấp, yêu cầu sẽ đến máy chủ Ngrok rồi chuyển tiếp qua đường hầm này về dịch vụ chạy trong môi trường ServBay local của bạn. Nhờ đó, dù máy local không có IP công cộng hay nằm sau tường lửa, bạn vẫn có thể cung cấp dịch vụ cho bên ngoài. Với ServBay, bạn dễ dàng chia sẻ website, back-end API hay bất kỳ dịch vụ HTTP/HTTPS nội bộ nào ra Internet để test và trình diễn trực tiếp.
Chuẩn Bị Môi Trường
Trước khi cấu hình Ngrok, hãy chắc chắn bạn đã thực hiện các bước sau:
- Đã cài đặt và chạy ServBay: Đảm bảo ứng dụng ServBay đã được thiết lập thành công và dịch vụ web (ví dụ một website) mà bạn muốn public qua Ngrok đã cấu hình, hoạt động ổn định trên ServBay. Bạn có thể xem và quản lý website local trong panel “Trang web” của ServBay.
- Cài đặt Ngrok CLI: Thực hiện các bước triển khai công cụ dòng lệnh Ngrok sau:
- Truy cập trang download Ngrok chính thức để tải bản tương thích với hệ điều hành.
- Giải nén file vừa tải. Di chuyển hoặc copy file thực thi
ngrok
vào thư mục thuộc PATH của hệ thống (ví dụ trên macOS là/usr/local/bin
) để có thể chạy lệnhngrok
từ bất cứ cửa sổ terminal nào.bash# Ví dụ cho macOS bản ARM64 sudo unzip ~/Downloads/ngrok-v3-stable-darwin-arm64.zip -d /usr/local/bin
1
2 - Kiểm tra cài đặt đã thành công bằng cách chạy
ngrok version
và xem số phiên bản:bashngrok version # Kết quả mẫu: ngrok version 3.5.0
1
2
- Tài khoản Ngrok (tùy chọn, khuyến khích): Có tài khoản Ngrok (free hoặc trả phí) giúp bạn quản lý tunnel dễ dàng và dùng các tính năng như tên miền cố định. Đăng ký tại Trang chủ Ngrok và lấy token xác thực (
ngrok config add-authtoken <YOUR_AUTH_TOKEN>
) để bỏ giới hạn thời gian tunnel, truy cập nhiều tính năng khác. - Website local đã cấu hình: Trong ServBay cần có ít nhất một site local mà bạn muốn expose ra ngoài, ví dụ dùng
servbay.local
hoặcyourproject.servbay.demo
làm hostname truy cập nội bộ.
Thực Hành Thiết Lập Tunnel
Giải Thích Tham Số Cốt Lõi
Lệnh cơ bản để map dịch vụ như sau:
ngrok http --domain=<NGROK_DOMAIN> <LOCAL_ENDPOINT> \
--request-header-add='host: <VIRTUAL_HOST>'
2
Thành phần tham số | Chức năng |
---|---|
http | Khởi tạo tunnel theo giao thức HTTP. Ngrok sẽ xử lý mọi request HTTP/HTTPS chuyển vào. |
--domain <NGROK_DOMAIN> | Chỉ định tên miền cố định do Ngrok cấp (thay bằng tên miền thực bạn cài trong Dashboard). Với gói free có thể bỏ qua, Ngrok sẽ tự sinh random subdomain. |
<LOCAL_ENDPOINT> | Địa chỉ dịch vụ trên máy local. Với virtual host của ServBay thường là tên miền nội bộ (ví dụ https://servbay.local ), cũng có thể là http://localhost:port . |
--request-header-add='host: <VIRTUAL_HOST>' | [Quan trọng] Ghi đè header Host của request. ServBay tách các website local qua Host header, nên ta cần set giá trị trùng với tên domain website local để ServBay route chính xác. |
Ví Dụ Cấu Hình
Giả sử trong ServBay bạn có một website local tên miền servbay.local
muốn công khai ra Internet qua Ngrok. Nếu dùng gói free, bạn chỉ cần map local endpoint như sau:
# Map website ServBay local servbay.local lên một domain ngẫu nhiên do Ngrok cấp
ngrok http https://servbay.local --request-header-add='host: servbay.local'
2
Nếu đã cấu hình tên miền cố định trên Ngrok Dashboard (ví dụ your-servbay-demo.ngrok-free.app
hoặc domain tùy chọn trả phí), thêm tham số --domain
:
# Map website ServBay local servbay.local lên domain chỉ định trên Ngrok
ngrok http --domain=your-servbay-demo.ngrok-free.app https://servbay.local --request-header-add='host: servbay.local'
2
Sau khi thực hiện, terminal sẽ hiển thị trạng thái tunnel, bao gồm địa chỉ công khai (kiểu https://xxxx.ngrok-free.app
hoặc domain bạn cấu hình) và dashboard giám sát real-time (thường là http://127.0.0.1:4040
).
Xác Thực Dịch Vụ
Sau khi tunnel được thiết lập thành công, hãy kiểm tra dịch vụ public như sau:
- Lấy địa chỉ công khai: Xem dòng
Forwarding
trên terminal Ngrok để biết URL bắt đầu bằnghttps://
. - Truy cập bằng trình duyệt: Trên bất kỳ thiết bị nào có Internet, nhập URL này (ví dụ:
https://cunning-lacewing-fresh.ngrok-free.app
hoặc domain cố định của bạn). - Kiểm tra kết quả:
- Đảm bảo website của bạn trên ServBay đã hiển thị chính xác.
- Kiểm tra thanh địa chỉ có biểu tượng kết nối HTTPS an toàn (Ngrok tự cấp chứng chỉ SSL hợp lệ cho tunnel).
- Có thể xem log request và thống kê traffic trong terminal hoặc truy cập local dashboard của Ngrok (
http://127.0.0.1:4040
) để xác minh yêu cầu đã đến ServBay.
Hình minh họa: Truy cập thành công tunnel Ngrok qua trình duyệt
Thủ Thuật và Lưu Ý Nâng Cao
- Quản lý domain:
- Tài khoản free thường sẽ nhận subdomain
.ngrok-free.app
ngẫu nhiên, và tunnel bị giới hạn thời gian kết nối. - Nếu có tài khoản, truy cập Dashboard Ngrok để cấu hình domain cố định, không cần update URL mỗi khi khởi động tunnel.
- Gói trả phí cho phép dùng domain cá nhân, băng thông và kết nối cao hơn cùng nhiều tính năng nâng cao.
- Tài khoản free thường sẽ nhận subdomain
- Map nhiều dịch vụ cùng lúc: Nếu cần public nhiều dịch vụ local trong ServBay, bạn có thể mở nhiều process Ngrok, hoặc khai báo multi tunnel trong file config (
~/.config/ngrok/ngrok.yml
). Ví dụ:bashLưu ý: Với dạng virtual host như ServBay, nên map# Public website servbay.local (giả sử dùng HTTPS 443 và phân biệt theo Host header) ngrok http --domain=servbay-website.ngrok-free.app https://servbay.local --request-header-add='host: servbay.local' # Tiếp theo (hoặc trong file config), public Node.js app chạy cổng 3000 ngrok http --domain=nodejs-api.ngrok-free.app http://localhost:3000
1
2
3
4
5https://[domain]
đi kèm--request-header-add
thay vì map thẳng port 80/443 (do ServBay xử lý toàn bộ traffic 2 port này). - Lệnh kiểm tra và chẩn đoán:
ngrok config check
: Kiểm tra lỗi cú pháp file cấu hình Ngrok (~/.config/ngrok/ngrok.yml
).ngrok logs
: Theo dõi log realtime của Ngrok CLI, rất hữu ích chuẩn đoán sự cố kết nối, lỗi định tuyến request...
- Bảo mật: Công khai dịch vụ nội bộ ra Internet đồng nghĩa thêm rủi ro bảo mật. Hãy đảm bảo chỉ mở tunnel khi cần, luôn bảo mật dịch vụ phía sau. Gói trả phí có thêm hạn chế IP truy cập, kiểm soát bảo mật nghiêm ngặt hơn.
Xử Lý Sự Cố
Hiện tượng | Cách xử lý |
---|---|
Timeout hoặc website không load | Đảm bảo website target vẫn chạy nào ServBay và truy cập được bằng domain nội bộ (truy cập thử https://servbay.local ). Xác minh web server (như Caddy/Nginx của ServBay) đã bật. Kiểm tra firewall local có cho phép Ngrok kết nối mạng ra ngoài không. |
Lỗi chứng chỉ HTTPS (trình duyệt cảnh báo) | Ngrok tự cấp chứng chỉ hợp lệ cho domain public. Nếu gặp lỗi HTTPS khi truy cập public URL, thường do cấu hình tunnel hoặc mạng chứ không phải ServBay. Luôn truy cập đúng URL dạng https:// do Ngrok cấp. Nếu lỗi xuất hiện khi truy cập domain local, kiểm tra lại cấu hình SSL của ServBay. |
Tunnel chập chờn, chậm hoặc disconnect | Kiểm tra chất lượng đường truyền Internet local. Đường truyền yếu sẽ gây gián đoạn tunnel. Nên dùng mạng LAN khi test, hoặc cân nhắc gói Ngrok trả phí để có hạ tầng ổn định, băng thông cao hơn cho dự án quan trọng. |
Truy cập ra trang mặc định ServBay thay vì website cụ thể | Đảm bảo giá trị <LOCAL_ENDPOINT> và tham số --request-header-add='host: <VIRTUAL_HOST>' đã điền đúng tên miền website local trên lệnh ngrok http , đây là chìa khóa để ServBay route request đúng đích. |
Câu Hỏi Thường Gặp (FAQ)
Q: Có thể public dịch vụ database của ServBay bằng Ngrok không?
A: Ngrok hỗ trợ tunnel TCP, nên về lý thuyết có thể map cổng database ra ngoài. Tuy nhiên, hướng dẫn này chỉ tập trung vào HTTP tunnel vì lý do bảo mật: Không khuyến nghị expose database local ra Internet. Nếu cần, hãy dùng SSH tunnel hoặc giải pháp an toàn hơn.
Q: Mỗi lần chạy Ngrok thì domain public có thay đổi không?
A: Với gói miễn phí, subdomain
.ngrok-free.app
thường ngẫu nhiên. Muốn giữ domain cố định, nên đăng ký tài khoản và setup domain trên Dashboard, hoặc nâng cấp lên gói trả phí.Q: Dùng Ngrok có ảnh hưởng hiệu suất ServBay local không?
A: Ngrok sẽ cộng thêm một chút latency do phải chuyển tiếp qua máy chủ Ngrok, nhưng phần lớn phù hợp với nhu cầu phát triển/web demo/test. Hiệu suất xử lý của website vẫn chủ yếu phụ thuộc vào máy tính chạy ServBay và ứng dụng bên trong.
Tổng Kết
Tích hợp Ngrok giúp người dùng ServBay dễ dàng, an toàn chia sẻ thành quả phát triển web nội bộ ra ngoài Internet mà không cần cấu hình mạng phức tạp. Giải pháp này cực kỳ phù hợp làm việc nhóm từ xa, trình diễn cho khách hàng, test mobile/device/party service callback... Ngrok cũng trang bị dashboard real-time và nhiều tính năng bảo mật nâng cao (một số cần trả phí). Nếu ứng dụng kinh doanh hoặc phải dùng domain cố định, nên cân nhắc lựa chọn gói trả phí của Ngrok để đảm bảo sự ổn định và nhiều chức năng hơn.