Ngrok là gì?

Ngrok là một công cụ hữu ích cho phép tạo ra các public URLs cho việc truy cập cục bộ (local) vào ứng dụng web của bạn. Điều này rất hữu ích cho việc phát triển và kiểm tra các tính năng yêu cầu webhook từ các dịch vụ bên ngoài hoặc giúp chúng ta chia sẻ dự án với đồng nghiệp hoặc khách hàng.

Ngrok cung cấp một kênh dữ liệu an toàn giữa mạng riêng lẻ (như mạng của bạn) và mạng ngrok. Khi bạn chạy ngrok trên máy của mình, nó sẽ tạo máy chủ ngược(reverse server) và cung cấp cho bạn một URL duy nhất mà nó sẽ chuyển tiếp đến dịch vụ mà bạn đang chạy trên máy cục bộ (local) của mình.

Ngrok hoạt động như thế nào?

Ngrok lập một "đường hầm" ("tunnel") từ một địa chỉ internet public đến máy chủ web đang chạy trên máy cục bộ (local) của bạn.
1ZoyR2EaGbSMPOYiIZXyJp8WYs-FByxvn

Quá trình tạo ra một "đường hầm" hoặc "tunnel" bởi Ngrok có thể được mô tả dưới đây:

  1. Khởi tạo: Khi bạn start Ngrok trên máy của bạn (client), Ngrok mở một kết nối đến máy chủ Ngrok tại hạ tầng cloud. Giao thức TCP được sử dụng để mở kết nối tới máy chủ Ngrok và duy trì nó.

  2. Mở Tunnel: Ngrok tạo ra một "đường hầm" định hướng qua kết nối TCP này. Định hướng này cho phép Ngrok chuyển tiếp yêu cầu từ máy chủ Ngrok trên cloud (được truy cập từ Internet) đến máy chủ cục bộ đang chạy trên máy client.

  3. Cung cấp URL: Ngrok cung cấp một URL duy nhất (với bản miễn phí, thường có dạng *.ngrok-free.app) cho "đường hầm" này. Bất kỳ ai trên Internet có URL này đều có thể truy cập ứng dụng của bạn - thông qua Ngrok - ngay cả khi ứng dụng đang chạy trên máy cục bộ hoặc đằng sau bức tường lửa.

  4. Chuyển tiếp yêu cầu (Forward request): Khi một yêu cầu (request) đến URL mà Ngrok cung cấp, Ngrok sẽ chuyển tiếp yêu cầu này từ máy chủ Ngrok trên đám mây, qua "đường hầm", đến máy chủ cục bộ (local) của bạn.

  5. Chuyển tiếp phản hồi (Forward response): Sau khi máy chủ cục bộ xử lý yêu cầu và trả về một phản hồi, Ngrok chuyển tiếp phản hồi này qua cùng "đường hầm" đã được tạo, trở lại máy chủ Ngrok, và cuối cùng trở lại máy khách đã gửi yêu cầu ban đầu.

Thông qua cách này, Ngrok cho phép bạn chia sẻ dự án đang chạy trên máy cục bộ (local) của mình với người dùng trên mạng Internet, ngay cả khi bạn đang chạy dự án trên mạng cục bộ hoặc đằng sau bức tường lửa.

Điểm mạnh của ngrok

Dưới đây là một số điểm mạnh của ngrok, đặc biệt đối với các nhà phát triển web:

  • Kiểm thử ứng dụng cục bộ: Ngrok cho phép các nhà phát triển kiểm thử các ứng dụng cục bộ như thể đang chạy trên một máy chủ công cộng, mà không cần phải triển khai ứng dụng.

  • Dễ dàng chia sẻ truy cập: Ngrok (qua URLs ngrok.com, ngrok-free.app) cho phép bạn chia sẻ truy cập đến ứng dụng web hoặc API đang chạy trên máy tính cục bộ của bạn với bất kỳ người nào có đường truyền internet, điều này rất hữu ích trong việc chia sẻ truy cập.

  • Kiểm thử webhook: Chức năng này cực kỳ hữu ích nếu ứng dụng của bạn sử dụng webhooks và bạn muốn kiểm tra xem nó có hoạt động như mong đợi hay không. Ngrok cung cấp một giao diện web mô phỏng lại các yêu cầu mà máy chủ của bạn nhận được.

  • Bảo mật: Ngrok cung cấp mã hóa end-to-end, vì vậy tất cả dữ liệu truyền giữa máy chủ công cộng và máy chủ cục bộ của bạn đều được bảo mật.

  • Đơn giản để thiết lập và sử dụng: Ngrok không đòi hỏi bất kỳ cấu hình đặc biệt nào và bạn có thể bắt đầu sử dụng nó chỉ với một vài dòng lệnh.

  • Hỗ trợ nhiều giao thức: Ngrok hỗ trợ nhiều giao thức kết nối khác nhau như HTTP, HTTPS, TCP, và TLS.

  • Tính năng phân tích: Ngrok cung cấp giao diện người dùng để xem lại lịch sử yêu cầu và phản hồi.

Cài đặt và sử dụng ngrok

Cài đặt trên ubuntu server 22.04:

  1. Đăng ký tài khoản tại: https://ngrok.com/
    121GKYdbRB686WxYaBj49wut9hOohBSbk
  2. SSH vào server, cài đặt ngrok thông qua Snap: $ snap install ngrok
  3. Add authtoken, token được lấy từ trang ngrok mới được đăng ký tài khoản ở bước 1: $ ngrok config add-authtoken <token>
  4. Tạo một tunnel cho cổng 443: $ ngrok http 443 !
    1aRcMjZSdLJHz0SolzGOhJKAEOvnz5ih5
  5. Truy cập url public: https://a4d0-118-70-67-78-ngrok-free.app, khi đó sẽ truy cập được vào https://localhost ở máy cục bộ

Về các tùy chọn thêm khi tạo tunnel của ngrok, các bạn có thể truy cập để xem chi tiết ở đây: https://ngrok.com/docs/

Chú ý khi sử dụng ngrok

Mặc dù Ngrok là một công cụ hữu ích, nhưng giống như các phần mềm khác, nó không phải lúc nào cũng hoàn hảo. Có một số khó khăn khi sử dụng Ngrok mà bạn cần biết:

  • Security Risks: Vì Ngrok ánh xạ máy chủ cục bộ của bạn lên máy chủ của nó, có rủi ro bảo mật tiềm ẩn nếu dữ liệu nhạy cảm được truyền tải.
  • Reliability: Việc tải một ứng dụng web thông qua tunneling sẽ làm chậm URL được tạo đường hầm vì mỗi yêu cầu đều được tạo đường hầm qua một máy chủ khác. Thêm vào đó, việc sử dụng Ngrok với kết nối gián đoạn hoặc tốc độ chậm càng làm chậm URL của bạn.
  • Dependency on Third-Party Service: Vì Ngrok phụ thuộc vào một dịch vụ bên thứ ba, luôn luôn có rủi ro về thời gian downtime hoặc gián đoạn dịch vụ. Điều này có thể ảnh hưởng đến khả năng làm việc trên dự án của bạn hoặc chia sẻ nó với người khác.
  • Limited Customization: Mặc dù Ngrok cung cấp một số tùy chọn tùy chỉnh, nhưng chúng khá hạn chế. Điều này có thể gây khó khăn nếu bạn đang tìm kiếm sự kiểm soát tinh tế hơn đối với việc ánh xạ máy chủ của mình.
  • Limited Free Plan: Phiên bản miễn phí của Ngrok chỉ cho phép một số lượng kết nối hạn chế mỗi phút và không bao gồm các tính năng nâng cao như tên miền tùy chỉnh. Điều này có thể là một hạn chế đối với các dự án hoặc nhóm lớn hơn.

Tổng kết

Sử dụng Ngrok cho phép nhà phát triển cung cấp truy cập internet công cộng đến ứng dụng đang chạy trên máy cục bộ của họ, điều này tạo điều kiện thuận lợi cho việc chia sẻ, kiểm thử và phát triển sản phẩm. Ngrok cung cấp một cách an toàn để thử nghiệm các webhook và các giao diện lập trình ứng dụng (APIs), giúp tái tạo môi trường sản xuất và theo dõi lỗi hiệu quả. Hơn nữa, nó dễ sử dụng, linh hoạt và không đòi hỏi quy trình triển khai phức tạp, vì vậy, khi có nhu cầu public url trong các ứng dụng web cụ bộ, thì ngrok là một trong những lựa chọn hàng đầu để sử dụng.

Tài liệu tham khảo

Getting Started with ngrok
What's Ngrok, and how does it work?