博客 | 部署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 端口
容器通信
为了让 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
添加一个代理
按照下面的方式配置,ip是上面 通过网桥查出来的ip地址
Domain Names
:填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上Scheme
:默认http
即可,有SSL证书也填 httpForward 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
,然后点 创建秘钥
记住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
方式二:有SSL文件

上传这些文件就可以了

配置反向代理的SSL
通过域名访问博客
评论区