家里路由器是openwrt x86,内外有跑一些服务。这里用路由器上配置nginx+ssl,然后内网的所有web服务都经过nginx到公网,因为家用宽带不只
nginxwebui是国产基于java的开源nginx配置文件生成器,用于替代死板的nginx-proxy-manage 。
优点是 更加灵活 强大 支持中文,几乎支持所有的nginx功能的可视化配置。
缺点是 略微繁琐,尤其是不能自动载入配置文件,创建项目后,要手动在webui里面,点替换和重载。
docker安装
nginxwebui 官网docker实例是用的host模式运行,不建议。还是自定义端口映射。
我这里需要3个端口 nginxwebui管理端口50088,http 端口50081 https 端口50443
1
| docker run -itd --restart=always --name=nginxwebui --hostname nginxwebui -e BOOT_OPTIONS="--server.port=50088" -p 50081:50081 -p 50088:50088 -p 50443:50443 --privileged=true cym1102/nginxwebui:latest
|
证书目录 是保存在: /home/nginxWebUI/.acme.sh/
下面
配置文件/home/nginxWebUI/nginx.conf
。
如果需要对证书单独管理,可以映射出来。也恩可以用docker cp 定时复制出来。
1
| docker run -itd -v /opt/docker_file/op_nginxWebUI:/home/nginxWebUI --restart=always --name=nginxwebui --hostname nginxwebui -e BOOT_OPTIONS="–server.port=50088" -p 50081:50081 -p 50088:50088 -p 50443:50443 --privileged=true cym1102/nginxwebui:latest
|
而后在 nginxwebui 内部 再反代 管理端口出来 套上ssl 即可从外网ssl访问。
为了方便备份,我这里没有映射目录出来。记得自行定时清理日志:/home/nginxWebUI/log/nginxWebUI.log
注意: http://10.0.0.1:50088/ web界面 打开可能会空白,这个….大概是因为java启动慢的原因,等一会 刷新一下就好了。
一个典型的反代配置
包括http自动跳转ssl
1
2
3
4
5
6
7
8
9
| 转发类型 http
监听端口:这个如果要开启ssl的话要输入ssl端口 50443
选择密码文件:这个是base的密码
开机ssl:是
选择内置证书:(提前配置)
开启https:是
ssl协议版本:全部勾选
http跳转https:是
从该端口跳转:第一个留空 第二个输入ssl的端口后 50081
|
这样就可以实现,访问http的时候自动跳转到ssl
最终配置文件大概如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| server {
server_name 域名;
listen 50443 ssl http2;
ssl_certificate /home/nginxWebUI/.acme.sh/jia.leiyanhui.com/fullchain.cer;
ssl_certificate_key /home/nginxWebUI/.acme.sh/jia.leiyanhui.com/jia.leiyanhui.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
listen 50081;
if ($scheme = http) {
return 301 https://$host:50443$request_uri;
}
location / {
# 自己;
proxy_pass http://10.0.0.1:50088;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect http:// https://;
}
}
|
自动备份到阿里云镜像
https://dev.leiyanhui.com/docker/img-to-aliyun/
1
| 10 3 * * 6 sh /etc/docker_up_aliyun_nginxWebUi.sh
|
使用nginxWebUI反代 主路由的一个小问题
如果op主路由配置了 根据域名跳转(https://dev.leiyanhui.com/openwrt/acme-ssl/),op需要绑定一个不属于最终配置文件的域名 。或者 使用下面的方法。
另外 op里面的网页终端需要单独处理(我选择 直接弃用)。
还有一个方案 是 不传递host参数,然后直接访问 https://你的域名:端口/cgi-bin/luci/ 也可以解决。
关于使用http协议访问https端口的400错误处理
例如我正常访问我的路由器应该是https://域名:50443
如果用http://域名:50443
访问端口还是https的端口就会提示400错误。 因为服务是家人也用。 不能指望他们理解http(S)这些。所以我采取的方法是直接拦截错误,并跳转到正确的首页地址。
首先这个错误是 497 错误,nginxWebUI支持参数模板,添加一个参数模板,名字随意,添加参数error_page 497
值https://$host:50443; #解决http到ssl端口的400错误
然后用默认配置应用到反向代理。完毕
最好的解决方案
编辑对应的ningxWebUi反向代理配置,
添加一个 = /
自定义localtions 添加参数 return
值 301 https://$host:50443/cgi-bin/luci
(意思就是网址后面没有东西的情况下跳转到后面地址)即可 (注意好要清理浏览器缓存不然不会生效)
最终代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| server {
server_name op.jia.leiyanhui.com;
listen 50443 ssl http2;
ssl_certificate /home/nginxWebUI/.acme.sh/*.jia.leiyanhui.com/fullchain.cer;
ssl_certificate_key /home/nginxWebUI/.acme.sh/*.jia.leiyanhui.com/*.jia.leiyanhui.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
listen 50081;
if ($scheme = http) {
return 301 https://$host:50443$request_uri;
}
error_page 497 https://$host:50443; #解决http到ssl端口的400错误;
location = / {
# op自动跳转;
return 301 https://$host:50443/cgi-bin/luci;
}
location / {
# op代理;
proxy_pass http://10.1.1.1/;
proxy_redirect http:// https://;
}
}
|
进阶
1、解决 在web界面直接点击 域名 链接打开的是不带端口的导致非标端口打不开的情况。 https://github.com/joyanhui/nginxWebUI
2、解决 定时续签2点拥堵的问题,
下载 我自己的修改的 jar,替换到docker里面
1
2
3
4
5
| docker exec -it nginxwebui rm /home/nginxWebUI.jar #删除原版jar
wget https://github.com/joyanhui/nginxWebUI/releases/download/2st/nginxWebUI.jar
docker cp nginxWebUI.jar nginxwebui:/home/nginxWebUI.jar # 复制宿主机上的修改过的jar进去
docker restart nginxwebui #重启
rm -rf nginxWebUI.jar
|
下载地址
https://www.123pan.com/s/EqorVv-n0nPA 提取码:yhjt
详细 https://github.com/joyanhui/nginxWebUI
其他问题
nginxwebui 和 nginx-proxy-manager 都同样的问题,就是在web界面直接点击 域名 链接打开的是不带端口的。在前者的github 提交过issues但是作者没有回应。后at作者后,作者表示:这个界面是展示信息用,不是给你高强度使用的
不知所云。
已经自己修改 https://github.com/joyanhui/nginxWebUI
不过nginxwebui 相对 nginx-proxy-manager 依旧适合非标端口的
如果是内网使用,家用宽带没有标准端口的情况下,可以通过一个简单方法实现,就是在路由器上转发跳转一次,详情:https://dev.leiyanhui.com/openwrt/acme-ssl/
另外 nginxwebui 的证书申请 有几个小遗憾,1 证书检查时间固定在凌晨2点不可以修改,还是很拥挤的。2 没有日志显示,如果出错你也不知道。。。只能等待。。。