反代神器Nginx Proxy Manager
背景
如之前文章所说,硬件Ready之后就剩软件的配置了,其实在Rancher+K3s之下可以全权交给强大的traefik来处理,但是奈何对kubernetes的了解仅限于搭建和环境部署,至于怎么使用最近还没时间研究,况且现在homelab中大部分的容器环境都跑在UnRaid上面,回头会逐步切换到Kubernetes上,在这个过渡期当然需要一个过渡的法子。 常用的反代主要是SWAG,介绍如下
SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention.
但是我是出了名的懒,配置文件里面写东西太麻烦了吧也,这都2022年了,必然用一些偷懒的法子,于是祭出 - Nginx Proxy Manager。 对NGM的介绍自行去官网查看吧,一个简单部署、简单操作、界面友好的反代配置应用,搭配支持DNS-Chanllge的SSL证书配置和续期,几乎完全解放双手。
需求
我本人的需求其实比较简单:
- 访问:因为容器都是bridge的网络模式,所以端口五花八门也记不住,想局域网内部域名访问
- 证书:通过反代配合certbot用免费的泛解析域名来内网HTTPS,毕竟现在chrome对http应用或https非可信证书也太不友好了
部署
三种安装方法可供选择:
- Docker Compose,官方推荐方法,配置如下:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
直接使用该配置即可,要注意要在对应目录创建文件夹data和letsencrypt用于容器映射。
2. 使用Portainer,可视化管理,方便 根据官方的docker-compose.yml可以看出来需要配置的无非就是三个端口映射和两个目录映射,手动加入就行。
3. UnRaid应用市场中安装,注意选择带“official”的镜像,然后直接下一步即可。
配置
配置也很简单:
- 第一步首先是要添加SSL证书,添加域名(需要泛解析域名的话输入*.xxx.xxx即可)勾选DNS Challenge进行验证,这里可以选择腾讯云,阿里云,DNSPOD,Cloudfrae等,然后我同意即可~

- 第二步添加Hosts,输入回源的地址,http的就http,https就https,输入对应的端口号。

然后SSL选项卡下选择申请到的证书,最好打开强制HTTPS和HSTS选项。

DNS配置
差点忘记了这一章,这一切都配置完毕后需要在客户端(当前电脑)中修改/etc/hosts文件,把域名指向到NGM的服务器地址来做测试:
~#sudo cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
#NGM Test
10.0.0.250 draco.gaylow.io
长期使用的话有两种办法:
- 如果该域名外网还有正常需求,建议使用pihole,或者adguard一类内网DNS应用来建立Local Domain,添加 *.xxx.xxx 指向到NGM的地址
- 如果域名没有其他用处,直接添加一个泛解析的地址到内网IP即可,最省事儿。
测试
