• If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.
Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.

Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

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

    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




    Email : vnpro@vnpro.org
    ---------------------------------------------------------------------------------------------------------------
Trung Tâm Tin Học VnPro
149/1D Ung Văn Khiêm P25 Q.Bình thạnh TPHCM
Tel : (08) 35124257 (5 lines)
Fax: (08) 35124314

Home page: http://www.vnpro.vn
Support Forum: http://www.vnpro.org
- Chuyên đào tạo quản trị mạng và hạ tầng Internet
- Phát hành sách chuyên môn
- Tư vấn và tuyển dụng nhân sự IT
- Tư vấn thiết kế và hỗ trợ kỹ thuật hệ thống mạng

Network channel: http://www.dancisco.com
Blog: http://www.vnpro.org/blog
Working...
X