目 录CONTENT

文章目录

博客 | 部署Nginx Proxy Manager反向代理并申请免费SSL证书

如风
2024-10-31 / 0 评论 / 1 点赞 / 209 阅读 / 1,106 字

博客 | 部署Nginx Proxy Manager反向代理并申请免费SSL证书

Docker 部署 NPM

首先用docker-compose安装Nginx Proxy Manager

docker-compose.yml文件,端口尽量不要改,我用的云服务器改了之后就不行了

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

启动容器

docker-compose up -d

放行端口

在云服务器放开 80和81 端口,如果设置了HTTPS访问,需要放行 443 端口

image-20241031182033203

容器通信

为了让 halo容器和nginx容器可以互相通信,需要建立两者之间的网桥

# 建立网桥
docker network create --driver bridge halo-nginx
# 两个容器连接网桥
docker network connect halo-nginx halo
docker network connect halo-nginx npm-app-1
# 查看网桥信息
docker network inspect halo-nginx

访问 npm web界面

访问 http://ip:81,默认账号密码

Email:    admin@example.com
Password: changeme

添加一个代理

image-20230619002804414

按照下面的方式配置,ip是上面 通过网桥查出来的ip地址

image-20230619002835179

  • Domain Names :填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上
  • Scheme :默认 http 即可,有SSL证书也填 http
  • Forward Hostname/IP :填入服务器的 IP,或者 Docker 容器内部的 IP(如果 NPM 和 Halo 搭建在同一台服务器上的话)
  • Forward Port:填入 Halo 映射出的端口,这边默认是 8090
  • Cache Assets :缓存,可以选择打开
  • Block Common Exploits: 阻止常见的漏洞,可以选择打开
  • Websockets Support :WS 支持,可以选择打开
  • Access List: 这个是 NPM 自带的一个限制访问功能,这边我们不管,后续可以自行研究。

添加SSL证书

方式一:在NPM直接申请Let’s Encrypt 的证书

NPM(Nginx Proxy Manager) 支持从 Let’s Encrypt 获得证书,但需要验证你对证书中域名的控制权,也就是说你要能证明,这个域名是属于你的。

​ 使用DNS-01 验证方式。

1、准备工作

  • 有域名;
  • 而且已经正确的做了 DNS 泛解析,也就是使用通配符 * 来匹配所有的子域名;
  • 对固定域名申请的话就是 @.xxx.com
  • 域名已可以正常使用(在http情况下)

2、使用的 DNSPod来进行验证

申请 API

打开页面 https://console.dnspod.cn/account/token/token,找到 DNSPod Token,然后点 创建秘钥

image-20241031182607002

记住Token,这token忘了就只能重新创建了,以后看不到的。

找到 Let’s Encrypt 按钮

在这里插入图片描述

默认是 HTTP 验证,需要启用 Use a DNS Challenge 才是 DNS 验证

在这里插入图片描述

参数说明:

在这里插入图片描述

  • Domain Names :这里申请的是泛域名,所以用了 *.laosu.ml,这样不用为每个 Proxy Host 去申请证书;
  • Email Address for Let’s Encrypt:如果你之前申请过 Let’s Encrypt 的证书,这里要跟之前的邮件一致;这个邮件地址可以改,但是似乎改起来比较麻烦;
  • Use a DNS Challenge:必需要启用,才能使用 DNS 验证模式;
  • DNS Provider:用的是 DNSPod;
  • Credentials File Content :
  • dns_dnspod_email = “email@example.com”,这里的邮件地址是你绑定 DNSPod 的邮箱,可以从 DNSPod 中的个人账号中查到;
  • dns_dnspod_api_token = “id,key”,前面申请的 ID 和 Token,需要用这两个字段来组合成一个完整的 Token,组合方式为:“ID,Token”(用英文半角逗号分割),比如 ID 为:334490,ToKen 为:eb5976c68aba5b14a0558b77c17c39ba。即完整的 Token 为:334490,eb5976c68aba5b14a0558b77c17c39ba 。得到完整的 Token 之后,替换掉 dns_dnspod_api_token = “id,key” 后面的部分
  • Propagation Seconds:留空即可;
  • I Agree to the Let’s Encrypt Terms of Service:必须要同意;

save 保存

最后一行可以看到 SSL 证书已经申请完成,有效期3个月,到期会自动续期。也可以直接手动 Renew Now

image-20241031182908556

方式二:有SSL文件

image-20230619003047409

上传这些文件就可以了

image-20230619003122217

配置反向代理的SSL

image-20230619003155105

通过域名访问博客

image-20230619003418122

参考

1

评论区