1.简介

正常情况下 Nginx 的管理和日常操作都是通过 Shell 的方式进行,要求操作人员熟悉操作系统环境和 Nginx 配置文件中的各种设置参数。在 Nginx  的配置文件多(大于100个)且变化频繁的情况下更是考验操作人员的能力和经验。

随着微服务和 Devops 的技术趋势,简化 web 代理操作并确保设置即时生效的需求越来越多。后续甚至需要考虑集成到产品本身的服务中。目前通过 web 方式管理 Nginx 代理服务器的除商业方案外(如 Openresty 商业版 Edge)开源的方案有基于 kong 微服务的 konga 方案和本文提到的 Nginxproxymanager。

1.1.Konga

基于 kong 微服务网关的图行管理界面。详细的安装及配置可以参考:

kong 微服务网关插件机制及常用指令    ​​https://blog.51cto.com/waringid/5800540​

kong 微服务网关配置指南    ​https://blog.51cto.com/waringid/5793828​

使用Kong和Konga管理微服务和API    ​https://blog.51cto.com/waringid/5790671​

nginx配置指南之一    ​https://blog.51cto.com/waringid/1438852​

nginx操作指南之二    ​​https://blog.51cto.com/waringid/1441632​

nginx增加modsecurity模块    ​https://blog.51cto.com/waringid/1629905​

也谈nginx的安全限制     ​https://blog.51cto.com/waringid/1608666​

利用Kong 的 request-transformer 插件重写 URL   ​​https://blog.51cto.com/waringid/5803062​

Linux 系统生产环境配置指南   ​https://blog.51cto.com/waringid/5782872​​​

序号

功能

说明

1

代理组件

  1. Nginx
  2. Openresty
  3. Kong

2


数据库

PGSQL

Kong 不支持 MySQL

3

图形管理

konga

4

图形组件

node

5

优势

  1. 功能全面
  2. 集成多种插件
  3. 支持命令行操作

6

缺点

  1. 架构庞大、复杂,安装配置要求高
  2. 添加配置较多时,web 展示不直观
  3. 需要定制、调整;部分 Nginx 高级功能无法在图形界面调整

1.2.nginxproxymanager

和 konga 相比配置和操作都比较简单,对于要求不高的应用场景(例如内网环境)可以用来替换 konga

​https://nginxproxymanager.com/​

序号

功能

说明

1

代理组件

  1. Nginx
  2. Openresty
  3. docker

2

数据库

MySQL

3

图形管理

nginxproxymanager

4

优势

  1. 简单、直观
  2. 支持自定义语句

5

缺点

  1. 容器环境,需要考虑综合性能
  2. 高级功能(限速、限流等)未集成

2.安装 nginxproxymanager 

2.1.环境配置

1、参照​​“Linux 生产环境配置指南”​​中的“容器组件更新”部分的内容完成容器组件的配置

2、安装 docker compose 工具​​https://docs.docker.com/compose/install/​

yum install python-pip python-devel libffi-devel openssl-devel gcc libc-* make
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理

2.2.增加加容器文件

version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
- '8000:8000'
environment:
TZ: "Asia/Shanghai"
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:10.4'
environment:
TZ: "Asia/Shanghai"
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql

1、增加的 8000 端口配置用于测试验证 Nginx 的 TCP 端口转发,例如将 8000 转发到内网的 SSH 端口

2、TZ:“Asia/Shanghai” 用于配置时区,容器默认的时区为 +0 时区,Nginx 日志的时间记录和北京时间相差8小时

2.3.启动容器

docker-compose up -d

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_02

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_03

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_04

3.访问及配置

3.1.登陆

容器启动后通过 web 打开容器所在的主机地址的81端口访问。默认的用户名和密码是:admin@example.com/changeme

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_05

3.2.反向代理主机

代理主机中的 Access list 访问策略默认只有公共策略,只有建立了自定义策略后才会显示。主要用于控制页面的访问权限(例如增加用户名密码或是 IP 地址限制等策略)

Nginx 图形管理工具 Nginxproxymanager_容器_06

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_07

3.3.域名重定向

Nginx 图形管理工具 Nginxproxymanager_容器_08

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_09

3.4.端口转发

Nginx 图形管理工具 Nginxproxymanager_Nginx 图形管理_10

Nginx 图形管理工具 Nginxproxymanager_容器_11

3.5.访问控制

Nginx 图形管理工具 Nginxproxymanager_容器_12

Nginx 图形管理工具 Nginxproxymanager_容器_13