Reverse Proxy là gì? Ưu điểm và nhược điểm của Reverse Proxy là gì? Cách cấu hình Reverse Proxy với Nginx như thế nào? Cùng tìm hiểu chi tiết ngay sau đây.
Trong thế giới ngày nay, khi đòi hỏi về hiệu suất và bảo mật ngày càng cao, Nginx nổi bật như một lựa chọn độc đáo cho vai trò reverse proxy. Được biết đến với khả năng xử lý đồng thời và cấu hình đơn giản, Nginx là công cụ mạnh mẽ giúp tối ưu hóa và bảo vệ ứng dụng web. Cùng khám phá Reverse Proxy là gì? cũng như cách cấu hình Reverse Proxy với Nginx trong bài viết dưới đây.
Xem thêm: Nginx là gì? Hướng dẫn cài đặt và cấu hình Nginx chi tiết nhất
1. Reverse Proxy là gì?
Reverse Proxy là một máy chủ đặt giữa máy khách (client) và máy chủ đích (server) trong một kiến trúc mạng. Khi máy khách gửi yêu cầu đến máy chủ, nó trước hết sẽ tương tác với Reverse Proxy thay vì trực tiếp với máy chủ đích.
2. Ưu điểm và nhược điểm của Reverse Proxy là gì?
Ưu điểm của Reverse Proxy
- 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.
- Cân bằng tải: Reverse Proxy có thể được cấu hình để cân bằng lưu lượng truy cập đến nhiều máy chủ
- Tích hợp và Ứng dụng: Reverse Proxy thường được sử dụng để bảo vệ ứng dụng web, cung cấp SSL termination (chấm dứt SSL) và thực hiện các chức năng như xác thực, ủy quyền và kiểm soát truy cập.
Nhược điểm của Reverse Proxy
- Reverse proxy có thể trở thành một điểm đơn lẻ của sự cố. Nếu nó gặp sự cố, toàn bộ hệ thống có thể bị ảnh hưởng.
- Reverse proxy có thể làm tăng thời gian đáp ứng và trễ mạng.
3. Mô hình triển khai
Phân tích:
- 1 máy cài ubuntu-server 20.04 làm proxy server và yêu cầu có 2 card mạng, 1 card mạng dùng NAT và 1 card mạng dùng host-only.
- 1 máy cài centos 8 dùng làm web server và chỉ có 1 card mạng dùng host-only và không thể thông ra môi trường internet.
Ubuntu-server |
Centos 8 |
ens33: 192.168.10.25/24 (NAT) ens36:192.168.20.12 (host-only) |
ens33: 192.168.20.11/24 (host-only) |
Proxy Server |
Web Server (Wordpress) |
Yêu cầu:
- khi truy cập domain www.thanhquang.com có thể hiện thị được thông tin mà máy chủ web (Centos 8) cung cấp.
- Sử dụng lệnh tracert để truy tìm đường đi đến www.thanhquang.com sẽ không lộ ip của máy chủ web (centos 8).
Lưu ý : Ở bài trước mình đã giới thiệu về Nginx bao gồm cả hướng dẫn cài đặt và phân tích các file cấu hình, nếu bạn chưa xem có thể xem lại tại đây.
4. Cấu hình Reverse Proxy với Nginx
4.1 Cấu hình trên máy Ubuntu Server
- Ta thêm file cấu hình sử dụng chức năng reverse proxy vào thư mục sites-available
vi /etc/nginx/sites-available/reverse-proxy |
- Ta thêm vào nội dung sau:
server { listen 80; server_name thanhquang.com www.thanhquang.com; #change to your domain name location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://192.168.20.11; #change to your internal server IP proxy_redirect off; } } |
- Tạo symlink để file reverse-proxy có thể liên kết với thư mục sites-enabled
ln -s /etc/nginx/sites-available/reverse-proxy /etc/nginx/sites-enabled/reverse-proxy |
- Tiến hành kiểm tra xem cấu các cấu hình của nginx đã đúng chưa
nginx -t |
- Nếu đúng kết quả sẽ trả về như sau
root@thanhquang:/etc/nginx# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
- Tiến hành restart lại nginx
systemctl restart nginx |
- Tiến hành mở port cho nginx trên firewall
ufw allow 80/tcp ufw allow 443/tcp |
- Do tôi làm bằng các máy ảo trên VMware workstation và dùng IP Private nên cần phải chỉnh sửa lại file host trên window coi như là mô phỏng lại DNS server vậy.
- Ta tiến hành mở notepad hoặc notepad++ và mở file hosts theo đường dẫn C:\Windows\System32\drivers\etc\hosts
- Thêm vào file các dòng sau
192.168.10.25 thanhquang.com 192.168.10.25 www.thanhquang.com |
- Sau đó sẽ lưu lại.
4.2 Cấu hình trên Centos 8
- Lưu ý rằng ở đây tôi có cài đặt thêm wordpress nếu bạn không muốn cài đặt thêm wordpress thì chỉ cần cài apache là xong.
- Ta tiến hành cài đặt php 7.4
- Thêm kho lưu trữ EPEL và REMI
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm |
- Cài đặt tiện ích utils
dnf -y install dnf-utils |
- Kích hoạt module stream cho PHP 7.4
dnf module reset php -y dnf module install php:remi-7.4 -y |
- Cài đặt các phần mở rộng PHP 7.4
dnf update yum install wget php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap} |
- Cài đặt Apache
yum install -y httpd |
- Cài đặt Mariadb làm hệ quản trị cơ sở dữ liệu
yum install mariadb-server mariadb |
- Tiến hành bật tất cả service ta vừa tải xuống
systemctl start httpd systemctl start mariadb |
- Tạo tài khoản root cho dịch vụ mariadb
mysql_secure_installation |
- Tiếp theo bạn cần nhập mật khẩu root của bạn và ấn Enter đến khi tất cả mọi thứ kết thúc.
Giải thích:
- 1: Ấn enter nếu chưa có mật khẩu root
- 2: nhập y nếu muốn set mật khẩu root
- 3 : nhập y nếu muốn xóa các user khác
- 4 : nhập y nếu muốn không cho đăng nhập tài khoản root từ xa
- 5 : nhập y nếu muốn xóa các database test
- 6 : nhập y nếu muốn load lại bảng phân quyền
- Đăng nhập vào tài khoản root của mariadb với mật khẩu bạn vừa tạo.
mysql -u root -p |
- Tiếp theo thiết lập bạn sẽ tạo cơ sở dữ liệu cho wordpress. Có thể dùng tên bất kỳ cho tên của Database. Trong bài mình đặt là wordpress.
CREATE DATABASE wordpress; |
- Bạn cần tạo một tài khoản riêng để quản lý cơ sở dữ liệu cho Wordpress.
- User: thanhquang
- Password : Khuongquang99
CREATE USER thanhquang@localhost IDENTIFIED BY 'Khuongquang99'; |
- Tiến hành cấp quyền quản lý CSDL Wordpress cho user mới tạo:
GRANT ALL PRIVILEGES ON wordpress.* TO thanhquang@localhost IDENTIFIED BY 'Khuongquang99'; |
- Xác thực lại những thay đổi về quyền:
FLUSH PRIVILEGES; |
- Thoát
exit |
- Tải xuống wordpress và giải nén
cd ~ wget https://wordpress.org/download/ tar xvfz wordpress-6.2.3-vi.tar.gz |
- Tạo thư mục để apache có thể lấy dữ liệu của wordpress và sử dụng
mkdir -p /var/www/thanhquang.com/html |
- Copy các file trong thư mục trong WordPress tới đường dẫn /var/www/thanhquang.com/html
sudo cp -R wordpress /var/www/thanhquang.com/html |
- Chỉnh sửa file cấu hình theo user và passwd ta đã tạo ở MySQL trước đó
cd /var/www/thanhquang.com/html/wordpress cp wp-config-sample.php wp-config.php vi wp-config.php |
- Chỉnh sửa file giống với nội dung sau:
/** Tên database cho WordPress */ define( 'DB_NAME', 'wordpress' ); /** MySQL database tên User */ define( 'DB_USER', 'thanhquang' ); /** MySQL database password cho user */ define( 'DB_PASSWORD', 'Khuongquang99' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ define( 'DB_CHARSET', 'utf8' ); |
- Phân quyền cho phép apache được phép sử dụng các file trong thư mục /var/www/*
chmod -R 755 /var/www/* chown -R apache:apache /var/www/* |
- Tiến hành tạo 2 thư mục sites-available và sites-enabled trong file cấu hình của httpd
mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled |
- Tiếp theo bạn khai báo quyền thực thi cho các thư viện ở sites-enabled bằng cách thay đổi cấu hình của file httpd.conf
vi /etc/httpd/conf/httpd.conf |
- Thêm dòng sau vào cuối:
IncludeOptional sites-enabled/*.conf |
- Lưu lại file
- Tạo file cấu hình virtual host trong thư mục sites-available
sudo vi /etc/httpd/sites-available/thanhquang.com.conf |
- Thêm vào cấu hình sau:
<VirtualHost *:80> ServerName www.thanhquang.com thanhquang.com DocumentRoot /var/www/thanhquang.com/html </VirtualHost> |
- Tạo symlink để liên kết file ở sites-available và sites-enabled
sudo ln -s /etc/httpd/sites-available/thanhquang.com.conf /etc/httpd/sites-enabled/thanhquang.com.conf |
- Bây giờ ta tiến hành bật firewall và cho phép apache hoạt động
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload |
- Restart lại apache
systemctl restart httpd |
4.3 Kiểm tra kết quả
- Ta lên trình duyệt gõ www.thanhquang.com nếu có thể hiển thị như sau thì coi như là đã thành công
- Tiếp theo ta mở cmd của window lên và sử dụng lệnh tracert nếu mà không hiển thị địa chỉ IP của Web Server mà hiển thị địa chỉ IP của Proxy Server là 192.168.10.25 là thành công.
tracert thanhquang.com |
4.4 Lưu ý khi cấu hình Reverse Proxy
Mình mong là sau khi đọc đến đây tất cả các bạn đã có thể tự mình hoàn thành cấu hình Reverse Proxy với Nginx rồi. Nếu bạn không muốn cài đặt wordpress thì ở phần dưới khi cấu hình Load Balancing mình sẽ chỉ cài đặt Apache trên Web Server và hiển thị nội dung đơn giản. Điều này có ý nghĩa là bạn có thể lược bỏ đi phần cấu hình trên Centos 8 và thay thế bằng cấu hình đơn giản ở dưới.
Tổng kết
Nginx là một máy chủ Web rất phổ biến hiện nay, được áp dụng rộng rãi trong thực tế. Chức năng chính của Nginx bạn cần phải nắm rõ đó là Reverse Proxy và Load Balancing. Hy vọng bài viết trên đã giúp bạn hiểu rõ Reverse Proxy là gì cũng như biết cách cấu hình Reverse Proxy. Cùng tìm hiểu về cách cấu hình Load Balancing với Nginx trong bài viết tiếp theo nhé.