HomeAssistant设置https访问后的问题

之前 HomeAssistant 在浏览器中是这样打开的 http://ha.xxx.ml

最近因为测试的几个软件都需要 SSL 支持,所以准备全面升级到 https,拟定的方案是利用群晖的反代 + 内网穿透来实现。,所以升级完成后,应该是这样的 https://ha.xxx.ml

内网穿透

还是用的 frp ,但之前采用的一个域名一条记录的方式显然已经不适合反向代理,frpc.ini 需要按下面这样的进行修改,也可以用到《免费的泛域名https证书自动续期》里介绍的 SSL 证书自动续期。

1
2
3
4
5
6
7
8
9
10
11
[http]
type = http
local_ip = 192.168.0.199
local_port = 81
custom_domains = *.xxsu.ml

[https]
type = https
local_ip = 192.168.0.199
local_port = 444
custom_domains = *.xxsu.ml

反向代理

直接用的群晖的反向代理,这里「来源」中的端口要和 frpc.inilocal_port 一致

title

遇到问题

设置反代完成后,在浏览器中输入 https://ha.xxx.ml

title

但是登陆完成后,却一直连接不上

title

开始以为是 https 的问题,所以重新反代了一次 http 协议

title

但是结果是一样的,所以基本上可以确定是因为反代导致的,而不是因为 https

解决问题

查阅了一圈资料,发现主要原因是因为群晖自带的 nginx 不支持 websocket,这个问题直到 DSM6.2.1 才解决,而我的版本还是 DSM6.1.7。

title

好在网上已经有了解决方案。Synology DSM 6 反向代理的配置修复程序项目地址:https://github.com/orobardet/dsm-reverse-proxy-websocket

title

SSH连接后打开 /usr/syno/share/nginx/Portal.mustache

切记,修改前先备份,先备份,先备份,重要的事情总是要说三遍,备份是一种好习惯

location 部分中添加以下内容:

1
2
3
proxy_set_headerUpgrade   $http_upgrade;
proxy_set_headerConnection "upgrade";
proxy_read_timeout 86400;

title

重启 httpd

1
sudo synoservicecfg --restart nginx

再次在浏览器中输入 https://ha.xxx.ml,发现已经完美解决了用 https 访问后卡在登录界面的问题。

参考文档

群晖nas 修改nginx配置的问题
地址:https://www.sadk.org/%E6%97%A5%E5%BF%97/1970.html

[进阶教程] nginx通过https反向代理hass的配置注意事项
地址:https://bbs.hassbian.com/thread-4276-1-1.html

Nginx反向代理Home assistant
地址:http://www.yunsean.com/nginxfan-xiang-dai-li-home/

群晖nginx反向代理处理websocket协议的方法
地址:https://post.smzdm.com/p/a992qp87/