Contents
前言
我现在习惯两种nginx的部署方式:宝塔面板和docker。其中宝塔面板的nginx主要是做ssl解密和反向代理,主打一个方便(详细配置步骤参见:linux面板系列 配置反向代理并使用非443端口进行发布);docker部署的nginx主要是和同样docker部署的PHP一起达成我对建站的需求(详细配置步骤参见:docker系列 单容器nginx、单容器php(一个版本)之多站点共用)。
不过,现在因为长亭雷池的社区版waf不支持负载均衡:
专业版才能支持多上游服务器(专业版1500多一年),用不起啊,所以我只能在长亭雷池的waf下再在加一个负载均衡来实现。
有两种负载均衡的方式可以选择:
1、zevenet社区版:
zevenet的优势就是有图形界面,社区版常用功能也没问题,不过我总感觉相对来说,nginx更加轻量化一点,而且,nginx能做的事情更多。
2、nginx
nginx的upstream功能就能实现一般的负载均衡功能,不过就是没有图形界面,这个比较蛋痛了。虽然写配置也不难,但是配惯了F5、A10之类的GUI之后,让我直接写配置文件总感觉别扭,而且也不太好展示与截图,所以就不由得想到,如果nginx有个图形界面就好了。。。
这个时候,我发现了nginxwebui(项目地址:https://github.com/cym1102/nginxWebUI):
官方说明如下:
nginxWebUI是一款图形化管理nginx配置得工具, 可以使用网页来快速配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, 静态html服务器, ssl证书自动申请、续签、配置等, 配置好后可一建生成nginx.conf文件, 同时可控制nginx使用此文件进行启动与重载, 完成对nginx的图形化控制闭环。
这引起了我极大的兴趣,这篇文章就是研究和折腾nginxwebui过程的一个记录了。
部署nginxwebui
nginxwebui可以在linux、windows下部署,需要分别安装nginx和java环境;也可以用docker的方式部署。依照管理,有docker就优先docker,所以本文就直接以docker的方式部署了。
预部署nginxwebui
先用最简单的命令创建nginxwebui:
docker run --name nginxwebui -d -e BOOT_OPTIONS="--server.port=8080" --privileged=true cym1102/nginxwebui:latest
然后将容器内部的/home/nginxWebUI
目录拷贝到宿主机的/docker
目录中:
docker cp nginxwebui:/home/nginxWebUI /docker
这么做的目的是将正常部署nginxwebui所需要的文件夹的内容先拷贝出来,因为如果直接用-v参数将宿主机上的空文件夹挂载到容器内部,容器根本就起不来。
删除容器:
docker stop nginxwebui
docker rm nginxwebui
正式部署nginxwebui
docker格式命令如下:
docker run --name nginxwebui -d --restart=always \
-v /docker/nginxWebUI:/home/nginxWebUI \ #挂载宿主机目录到容器内部
-e BOOT_OPTIONS="--server.port=8080" \ #参数可填充java启动参数, 可以靠此项参数修改端口号;--server.port 占用端口, 不填默认以8080端口启动
--privileged=true \ #给于容器内的root用户真正的root权限
-p 80:80 -p 443:443 -p 8080:8080 \ #其实nginxwebui的作者推荐使用host模式,但是我只用得到80和443以及8080(8080是管理端口),所以我就指定了这3个端口,大家可以根据自己的实际环境修改映射的端口
cym1102/nginxwebui:latest /bin/bash
注:请自行去掉#及后面的注释内容
配置nginxwebui
初始化nginxwebui
使用http://宿主机ip:8080
登录nginxwebui:
用新建的账号登录:
以下就是nginxwebui的界面:
右上角贴心提供了使用教程:
预配置
本地-反向代理(server)
在反向代理菜单可以配置反向代理功能,以配置www.example.com
的反向代理为例:
本地-Stream参数配置
nginx从1.9.0开始,新增加了一个stream模块,用来实现4层协议的转发、代理或者负载均衡等。
nginx通过stream实现的4层转发和lvs的4层转发不同:stream是用proxy方式实现的4层转发,而lvs是直接转发。所以在4层转发的性能上stream方式比lvs略逊,但是在一些特殊环境下,proxy方式体验更好。
专业的负载均衡设备中,F5的4层模式负载均衡就是采用的proxy方式(也只支持这种方式),而A10的4层模式可选tcp和tcp proxy。一些特殊情况下,tcp模式会有问题,最常见的是链路负载均衡的场景,因为广域网过来的访问请求的延迟和内网延迟差别过大,使用直接转发模式会出现诡异的访问问题,这时候,改成tcp proxy模式就好了;而我也遇到过tcp proxy有问题,而改成tcp就好了的情况。。。
本地-负载均衡(upstream)
这里主要是添加upstream组,然后配合前面讲过的反向代理设置中的代理类型来实现负载均衡。
然后在反向代理菜单中设置:
如果是4层的负载均衡,创建upstream组需要选择转发类型为tcp/udp:
然后在反向代理菜单中设置:
本地-静态网页上传
当我们要以源码方式对app进行部署的时候,需要nginxwebui的反向代理的代理类型选择”静态html”,然后使用root指定工作目录,而在这之前,需要先将源码文件上传到nginxwebui的指定目录里。
将需要上传的源码文件夹压缩为zip包的格式,然后指定工作目录。我们前面创建docker时候使用的-v参数指定了宿主机挂载到容器内部的/home/nginxWebUI路径,所以直接在该路径下创建一个html的目录(以www.example.com.zip为例):
这个时候zip包已经被自动解压到
/home/nginxWebUI/html/www.example.com
:然后在反向代理中进行配置:
上图中代理目标可以是root模式,也可以是alias模式,大家根据自己的配置习惯选择吧。
本地-证书管理
在证书管理中可添加证书, 并进行签发(通过Let’s encrypt申请证书, 只支持在linux下签发证书。)和续签, 开启定时续签后, 系统会自动续签即将过期的证书(只有超过60天的证书才会进行续签),证书的签发是用的acme.sh
的dns
模式:
本地-其他设置
还有一些其他的设置,都很简单明了,我就不一一说明了:
还有一些其他的,我就不一一列举了。
本地-启用配置
nginxwebui比较有特色的一点,是上面这些配置其实都只能算是预配置,所有上面的设置并未生效,需要在启用配置菜单下点击”替换文件”才能生效:
点击”替换文件”之后:
默认是所有配置都在nginx.conf中,如果大家喜欢按不同域名分为多个文件,可以打开”按域名分解文件”开关:
这样总体上就清爽了很多。
系统管理-远程服务器
如果有多台nginxwebui服务器, 可以登录其中一台, 在远程管理中添加其他服务器的ip和用户名密码, 就可以在一台机器上管理所有的nginx服务器了.
同时nginxwebui也提供一键同步功能, 可以将某一台服务器的数据配置和证书文件同步到其他服务器中。远程服务器界面如下:
总结
其实每个人习惯配置nginx的方式都不一样,像我更习惯直接用docker方式的官方nginx来建站,让我用nginxwebui反而会降低效率。不过对于一般对nginx配置不那么熟悉的朋友,我觉得nginxwebui是个很好的帮手,并且图形界面会让配置更加直观,展现效果也好,是个很不错的nginx配置辅助工具。不过nginxwebui只能覆盖nginx常见的90%左右的功能,一些没有包含的高级功能还是需要在最终生成的nginx.conf文件中手动自行添加。
nginxwebui我就专门用来做4、7层的负载均衡使用了(一般用4层负载就可以了),规划中的结构终于完全达成了: