Nginx Proxy Manager(以下简称 NPM) 可以实现反向代理(reverse proxy),即只暴露 80 和 443 端口然后由代理根据域名将请求发送给对应的服务。NPM 集成了 Let’s Encrypt 所以可以很简单的申请到 SSL 证书。
安装 #
使用 dock-compose,根据情况修改路径(尤其是如果你用 portainer 的话)
Web UI 在 81 端口,初始账号邮箱:admin@example.com 密码:changeme
申请通配符 SSL 证书 #
SSL Certificates -> Add SSL Certificate -> Let’s Encrypt
Domain names: *.<your domain>.com
(<your domain>
换成你的域名)
打开 Use a DNS Challenge,选择你的提供商,Credentials File Content 的填写可以参照申请通配 SSL 证书。
添加配置 #
Hosts -> Proxy Hosts -> Add Proxy Host
Domain Names 没什么好说的。
Forward Hostname / IP 填服务器的内网 IP,不要填 127.0.0.1 因为会访问到 NPM 容器内网络
Forward Port:对应应用的端口,如果有防火墙请确保端口是打开的,如果不想动防火墙设置请看 Tips
建议打开 Cache Assets 和 Block Common Exploits
SSL 证书里选前面申请到的证书
打开 Force SSL, HTTP/2 Support, HSTS Enabled。
Tips #
利用 docker 网络 #
在 docker-compose 文件最后加上
让应用加入 NPM 的网络,这样就相当于让 NPM 和容器处于同一个 docker 网络,于是就避免了前面所说的防火墙的问题。这样的话添加配置时 host 要填应用的名字(不是很确定,也可能是 sevice 的名字,不过一般情况两个名字是一样的,比如 nextcloud),端口要填内部端口,比如一个应用的端口映射是 90:8080 那么你应该填 8080.