Fix lỗi tawkto bị chặn

Bằng cách sử dụng aaPanel kết hợp với Node.js, bạn có thể triển khai proxy để tất cả yêu cầu từ client sẽ đi qua server của bạn thay vì trực tiếp đến Tawk.to. Dưới đây là hướng dẫn chi tiết về cách cấu hình.

Bước 1: Cài Đặt Node.js và Tạo Proxy Server

1. Cài đặt Node.js: Nếu chưa cài đặt Node.js, bạn có thể thêm nó vào aaPanel bằng cách vào App Store của aaPanel và cài đặt Node.js.

2. Tạo proxy server Node.js:

Tạo một file Node.js mới (ví dụ proxy.js).

Copy mã bên dưới vào proxy.js để tạo proxy xử lý các yêu cầu tới Tawk.to.

Mã Node.js cho Proxy

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const axios = require('axios');

const app = express();

// Hàm để thay thế URL trong nội dung tải về

const replaceTawkUrls = (body, proxyUrl) => {
    return body.replace(/https:\/\/([^\/]+)\.tawk\.to\//g, `${proxyUrl}/$1.tawk.to/`);
};

// Proxy chính để xử lý các yêu cầu đến Tawk.to và các subdomain

app.use('/tawkto-proxy', async (req, res) => {
    const targetUrl = `https://embed.tawk.to${req.url}`;

    try {
        // Tải nội dung từ Tawk.to
        const response = await axios.get(targetUrl, {
            responseType: 'text',
        });

        // Thay thế URL để các yêu cầu phụ thuộc đi qua proxy
        const modifiedData = replaceTawkUrls(response.data, `${req.protocol}://${req.headers.host}/tawkto-proxy`);

        // Gửi dữ liệu đã thay đổi về client
        res.setHeader('Content-Type', response.headers['content-type']);
        res.send(modifiedData);
    } catch (error) {
        console.error("Error fetching Tawk.to script:", error);
        res.status(500).send("Error loading script");
    }
});

// Tạo middleware để xử lý các subdomain của Tawk.to thông qua proxy
const proxyMiddleware = createProxyMiddleware({
    target: 'https://embed.tawk.to',
    changeOrigin: true,
    pathRewrite: (path, req) => path.replace(/^\/tawkto-proxy\//, '/'),
});

app.use('/tawkto-proxy/:subdomain', proxyMiddleware);

app.listen(3000, () => {
    console.log('Proxy server running on http://localhost:3000');
});

3. Khởi động server Node.js:

Khởi chạy Node.js với lệnh sau từ thư mục chứa proxy.js:

node proxy.js

Proxy này sẽ lắng nghe trên http://localhost:3000.

Bước 2: Cấu Hình Proxy Domain qua aaPanel

1. Thêm một miền mới cho proxy trong aaPanel:

Truy cập vào Website trong aaPanel.

Nhấp vào Add Site để thêm một miền mới (ví dụ: https://yourdomain.com).

Trong phần Root Directory, bạn có thể trỏ đến một thư mục trống vì tất cả lưu lượng sẽ được chuyển qua proxy Node.js.

2. Cấu hình Reverse Proxy:

Sau khi thêm site, vào phần Settings của miền mới trong aaPanel.
Chọn Reverse Proxy và bật Reverse Proxy lên.

Trong Target URL, nhập http://localhost:3000, nơi proxy Node.js đang chạy.

Nhấn Save để lưu cấu hình.

3. Cập nhật Script của Tawk.to để Sử Dụng Proxy Domain

Cuối cùng, cập nhật đoạn mã Tawk.to nhúng trên trang của bạn để sử dụng proxy domain mới:

<script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://yourdomain.com/tawkto-proxy/5d4b86de7d27204601c9da66/default'; // Sử dụng URL proxy của bạn
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>

Bước 3: Kiểm Tra Hoạt Động

Truy cập vào trang web và kiểm tra rằng các tài nguyên Tawk.to được tải thông qua proxy.

Đảm bảo rằng không có lỗi chặn từ nhà mạng bằng cách kiểm tra console của trình duyệt và các yêu cầu mạng (Network tab).

Lưu Ý

Cân nhắc cache cho các tài nguyên Tawk.to để giảm tải cho server Node.js.

Giám sát hiệu suất của server vì proxy có thể tăng lượng tải khi có nhiều truy cập.

Tags:

Bình luận

0 bình luận

  • Hãy là người đầu tiên để lại bình luận cho bài viết này!