23/02/2022

Ứng dụng Nginx Proxy Manager làm giao diện quản trị Nginx Proxy

Nginx Proxy manager là công cụ hỗ trợ quản trị Nginx thông qua giao diện đồ họa. Nginx proxy manager cho phép các bạn cấu hình nhanh Nginx Server qua giao diện thân thiện bắt mắt.

Tổng quan

Nginx (phát âm engine-ex) là bộ mã nguồn mở nối tiếng, được sử dụng như Web Server (HTTP Server) hoặc reverse proxy, hay làm proxy server cho các dịch vụ IMAP/POP3, ngoài ra nginx còn được sử dụng làm HTTP Cache server, Load balancer. Nginx được thiết kế với hiệu năng xử lý cao, ổn định, nhiều tính năng, cấu hình đơn giản, sử dụng ít tài nguyên hệ thống. Nginx xuất bản năm 2011 và được phát triển bởi Igor Sysoev.

Nginx Proxy manager là công cụ hỗ trợ quản trị Nginx thông qua giao diện đồ họa. Nginx proxy manager cho phép các bạn cấu hình nhanh Nginx Server qua giao diện thân thiện bắt mắt.

Chuẩn bị

Phân hoạch địa chỉ

Mô hình triển khai

Triển khai

Phần 1: Thực hiện trên node Apache Web Server

Tắt SELinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
init 6

Bước 1: Cài đặt Apache Web Server

yum install httpd -y
echo '<h1>Chào mừng tới Blog Cloud365</h1>' > /var/www/html/index.html 

Bước 2: Khởi động dịch vụ

systemctl start httpd
systemctl enable httpd

Bước 3: Kiểm tra

curl -I 33.5.6.15
curl 33.5.6.15 

Kết quả

[root@apache-webserver ~]# curl -I 33.5.6.15HTTP/1.1 200 OKDate: Wed, 14 Aug 2019 16:51:26 GMTServer: Apache/2.4.6 (CentOS)Last-Modified: Tue, 13 Aug 2019 17:11:35 GMTETag: "2a-59002bb97fe20"Accept-Ranges: bytesContent-Length: 42Content-Type: text/html; charset=UTF-8

[root@apache-webserver ~]# curl 33.5.6.15
Chào mừng tới Blog Cloud365

Bước 4: Cấu hình Firewalld

firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

Kiểm tra

firewall-cmd --list-all

Kểt quả

[root@apache-webserver ~]# firewall-cmd --list-all
 public
   target: default
   icmp-block-inversion: no
   interfaces:
   sources:
   services: ssh dhcpv6-client http
   ports:
   protocols:
   masquerade: no
   forward-ports:
   source-ports:
   icmp-blocks:
   rich rules:

Phần 2: Thực hiện trên node Nginx Proxy Manager

Lưu ý:
- Mình sẽ triển khai Nginx Proxy Manager qua phiên bản đã được đóng gói thành Container. Đồng thời sẽ sử dụng Docker và Docker Compose để khởi tạo dịch vụ

Bước 1: Cài đặt Docker

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

Kiểm tra dịch vụ Docker

sudo systemctl status docker
sudo docker run hello-world

Kết quả

[root@nginx-proxy ~]# sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-08-13 22:44:26 +07; 3min 11s ago
     Docs: https://docs.docker.com
Main PID: 5272 (dockerd)
   CGroup: /system.slice/docker.service
           └─5272 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Hint: Some lines were ellipsized, use -l to show in full.

[root@nginx-proxy ~]# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/ 

Bước 2: Cài đặt Docker Compose

curl -O https://raw.githubusercontent.com/sitespeedio/sitespeed.io/master/docker/docker-compose.yml

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

Kết quả

[root@nginx-proxy ~]# docker-compose --version
docker-compose version 1.24.1, build 4667896b

Bước 3: Cài đặt Nginx Proxy Manager

Bước 3.1: Cài đặt Git

yum install git -y

Bước 3.2: Clone repo Nginx Proxy Manager

git clone https://github.com/jc21/nginx-proxy-manager.git

Kết quả

[root@nginx-proxy ~]# git clone https://github.com/jc21/nginx-proxy-manager.git
Cloning into 'nginx-proxy-manager'…
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 3446 (delta 1), reused 4 (delta 0), pack-reused 3432
Receiving objects: 100% (3446/3446), 1.39 MiB | 956.00 KiB/s, done.
Resolving deltas: 100% (2161/2161), done.

Bước 3.3: Khởi động Nginx Proxy Manager bằng docker compose

cd nginx-proxy-manager/doc/example/
docker-compose up -d

Kết quả

[root@nginx-proxy example]# docker-compose up -d

Creating example_db_1 ... done
Creating example_app_1 ... done 

Bước 3.4: Kiểm tra

docker ps 

Kết quả

[root@nginx-proxy example]# docker ps
 CONTAINER ID        IMAGE                             COMMAND                  CREATED              STATUS                          PORTS                                                      NAMES
 f5c6ab12d2be        jc21/nginx-proxy-manager:latest   "/init"                  About a minute ago   Up About a minute (unhealthy)   0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp, 9876/tcp   example_app_1
 6ae6119c1d5d        mariadb:latest                    "docker-entrypoint.s…"   About a minute ago   Up About a minute               3306/tcp                                                   example_db_1

Kiểm tra giao diện Web

Để kiểm tra, mình sẽ truy cập vào Port 80 và 81. Trong đó Port 80 là Port của Nginx Proxy Server, Port 81 là Port của Nginx Proxy Manager

Kiểm tra Port 80, truy cập http://10.10.11.64/

Giao diện Nginx Server

Kiểm tra Port 81, mình sẽ truy cập http://10.10.11.64:81/. Tiếp theo mình sẽ truy cập trang quản trị của Nginx Proxy Manager và cấu hình dịch vụ.

Giao diện Nginx Proxy Manager

Truy cập với mật khẩu mặc định

Email:    admin@example.com
Password: changeme 

Sau khi đăng nhập thành công, chúng ta thực hiện thao tác cập nhật thông tin

Nhập lại các thông tin Full Name, Nickname và Email. Chọn Save để lưu thông tin.

Tiếp tục cập nhật mật khẩu

Cập nhật mật khẩu mới. Chọn Save để lưu thông tin.

Màn quản trị tài khoản

Giao diện quản trị tài khoản

Truy cập màn tạo mới Proxy Host

Kết quả

Tiếp theo, chọn “Add Proxy Host”, thêm mới thông tin máy chủ Apache Web Server.

Nhập Domain Name, thông tin máy chủ Apache Web Server nằm trong dải mạng Internal. Chọn Save để lưu thông tin.Kết quả

Phần 3: Thực hiện trên node Ubuntu 18.04

Cấu hình file /etc/host (Sử dụng quyền root)

echo '10.10.11.64 proxy.lab.com' > /etc/hosts

Kểt quả

Truy cập Web với đường dẫn proxy.lab.com

Tổng kết

Tới đây, mình đã hướng dẫn các bạn triển khai Nginx Proxy Manager để quản trị, cấu hình Proxy cho dịch vụ Nginx thông qua giao diện thân thiện, dễ sử dụng. Cám ơn các bạn đã quan tâm. Ngoài ra bạn có thể tham khảo bài viết tổng quan về Nginx Proxy Manager bên dưới.