反向代理神器nginx proxy manager

反向代理神器nginx proxy manager

前言

如果有人问我:你觉得最重要的docker应用有些?

我的答案首先是:

  • NPM。Nginx反向代理神器之一,自动管理nginx代理配置、Let’s Encrypt的ssl证书自动申请和续期。类似的工具还有nginxWebUItraefik/traefik

当然,这里我不会说mysql/mariadb,因为它们往往不直接面对用户,我们很难感受到它们的存在,虽然它们在搭建docker应用的时候会经常出现。

本文主要解决如何安装和基本使用NPM。我之所以将两者合并讨论,是因为它们的组合可以很好地解决如何方便和安全地远程访问docker应用这个使用场景。

总而言之,我觉得如果想要特别方便的使用vps搭建后续很多的服务的话,是一定要有一个nginx proxy manager的~

下面我们一起来看看吧 😆

准备工作

# 工作目录请按需修改
path_docker=~/docker
 
# 目录管理
mkdir -p ${path_docker}/ddns-go/ ${path_docker}/npm

# 如果不习惯上述方式的人 可以直接
mkdir -p /mydata/npm
# 这将在你的根目录 创建一个mydata并且创建一个子目录npm
# 有需要可以提前拉取好镜像
# docker pull jeessy/ddns-go:latest
# docker pull jc21/nginx-proxy-manager:latest

另外,你还需要在阿里云或者cloudflare或者腾讯云等等服务商进行域名托管,并且有至少1个域名。其它域名服务商应该也是类似的,我用是就是这两个,其它的不特别讨论。就小鹿自己而言,我强烈推荐你使用cloudflare进行域名托管,尤其是当你用的是海外vps的时候,cloudflare会提供免费的cdn加速,一定程度上可以加快国内的访问速度,而且我真觉得cloudflare比阿里云等国内厂商良心很多诶😝

总的来说,NPM支持的服务商太多了,自己去看看吧,不再赘述。

NPM

Nginx proxy manager(NPM)是集Nginx设置和ssl证书申请的docker神器。

官方网站:https://nginxproxymanager.com/

一般来说,我们会将域名登记到DNS服务商(比如Cloudflare),那么域名——公网IP这条路已经打通。那么,NPM的作用是什么呢?它主要作用是反向代理服务器——NPM可以看作nginx的可视化面板(当然远不止于此,但你暂时可以这样理解)。

反向代理是位于一个或多个Web 服务器前面的服务器,拦截来自客户端的请求;然后,反向代理服务器将向源服务器发送请求并从源服务器接收响应。通俗地说,NPM可以决定该域名可以访问该IP源服务器的哪个端口,就是打通公网IP——端口这条路。

不管怎么说都有点抽象。自己在实际使用时多体会就行了 (ฅ´ω`ฅ) npm在实际使用中资源占用也不是很高。

配置yml文件

创建新文件docker-compose.yml并添加内容如下:

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - 'xxxx':81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

xxxx表示的是你可以使用默认端口或者自定义,小鹿更推荐你自定义端口号。

一般地,对于VPS来说,80和443端口应该使用默认的。可以使用80和443端口也是玩VPS的优势之一呀!想想你每次访问互联网服务都要加个端口号,看着就很难受。你的家用NAS一般是你或者你的家人等少数人用,有一些端口号也无伤大雅。

可是,如果你要建一个个人博客,用非443端口不合适吧?看着就很不正式呢!

一般地,新买的个人云服务器可以默认;而家用宽带一般不放行443端口,而要改用其它端口。

另外,这个81端口是NPM的默认后台端口,这个你可以改一个自己喜欢的。我建议不要用默认的81端口,这样可以使NPM更加隐蔽,尤其是海外的vps一定要替换哦。这里值得一提的是:下面的挂载是一定不可少的,这样在后期你如果更换vps的时候,数据迁移会非常方便,之后我会出一个专门的数据迁移教程。

volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

服务管理

# 上线服务
docker-compose up -d
 
# 下线服务
docker-compose down
 
# 更新服务(我还没用过。更新的话建议先对旧服务进行备份,以防新旧版本有兼容问题。)
docker-compose pull
docker-compose up -d

访问:http://<ip>:<你刚才填写的xxxx端口>进行NPM管理。如果出现502错误,请先打开系统对应端口的防火墙哦~这里每个系统不一样,小鹿就不进行赘述了。

根据官网,它的默认帐户和密码是:

默认帐户:admin@example.com
默认密码:changeme

进入后台后,具体使用可以参考B站的咕咕鸽的演示:https://www.bilibili.com/video/BV1Gg411w7kQ。

这里值得一说的是,**NPM是可以反向代理自己的!**你第一次访问NPM的时候,是用http://<ip>:<NPM-后台端口>的方式访问,这个时候你输入的帐户和密码都是明文传播的。你设置好NPM的自身反代后,要尽快用https://domain.com的方式来访问它,然后将用户名和密码修改一下。**NPM是本地和外界沟通的桥梁,可不能有什么安全隐患!**具体步骤如下:

image-20230921152228098

之后创建一个新的proxy:

image-20230921152313371

填入基本的信息:

image-20230921152627508

当然别忘记配置ssl证书哦:

image-20230921152536181

这时候肯定有小伙伴发现了 SSL Certificate没法选择呀,别着急,接下来小鹿带你申请证书:

使用方法

获得DNS令牌

仅以小鹿使用的Cloudflare为例。其它域名托管商请自行Google/ChatGPT。

在NPM中,如果要申请类似*.xiayexiaolu.comxiayexiaolu.com的通配符证书,需要使用DNS Challenge的方式;而这其中需要依赖DNS API令牌。

登陆Cloudflare的后台,在概述页面中找到获取您的API令牌,点击进去:

image-20230921152951640

直接创建令牌。值得一提的是,该页面也可以看到既往申请并仍在使用中的API令牌:

image-20230921153530850

推荐使用自带模板编辑区域DNS。这种功能还是挺贴心的 (ฅ´ω`ฅ):

image-20230921153607719

选好域名后,其它项目默认或者按需改动即可(图示是默认情况)。继续以显示摘要

image-20230921153207854

之后点击显示摘要然后创建令牌并保存就可以啦~在Cloudflare中,获得API令牌的整个过程是比较自然的,就算没人教,自己探索一下就会。这里点名批评一下阿里云,后台十分复杂和反人类 Σ( ° △ °|||)︴

申请SSL证书

我喜欢统一申请好二级域名证书(比如我自己,就只为hwb0307.com申请1个证书),然后在建立新的反向代理记录后添加申请好的二级域名证书。

在国内,由于家庭宽带的80端口是被封锁的,所以用http challenge申请ssl证书的方式很容易失败。在Nginx proxmy manager中,国内用户推荐使用DNS challge的方式来申请Let’s Encrypt证书(其实国外用户我也推荐用这种方式)。这里也主要是讲述后者的方式。帐户设置等初始化工作就不再赘述。自己摸索一下,不是很难。

如果你想了解HTTPS证书相关的原理跟细节,可以阅读Ryan的博客文章《写给开发人员的实用密码学(八)—— 数字证书与 TLS 协议》。

在界面中点击SSL Certificates--Add SSL Certificate--Let's Encrypt

image-20220414163150519

其它设置如下图。你可以申请一个二级域名的通用证书,或者专门为一个三级域名设置证书。下面我展示的是申请一个二级域名的通用证书。我个人推荐你申请一个二级域名证书给所有的三级域名使用。你要同时为两个域名申请*.xiayexiaolu.comxiayexiaolu.com*是一种常用的正则表达式,用来代表所有字符),这样才可以正常使用喔:

image-20230921154146759

申请好了证书之后你再回到前文中提到的反向代理部分,在SSL Certificate选择中选择你这次申请好的ssl证书即可。其实小鹿最满意的一点是:使用这种方式申请的ssl证书可以自动续期,简直是懒人福音好吗?

参考资料

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

露露唯一真爱粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值