轻松搭建npm代理并支持SSL访问

最近搭了个memos笔记服务,但是这个小服务本身很精简不包含https相关设置,所以打算用NPM套一层实现SSL访问

Docker安装NPM(Nginx Proxy Manager)

先pull镜像:

1
docker pull jc21/nginx-proxy-manager:latest 

好了之后再run:

1
docker run -d -v ~/nginx-proxy/letsencrypt:/etc/letsencrypt -v ~/nginx-proxy/data:/data -p 80:80 -p 5081:81 -p 443:443 --name npm  jc21/nginx-proxy-manager:latest

要映射出来的主要就80443端口,分别对应http和https服务,自己家用服务器别想了,电信联通基本不会给家用宽带这个端口的,我这个是阿里云99服务器上直接搭的。81端口是NPM的后台WebUI界面,我故意映射到了5081端口自用
另外就80443端口很有可能被已有默认服务占用,如果提示占用可用lsof -i:443检查一下

登录NPM并配置

  1. 通过 服务器IP:5081(刚才设置的端口),可以访问NPM后台管理平台

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

2025-03-24-17-36-27

  1. 申请SSL证书
    SSL Certificates页面里点Add SSL Certificate
    我选择使用DNS的认证方式,它自带有我买域名的服务商阿里云的相关设置,填入自己账号的key后即可签发*.winotmk.com证书
    选择DNS还有个好处就是即便NPM服务没用80/443端口也可以完成认证

2025-03-24-17-50-26

  1. 添加代理规则

Proxy Hosts里的Add Proxy Hosts
Details里:
2025-03-24-17-41-55
第一行的Domain Names是最后要访问的域名
第二行红框里则是源网站的信息,因为自身不带https所以选http,这个域名本身是我家里的群晖DDNS域名,勾可全选
然后在SSL标签页选择刚才申请的证书,下面选项我全选
2025-03-24-17-53-35

好了npm的设置就此结束啦

现在我们还需要将刚才代理的域名设置一下解析

设置dns解析

在买域名的地方设置一条A记录
2025-03-24-18-00-04
记录值当然就是我这台ECS服务器的公网IP地址辣,等dns刷新后就能愉快地用上面代理的域名以SSL访问了

本文部分参考:
https://zhuanlan.zhihu.com/p/667156872