树莓派3上通过Nginx Proxy Manager无法远程访问Home Assistant求助
环境配置
- Raspberry Pi 3 Model B
- Home Assistant以Docker容器安装,已更新至最新版本
- 安装Nginx Proxy Manager(NPM)插件用于反向代理
- ISP托管的域名已指向路由器WAN地址
- 通过DirectAdmin的DNS挑战获取并续期SSL证书,证书文件
fullchain.pem和privkey.pem存放于HA的/ssl目录
当前状态
- 本地通过
homeassistant:8123和域名均可正常访问HA,但外部网络无法访问 - 路由器已配置端口转发:80→80、81→81、443→443,均指向HA所在树莓派的局域网IP
- 路由器无端口拦截规则
- 无防火墙拦截(包括树莓派本地防火墙)
Home Assistant配置
configuration.yaml中的http模块配置:
http: use_x_forwarded_for: true trusted_proxies: - 192.168.10.178 # Home Assistant局域网IP - [我的公网IP] # 替换为实际公网IP - 172.30.32.0/23 # Docker子网 - 172.30.33.0/24 # Docker子网 - 172.30.32.3 # Docker DNS地址 - 127.0.0.1
Nginx Proxy Manager配置
通过NPM创建的代理主机参数:
- 协议:http
- 目标地址:
mydomain.se - 端口:8123
- 已启用Websocket Support
- SSL配置:采用DirectAdmin DNS Challenge验证方式
已尝试的排查操作
- 调整路由器端口转发规则(重新配置、更换端口测试)
- 确认树莓派及路由器端无防火墙拦截
- 反复核对NPM代理主机的各项配置参数
错误信息
NPM日志中频繁出现以下错误:
connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.10.119, server: nginxproxymanager, request: "GET /api/ HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "homeassistant.local:81", referrer: "http://homeassistant.local:81/"
问题分析与解决建议
修正NPM代理目标地址
当前NPM目标地址填的是公网域名mydomain.se,容器内访问公网域名可能触发NAT回环或解析错误。应改为HA的局域网IP(如192.168.10.178),若HA与NPM在同一Docker网络,也可直接用HA容器的服务名(如homeassistant)。补充Trusted Proxies配置
需将NPM容器的IP或所在子网加入HA的trusted_proxies列表。执行docker inspect nginxproxymanager获取NPM容器的实际IP,将其添加到配置中,避免HA拒绝代理请求。解决端口冲突问题
路由器转发81端口到HA,但NPM默认管理端口就是81,会导致端口占用冲突。进入NPM设置,将管理端口改为未使用的端口(如8181),再重新配置路由器的端口转发规则。验证Docker网络互通性
若HA与NPM不在同一Docker网络,NPM无法直接访问HA容器。通过docker network connect [HA网络名] nginxproxymanager将NPM加入HA所在的Docker网络,确保两者互通。确认公网IP有效性
对比路由器WAN口IP与ipinfo.io显示的公网IP,若不一致说明ISP提供的是内网IP,需联系ISP申请公网IP,或改用Cloudflare Tunnel等内网穿透方案。排除SSL干扰
暂时关闭NPM的SSL配置,用http协议测试外部访问,若能正常访问则说明SSL证书配置存在问题,需重新核对证书文件路径及DNS挑战配置。
内容的提问来源于stack exchange,提问作者Peter Westerlund

