反代神器Nginx Proxy Manager

反代神器Nginx Proxy Manager
Photo by Carlos Muza / Unsplash

背景

如之前文章所说,硬件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证书配置和续期,几乎完全解放双手。

需求

我本人的需求其实比较简单:

  1. 访问:因为容器都是bridge的网络模式,所以端口五花八门也记不住,想局域网内部域名访问
  2. 证书:通过反代配合certbot用免费的泛解析域名来内网HTTPS,毕竟现在chrome对http应用或https非可信证书也太不友好了

部署

三种安装方法可供选择:

  1. 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

长期使用的话有两种办法:

  1. 如果该域名外网还有正常需求,建议使用pihole,或者adguard一类内网DNS应用来建立Local Domain,添加 *.xxx.xxx 指向到NGM的地址
  2. 如果域名没有其他用处,直接添加一个泛解析的地址到内网IP即可,最省事儿。

测试