Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -

Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -

Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -

Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -

Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -
Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX -
(028) 35124257 - 0933 427 079

Hướng dẫn thực hiện Reverse Proxy và Load Balancer với NGINX

15-06-2023
  1. Giới thiệu:

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à:

  • Có thể che giấu sự tồn tại và các đặc điểm của các Server thực sự được dùng.
  • Load balancing, Proxy có thể chia đều các request của Client tới Server.
  • Có thể nén nội dung, tăng tốc độ truy cập.
  • Có thể trở thành một application firewall để chống đỡ những cuộc tấn công (ví dụ DDoS) và các ứng dụng Web.
  1. Thiết lập môi trường và cài đặt NGINX:

Hướng dẫn này được thực hiện trên môi trường CentOS8.

  • Cập nhật CentOS:

sudo yum update -y

sudo yum upgrade -y

  • Cài đặt NGINX:

sudo yum install nginx -y

  • Kích hoạt và khởi chạy NGINX:

sudo systemctl enable nginx

sudo systemctl start nginx

  • Kiểm tra trạng thái enable:

sudo systemctl is-enabled nginx

 

  • Kiểm tra trạng thái hoạt động của NGINX:

sudo systemctl status nginx

Mở trình duyệt và truy cập URL: http://localhost

  • Thiết lập chính sách bảo mật SELinux:

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.

  • Thiết lập Firewall:

Ở đâ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

  1. Cấu hình Reverse Proxy cho traffic HTTP sử dụng NGINX

Cấu hình Reverse Proxy cho URL: https://vnpro.vn/

  • Truy cập đường dẫn thư mục NGINX

cd /etc/nginx/

ls

  • Tạo file cấu hình reverse proxy với tên domain.conf trong thư mục conf.d

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

  • Cấu hình file hosts:

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

  1. Cấu hình HTTP load balance với NGINX

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.

  1. Chuẩn bị

Đố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.

  1. Cấu hình file .conf

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

  1. Kiểm tra hoạt động Load Balancing của NGINX

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

  1. Cấu hình server Backup

Ở đâ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.

  • Tạo file app4.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("5004"))

Server 4 chạy ở địa chỉ http://192.168.3.175:5004

  • Sửa file nginxLB.conf

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

  • Kiểm tra Load balancing bằng CLI:

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.

  • Thực hiện tắt server 1,2,3 và chạy lại câu lệnh CLI và kiểm tra server 4 đã xử lý request

 

 


FORM ĐĂNG KÝ MUA HÀNG
Đặt hàng
icon-cart
0