Cấu hình Nginx với Proxy ngược và Cân bằng Tải

1. Giới thiệu về Proxy ngược và Cân bằng Tải

Proxy ngược (Reverse Proxy) là một kỹ thuật mà máy chủ proxy nhận các yêu cầu từ khách hàng và chuyển tiếp chúng đến máy chủ gốc thay mặt cho khách hàng. Trong khi đó, cân bằng tải (Load Balancing) giúp phân phối lưu lượng truy cập tới nhiều máy chủ để đảm bảo hiệu suất tối ưu.

2. Các loại Proxy

  • Proxy chính向: Khách hàng cần biết cả proxy và máy chủ đích.
  • Proxy ngược: Khách hàng chỉ tương tác với proxy mà không cần biết máy chủ đích.

3. Thực hành cấu hình Nginx làm Proxy ngược

Bắt đầu bằng cách cài đặt Nginx trên máy chủ lb01:


# Tải xuống Nginx
wget https://nginx.org/download/nginx-1.20.2.tar.gz

# Giải nén
tar -xf nginx-1.20.2.tar.gz

# Cài đặt phụ thuộc
yum install openssl openssl-devel zlib zlib-devel -y

# Cấu hình biên dịch
./configure --with-http_gzip_static_module --with-stream --with-http_ssl_module

# Biên dịch và cài đặt
make && make install

Sau khi cài đặt xong, tạo cấu hình cơ bản:


mkdir /etc/nginx
mv /usr/local/nginx/conf/* /etc/nginx/
mkdir /etc/nginx/conf.d

# Tạo file dịch vụ systemd
vim /usr/lib/systemd/system/nginx.service

Ví dụ cấu hình proxy ngược:


server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://172.16.1.7:80;
        include /etc/nginx/proxy_params;
    }
}

4. Các tham số proxy quan trọng

Nginx cung cấp nhiều tùy chọn để điều chỉnh proxy:

  • proxy_set_header: Thêm thông tin header vào yêu cầu gửi tới máy chủ đích.
  • proxy_connect_timeout, proxy_read_timeout, proxy_send_timeout: Đặt thời gian chờ kết nối, đọc và gửi dữ liệu.
  • proxy_buffering: Bật/tắt chế độ đệm dữ liệu trước khi gửi tới client.

5. Cấu hình cân bằng tải

Tạo pool máy chủ backend:


upstream app_servers {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
    server 172.16.1.9:80;
}

server {
    listen 80;
    server_name py.test.com;
    location / {
        proxy_pass http://app_servers;
        include /etc/nginx/proxy_params;
    }
}

Chiến lược phân phối tải

  • Round-robin: Phân phối tuần tự giữa các máy chủ.
  • Weighted: Phân phối dựa trên trọng số của mỗi máy chủ.
  • IP Hash: Gắn bó mỗi địa chỉ IP client với một máy chủ cụ thể.

Tùy chọn trạng thái máy chủ

Tùy chọn Mô tả
down Loại bỏ khỏi danh sách cân bằng tải.
backup Dự phòng khi tất cả máy chủ chính đều không khả dụng.
max_fails Số lần thất bại cho phép trước khi đánh dấu máy chủ là không khả dụng.
fail_timeout Thời gian tạm ngừng sử dụng sau khi đạt max_fails.

6. Ví dụ thực tế với Django và uWSGI

Cấu hình uWSGI để chạy ứng dụng Django:


[uwsgi]
socket = :8000
chdir = /opt/bbs
wsgi-file = bbs/wsgi.py
master = true
processes = 4
vacuum = true

Kết hợp Nginx với uWSGI:


server {
    listen 80;
    server_name py.test.com;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
    }
}

Chạy ứng dụng:


uwsgi --ini myweb_uwsgi.ini --uid 666
systemctl restart nginx

7. Kết hợp Load Balancer và Backend

Tích hợp load balancer với backend:


upstream django_app {
    server 172.16.1.7:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.8:80 max_fails=3 fail_timeout=3s;
    server 172.16.1.9:80 max_fails=3 fail_timeout=3s;
}

server {
    listen 80;
    server_name py.test.com;
    location / {
        proxy_pass http://django_app;
        include /etc/nginx/proxy_params;
    }
}

Thẻ: nginx Django uwsgi

Đăng vào ngày 30 tháng 6 lúc 06:34