Reverse Proxy là một server trung gian giữa Client và Server. Nó kiểm soát các request từ Client, và điều phối những request đó tới Server phù hợp, để Server xử lí request đó. Khi Server xử lí xong, sẽ trả về response cho Reverse Proxy, và Reverse Proxy có trả về response đó cho Client.
Một số ưu điểm của Reverse Proxy là:
Hướng dẫn này được thực hiện trên môi trường CentOS8.
sudo yum update -y
sudo yum upgrade -y
sudo yum install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl is-enabled nginx
sudo systemctl status nginx
Mở trình duyệt và truy cập URL: http://localhost
sudo setsebool -P httpd_can_network_connect 1
Câu lệnh này được sử dụng để cho phép tiến trình Apache (httpd) truy cập vào các tài nguyên mạng trên hệ thống, bao gồm các kết nối mạng.
Thông qua tham số -P, giá trị của chính sách này sẽ được lưu trữ vĩnh viễn và không bị thay đổi khi hệ thống khởi động lại.
Giá trị "1" được truyền vào tham số httpd_can_network_connect để cho phép tiến trình httpd kết nối đến các mạng khác trên hệ thống. Nếu giá trị này là "0", tiến trình httpd sẽ không được phép truy cập vào các tài nguyên mạng.
Ở đây, thiết lập Firewall mở port mà NGINX cung cấp dịch vụ. Ví dụ, mở port mặc định cho HTTP (port 80) và HTTPS(port 443) trong firewalld:
sudo firewall-cmd --permanent --add-port={80/tcp,443/tcp}
sudo firewall-cmd –reload
Kiểm tra đảm bảo port mà NGINX cung cấp dịch vụ đã được ở trên firewalld
sudo firewall-cmd --list-ports
Cấu hình Reverse Proxy cho URL: https://vnpro.vn/
cd /etc/nginx/
ls
sudo nano conf.d/domain.conf
Nội dung file:
server {
listen 80;
server_name nginx.vnpro;
location / {
proxy_pass https://vnpro.vn/;
}
}
Listen là port lắng nghe các traffic từ client. Ở đây NGINX sẽ lắng nghe ở port 80
Server_name là domain muốn tạo reverse proxy. Ở đây NGINX sẽ cung cấp domain nginx.vnpro để client có thể truy cập đến.
Location là nơi định nghĩa đường dẫn URI.
Proxy_pass xác định URL tạo kết nối đến. Ở đây NGINX sẽ gửi traffic đến URL https://vnpro.vn/ khi nhận được request từ client.
Mỗi lần sửa đổi cấu hình, cần kiểm tra đã đúng syntax hay chưa:
sudo nginx -t
Sau khi cấu hình xong cần khởi động lại NGINX:
sudo systemctl restart nginx
Kiểm tra IP CentOS đang chạy NGINX
Ở đây, cần cấu hình reverse domain sang IP đang chạy NGINX.
sudo nano /etc/hosts
Thêm nội dung vào file:
192.168.23.129 nginx.vnpro
Bạn có thể sử dụng tính năng reverse proxy NGINX để cân bằng tải lưu lượng. Quy trình này mô tả cách định cấu hình NGINX làm bộ cân bằng tải HTTP gửi yêu cầu đến các máy chủ khác nhau, dựa trên máy chủ nào có số lượng kết nối hoạt động ít nhất. Nếu cả hai máy chủ đều không khả dụng, quy trình cũng xác định máy chủ thứ ba vì lý do dự phòng.
Đối với mô hình mạng sử dụng Load Balancing thì cần 1 server gốc và ít nhất 1 server phụ. Và trong hướng dẫn này sử dụng Flask trong Python tạo ra 3 server đơn giản.
File app1.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return """Home page"""
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int("5001"))
File app2.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return """Home page"""
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int("5002"))
File app3.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return """Home page"""
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int("5003"))
Mở 3 trình Terminal và chạy 3 file python phía trên.
Tạo file cấu hình nginxLB.conf trong thư mục conf.d
sudo conf.d/nginxLB.conf
Nội dung file nginxLB.conf
upstream backend_servers {
server 192.168.3.175:5001;
server 192.168.3.175:5002;
server 192.168.3.175:5003;
}
server {
listen 80;
server_name nginxLB.vnpro;
location / {
proxy_pass http://backend_servers;
}
}
Uptream được sử dụng để khai báo domain cho những server xử lý những request mà được load balancer gửi đến. Mỗi khi có request gửi tới nginxLB.vnpro thông qua port 80. Request đó sẽ được NGINX (với vai trò là load balancer) điều phối tới server thích hợp nằm trong upstream.
Proxy_pass sẽ trỏ tới tên domain được định nghĩa trên upstream
Chỉnh sửa file /etc/hosts
nano /etc/hosts
Thêm nội dung vào file:
127.0.0.1 nginxLB.vnpro
Sau đó mở trình duyệt và truy cập URL http://nginxLB.vnpro
Mở terminal chạy dịch vụ kiểm tra ta chỉ thấy server 1 xử lý request này
Kiểm tra bằng câu lệnh:
while sleep 0.5; do curl nginxLB.vnpro; done
Sau khi chạy câu lệnh, Mở terminal lên kiểm tra thấy cả 3 server đều nhận và xử lý request
Ở đây, chúng ta sẽ tạo thêm 1 server thứ 4 dùng để backup, chỉ xử lý các request khi cả 3 server trên ngưng hoạt động.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return """Home page"""
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int("5004"))
Server 4 chạy ở địa chỉ http://192.168.3.175:5004
Mở file conf.d/nginxLB.conf:
nano conf.d/nginxLB.conf
Và thêm nội dung:
server 192.168.3.175:5004 backup;
Sau khi sửa file conf tiến hành kiểm tra và chạy lại NGINX
nginx -t
sudo systemctl restart nginx
while sleep 0.5; do curl nginxLB.vnpro; done
Mở Terminal kiểm tra server 4 không có xử bất kì request nào.