Proxy và reverse proxy là hai khái niệm quan trọng trong lĩnh vực mạng máy tính, đặc biệt là trong việc quản lý và bảo mật dữ liệu. Dưới đây là một số ví dụ về cách sử dụng proxy và reverse proxy:
Proxy:
Bypass Quy định Truy cập Internet:
- Một tổ chức có thể cài đặt proxy để kiểm soát quy định truy cập internet của nhân viên. Proxy này có thể lọc nội dung, chặn truy cập vào các trang web cụ thể hoặc giới hạn thời gian truy cập.
Browser --> Proxy Server --> Internet
Bảo mật Cấp Độ Cao:
- Sử dụng proxy để ẩn địa chỉ IP thực của máy tính, tăng cường bảo mật khi truy cập internet.
Your Computer --> Proxy Server --> Website
Tăng Tốc Độ Truy Cập:
- Proxy có thể được sử dụng để lưu trữ tạm thời các tài nguyên web, giúp giảm thời gian tải trang web cho người dùng bằng cách giảm băng thông và tăng tốc độ truy cập.
Browser --> Proxy Cache --> Internet
Reverse Proxy:
Bảo vệ Máy Chủ Ứng Dụng:
- Sử dụng reverse proxy để ẩn địa chỉ IP thực của máy chủ ứng dụng, bảo vệ máy chủ khỏi các cuộc tấn công trực tiếp.
Internet --> Reverse Proxy --> Application Server
Tải Cân Bằng:
- Reverse proxy có thể được sử dụng để phân phối lưu lượng truy cập đến nhiều máy chủ ứng dụng, giúp tải cân bằng và tăng khả năng chịu tải.
Internet --> Reverse Proxy --> App Server 1 --> App Server 2 --> App Server 3
SSL Offloading:
- Reverse proxy có thể giải mã SSL (SSL offloading) trước khi chuyển tiếp yêu cầu đến máy chủ ứng dụng, giảm gánh nặng xử lý SSL cho máy chủ.
Internet --> Reverse Proxy (SSL Decryption) --> Application Server
Bảo vệ chống DoS/DDoS:
- Reverse proxy có thể được cấu hình để chống lại cuộc tấn công từ chối dịch vụ (DoS) và tấn công phủ định dịch vụ (DDoS).
Internet --> Reverse Proxy (DoS/DDoS Protection) --> Application Server
Những ví dụ này chỉ là một số ứng dụng phổ biến của proxy và reverse proxy, và có thể được tùy chỉnh phức tạp hơn dựa trên yêu cầu cụ thể của hệ thống và môi trường sử dụng.
CÁCH XÂY DỰNG 1 SERVER PROXY VỚI NODEJS
Để xây dựng một reverse proxy sử dụng Node.js, bạn có thể sử dụng mô-đun http-proxy
. Dưới đây là một ví dụ đơn giản về cách bạn có thể bắt đầu với một reverse proxy đơn giản:
- Đầu tiên, bạn cần cài đặt mô-đun
http-proxy
thông qua npm:
npm install http-proxy
- Sau đó, bạn có thể tạo một file JavaScript (ví dụ:
reverse-proxy.js
) và thêm mã sau:
const http = require('http');
const httpProxy = require('http-proxy');
// Tạo proxy
const proxy = httpProxy.createProxyServer();
// Máy chủ reverse proxy
const server = http.createServer((req, res) => {
// Chuyển tiếp yêu cầu đến địa chỉ mục tiêu (ví dụ: http://localhost:3001)
proxy.web(req, res, { target: 'http://localhost:3001' });
});
// Nghe trên cổng 3000
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Reverse proxy đang lắng nghe trên cổng ${PORT}`);
});
Trong đoạn mã trên:
- Mô-đun
http-proxy
được sử dụng để tạo một proxy server. - Mỗi khi có yêu cầu đến server reverse proxy, nó sẽ chuyển tiếp yêu cầu đó đến địa chỉ mục tiêu (
http://localhost:3001
trong ví dụ này). - Reverse proxy lắng nghe trên cổng 3000.
- Chạy file
reverse-proxy.js
bằng lệnh:
node reverse-proxy.js
Bây giờ, khi bạn truy cập http://localhost:3000
, reverse proxy sẽ chuyển tiếp yêu cầu đến http://localhost:3001
và trả về kết quả.
Lưu ý rằng điều này chỉ là một ví dụ đơn giản, và bạn có thể tùy chỉnh nó để phản ánh nhu cầu cụ thể của ứng dụng của bạn, ví dụ như cấu hình nhiều máy chủ đích, quản lý lỗi, xác thực, và nhiều hơn nữa.
KẾT NỐI PROXY VỚI LARAVEL
Để kết nối reverse proxy (Node.js) với một ứng dụng Laravel, bạn cần thực hiện một số bước sau:
1. Cài đặt Laravel:
Chắc chắn bạn đã cài đặt Laravel trên server của mình. Nếu chưa, bạn có thể sử dụng Composer để tạo một dự án mới:
composer create-project --prefer-dist laravel/laravel my-laravel-app
2. Chỉnh sửa Cấu hình Laravel:
Mở file .env
trong thư mục Laravel và cấu hình địa chỉ cổng cho Laravel:
APP_URL=http://localhost:3001
Ở đây, chúng ta đặt APP_URL
là http://localhost:3001
để phản ánh địa chỉ mà reverse proxy của bạn (Node.js) đang lắng nghe.
3. Cấu hình Reverse Proxy (Node.js):
Trong file reverse-proxy.js
:
const http = require('http');
const httpProxy = require('http-proxy');
const proxy = httpProxy.createProxyServer();
const server = http.createServer((req, res) => {
proxy.web(req, res, { target: 'http://localhost:8000' }); // Chuyển tiếp đến Laravel (ở đây cổng 8000, nhưng bạn nên điều chỉnh tùy thuộc vào cấu hình Laravel của bạn)
});
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Reverse proxy đang lắng nghe trên cổng ${PORT}`);
});
Chắc chắn rằng cổng mà reverse proxy của bạn đang lắng nghe (ở đây là 3000) không trùng với cổng của Laravel (ở đây là 8000).
4. Chạy Ứng Dụng:
Chạy Laravel:
cd my-laravel-app
php artisan serve --port=8000
Chạy Reverse Proxy (Node.js):
node reverse-proxy.js
5. Kiểm Tra Kết Quả:
Truy cập ứng dụng của bạn thông qua địa chỉ của reverse proxy: http://localhost:3000
. Reverse proxy sẽ chuyển tiếp yêu cầu đến Laravel chạy ở cổng 8000.
Lưu ý rằng bạn cũng có thể cấu hình thêm nhiều điều kiện trong reverse proxy để xử lý các trường hợp đặc biệt, như xác thực, chuyển đổi giao thức, và nhiều điều khác nữa.