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;
}
}