docker系列 使用docker基于nginxWebUI搭建图形化的nginx

前言

我现在习惯两种nginx的部署方式:宝塔面板和docker。其中宝塔面板的nginx主要是做ssl解密和反向代理,主打一个方便(详细配置步骤参见:linux面板系列 配置反向代理并使用非443端口进行发布);docker部署的nginx主要是和同样docker部署的PHP一起达成我对建站的需求(详细配置步骤参见:docker系列 单容器nginx、单容器php(一个版本)之多站点共用)。

不过,现在因为长亭雷池的社区版waf不支持负载均衡:
image.png

专业版才能支持多上游服务器(专业版1500多一年),用不起啊,所以我只能在长亭雷池的waf下再在加一个负载均衡来实现。

有两种负载均衡的方式可以选择:
1、zevenet社区版:
image.png

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:

image.png

用新建的账号登录:
image.png

以下就是nginxwebui的界面:
image.png

右上角贴心提供了使用教程:
image.png

预配置

本地-反向代理(server)

在反向代理菜单可以配置反向代理功能,以配置www.example.com的反向代理为例:

image.png

image.png

image.png

image.png

本地-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就好了的情况。。。


image.png

本地-负载均衡(upstream)

这里主要是添加upstream组,然后配合前面讲过的反向代理设置中的代理类型来实现负载均衡。

image.png

image.png

然后在反向代理菜单中设置:
image.png

如果是4层的负载均衡,创建upstream组需要选择转发类型为tcp/udp:
image.png

然后在反向代理菜单中设置:
image.png

本地-静态网页上传

当我们要以源码方式对app进行部署的时候,需要nginxwebui的反向代理的代理类型选择”静态html”,然后使用root指定工作目录,而在这之前,需要先将源码文件上传到nginxwebui的指定目录里。

image.png

将需要上传的源码文件夹压缩为zip包的格式,然后指定工作目录。我们前面创建docker时候使用的-v参数指定了宿主机挂载到容器内部的/home/nginxWebUI路径,所以直接在该路径下创建一个html的目录(以www.example.com.zip为例):
image.png

image.png

image.png

image.png

image.png

image.png

这个时候zip包已经被自动解压到/home/nginxWebUI/html/www.example.com
image.png

然后在反向代理中进行配置:
image.png

上图中代理目标可以是root模式,也可以是alias模式,大家根据自己的配置习惯选择吧。

本地-证书管理

在证书管理中可添加证书, 并进行签发(通过Let’s encrypt申请证书, 只支持在linux下签发证书。)和续签, 开启定时续签后, 系统会自动续签即将过期的证书(只有超过60天的证书才会进行续签),证书的签发是用的acme.shdns模式:

image.png

image.png

本地-其他设置

还有一些其他的设置,都很简单明了,我就不一一说明了:

image.png

image.png

image.png

image.png

image.png

还有一些其他的,我就不一一列举了。

本地-启用配置

nginxwebui比较有特色的一点,是上面这些配置其实都只能算是预配置,所有上面的设置并未生效,需要在启用配置菜单下点击”替换文件”才能生效:

image.png

点击”替换文件”之后:
image.png

默认是所有配置都在nginx.conf中,如果大家喜欢按不同域名分为多个文件,可以打开”按域名分解文件”开关:

image.png

这样总体上就清爽了很多。

系统管理-远程服务器

如果有多台nginxwebui服务器, 可以登录其中一台, 在远程管理中添加其他服务器的ip和用户名密码, 就可以在一台机器上管理所有的nginx服务器了.

同时nginxwebui也提供一键同步功能, 可以将某一台服务器的数据配置和证书文件同步到其他服务器中。远程服务器界面如下:

image.png

image.png

总结

其实每个人习惯配置nginx的方式都不一样,像我更习惯直接用docker方式的官方nginx来建站,让我用nginxwebui反而会降低效率。不过对于一般对nginx配置不那么熟悉的朋友,我觉得nginxwebui是个很好的帮手,并且图形界面会让配置更加直观,展现效果也好,是个很不错的nginx配置辅助工具。不过nginxwebui只能覆盖nginx常见的90%左右的功能,一些没有包含的高级功能还是需要在最终生成的nginx.conf文件中手动自行添加。

nginxwebui我就专门用来做4、7层的负载均衡使用了(一般用4层负载就可以了),规划中的结构终于完全达成了:
image.png

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       
error:
zh_CN
春节
快乐