前言
今年给自己组装了一台 DIY 的 All in one 服务器,底层系统是Unraid(详情可查看 2024年终总结 ),在此期间,我开始将云服务器的私有化服务,迁移到HomeLab,如何让外网访问更安全,是我一直考虑的问题,现在就完善它。
前提
家庭服务器的私有化服务和nginx proxy manager 部署在同一台服务器。
如私有化服务和nginx proxy manager 在不同服务器也可以,道理也是一样。
实现效果
✅ 域名访问
❌ IP+端口
只有匹配的域名的才会转发请求到服务器端口(只有使用域名才能访问到内网部署的服务),如果别人通过扫描公网IP找到我这个端口是打开的,而且他的不是https请求,会被nginx服务器拒绝。
本文假设
- 域名是
example.com
,域名服务商在腾讯云 - Nginx Proxy Manager的https的访问端口为11200
- 家庭宽带为动态公网IP
项目的 Docker Compose 端口配置
内网的服务器,我一般通过docker compose 部署 端口要设置成“允许指定局域网 IP 访问”,端口号要这样写:本机IP+端口
假如1panel的本机IP为192.168.10.3,可以这样配置:
ports:
- 192.168.10.3:12900:80
解读
- 将容器内部的 80 端口映射到宿主机 192.168.10.2 的 12900 端口上
- 只有来自 192.168.10.2 这个 IP 地址的 12900 端口的连接才会被转发到容器
重点回顾
要知道本机的IP,并且将它写到docker compose.yml文件里
顺便了解下
不同的端口配置,这次我们使用的是允许指定局域网 IP 访问
#只允许本机访问
ports: - 127.0.0.1:12900:80
# 允许指定局域网 IP 访问
ports: - 192.168.10.2:12900:80
# 允许所有网络接口访问(包括公网,如果有的话)
ports: - 12900:80
Nginx Proxy Manager反向代理配置
- 域名绑定到内网的服务 —> 192.168.10.12:12900
- 申请SSL证书,并且打开
强制跳转到https
自动获得公网IP
1panel 安装 DDNS-GO,实现自动获取动态的公网 IPv4 或 IPv6 地址(因为家宽公网IP都是动态的),并解析到对应的域名。
此时,已实现效果:一但公网IP发生变动,就会自动地、及时地更新域名解析。
完成
此时,可通过abc.example.com:11200
访问服务了!
温馨提示:公网ipv6不需要打开端口,如果是公网ipv4,就需要设置端口转发。
如果此时通过 ipv6+端口
或者ipv4+端口
,是访问不了内网的服务的,这大大提高了安全性。