Trang chủTin tứcReverse Proxy là gì? Hướng dẫn cấu hình Reverse Proxy với Nginx
Reverse Proxy là gì? Hướng dẫn cấu hình Reverse Proxy với Nginx

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.

Mô hình hoạt động của Reverse Proxy
Mô hình hoạt động của Reverse Proxy

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

Mô hình dùng để triển khai Reverse Proxy là gì?
Mô hình triển khai Reverse Proxy là gì?

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.

Các bước tạo mật khẩu root cho mariadb
Các bước tạo mật khẩu root cho mariadb

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

Hình ảnh trang web đã được triển khai trên máy Centos 8 
Hình ảnh trang web đã được triển khai trên máy Centos 8 

- 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

Hình ảnh thu được khi ta dùng lệnh tracert bắt đường đi của gói tin
dùng lệnh tracert bắt đường đi của gói tin

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é.

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật