Custom domain cho Uptimerobot Status Page không cần PRO Plan

Từ ngày 5/5/2021, Uptimerobot yêu cầu PRO Plan để có thể custom domain cho Status Page. Hôm nay mình sẽ “vượt mặt” Uptimerobot để có thể dùng custom domain cho Status Page mà không cần PRO Plan.

Để có thể “vượt mặt” Uptimerobot, trước tiên ta cần hiểu về cơ chế custom domain cho Status Page.

Mặc định mỗi Status Page đều có 1 ID riêng và có thể truy cập qua link https://stats.uptimerobot.com/status_page_id (Ví dụ link của mình là: https://stats.uptimerobot.com/ojM8Acwzq). Khi set custom domain cho Status Page thì ta có thể truy cập bằng domain mình mong muốn, trông sẽ xịn hơn là cái domain có sẵn (Ví dụ link của mình là: https://status.nddcoder.com).

Từ ngày 5/5/2021, nếu tài khoản của bạn không phải gói PRO thì khi truy cập custom domain của Status Page sẽ nhận được kết quả 404 như hình dưới:

Custom domain Uptimerobot Status Page 404

Link custom thì bị 404 nhưng link gốc mà Uptimerobot cung cấp vẫn sẽ dùng được, nên mình sẽ dùng 1 service trung gian, chạy dưới custom domain mình mong muốn, proxy requests đến link của Uptimerobot.

Có nhiều cách để thực hiện nhưng mình sẽ chọn Nginx (vì Nginx có cái proxy_pass) đứng ở giữa để proxy requests. Mô hình trước sau nó sẽ như hình dưới:

Nginx proxy requests to Uptimerobot

Rồi giờ đến bước config Nginx. Mình sẽ ví dụ với config của mình (gist render trên blog có thể bị lỗi 1 số kí tự, mọi người xem trên gist.github.com để xem chính xác nhất):

server {
listen 80;
server_name status.nddcoder.com;
location / {
#proxy requests đến Uptimerobot
proxy_pass https://stats.uptimerobot.com/ojM8Acwzq/;
#Gửi server_name khi handshake SSL, nếu off thì sẽ bị lỗi SSL
proxy_ssl_server_name on;
#Set header này thì response trả về từ Uptimerobot không bị nén, từ đó mình có thể replace ở bước dưới
proxy_set_header Accept-Encoding "";
#Uptimerobot dùng header này với giá trị 'upgrade-insecure-requests' để trình duyệt luôn load các css/js với HTTPS. Ẩn header này để có thể truy cập vào status.nddcoder.com mà không cần HTTPS
proxy_hide_header Content-Security-Policy;
#Replace 1 số link trong response để website load tài nguyên, các nút trên giao diện hoạt động chính xác
sub_filter https://stats.uptimerobot.com/ojM8Acwzq /;
sub_filter https://stats.uptimerobot.com/ /;
#Xóa GTM để Uptimerobot không tracking được mình 😀
sub_filter '<script async src="https://www.googletagmanager.com/gtag/js?id=UA-1748433-46"></script>&#39; '';
#Replace all
sub_filter_once off;
}
#Proxy assets requests
location /assets {
proxy_pass https://stats.uptimerobot.com/assets;
proxy_ssl_server_name on;
}
#Proxy api requests
location /api {
proxy_pass https://stats.uptimerobot.com/api;
proxy_ssl_server_name on;
}
}
# vim: syntax=nginx

Sau khi thêm config và trỏ domain, trang Status Page của mình đã hoạt động như chưa hề có chuyện gì xảy ra 😀

Do config Nginx phía trên có dùng 1 module ngx_http_sub_module mà module này lại không được cài mặc định cùng Nginx, nên mình có đóng gói với Docker để tiện sử dụng hơn, link repo tại dangdungcntt/uptimerobot-parking

Và thế là không cần gói PRO vẫn có custom domain cho Uptimerobot Status Page 😀

2 thoughts on “Custom domain cho Uptimerobot Status Page không cần PRO Plan

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.