通过宝塔Nginx反代HomeAssistant并添加SSL实现隐藏端口号与域名访问

本文涉及的产品
.cn 域名,1个 12个月
简介: HomeAssistant默认使用8123端口,带端口访问既不美观也不方便。通过宝塔Nginx默认反代配置会出现各种意外错误,本文将通过修改HomeAssistant与反代配置解决该问题。

前言

  • 实现了HTTPS访问、隐藏端口号。
  • Homeassistant安装在Docker

遇到的问题

在宝塔设置反向代理后直接访问报错:400: Bad Request

  • Home-Assistant使用反向代理要设置白名单,不然会拦截。

设置白名单后能正常访问,但无法登录,登录会弹出:Unable to connect to Home Assistant.

  • Home-Assistant要用到websocket,而宝塔默认的反代配置文件没有添加websocket支持。

正式笔记

宝塔方面操作

添加SSL支持

  • 设置里复制证书文件添加就行,略。

添加反代

  • 目标URL:https://[域名]:8123
  • 发送域名:[域名]

修改反代配置文件(添加websocket支持)

  • 添加如下代码:
proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
  • 这时添加前的:
#PROXY-START/
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{
proxy_pass https://hass.xxx.cn:8123;
    proxy_set_header Host hass.xxx.cn;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    expires 12h;
}
location /
{
    proxy_pass https://hass.xxx.cn:8123;
    proxy_set_header Host hass.xxx.cn;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    add_header Cache-Control no-cache;
}
​
#PROXY-END/
  • 这是添加后的:
#PROXY-START/
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{
proxy_pass https://hass.xxx.cn:8123;
    proxy_set_header Host hass.xxx.cn;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
    expires 12h;
}
location /
{
    proxy_pass https://hass.xxx.cn:8123;
    proxy_set_header Host hass.xxx.cn;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 86400;
    
    add_header X-Cache $upstream_cache_status;
    
    #Set Nginx Cache
    
    add_header Cache-Control no-cache;
}
​
#PROXY-END/

Home-Assistant方面的设置

获取反向代理源IP

  • 直接访问https://[域名]或者http://[域名]
  • 用ip或者http://[域名]:8123登录Home-Assistant
  • 进入配置>日志,查看日志。
  • 不出意外会有报错,大概如下:
Received X-Forwarded-For header from an untrusted proxy 172.17.0.1
A request from a reverse proxy was received from 172.17.0.1,but your HTTP integration is not set-up for reverse proxies
  • 记住这个IP,这里是172.17.0.1

添加SSL支持和反代白名单

  • .crt.key证书文件拷贝到config目录
  • 打开configuration.yaml,添加如下配置(视情况修改),然后重启服务:
http:
  base_url: [域名]
  ssl_certificate: [.crt文件]
  ssl_key: [.key文件]
  use_x_forwarded_for: true
  trusted_proxies:
    - 1.14.147.22
    - 172.17.0.1
    - 127.0.0.1
    - ::1
  • 上面最下面那几个ip就是白名单列表,可以把公网IP和本地IP也写上去。
目录
相关文章
|
3月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
6天前
|
安全 网络安全 数据安全/隐私保护
单域名、多域名、通配符 SSL 证书,你选对了吗?
SSL证书是保护上网安全的重要工具,相当于网站的身份证,确保信息不被窃取。单域名证书保护一个网站,多域名证书可保护多个网站,通配符证书则保护主域名下的所有子域名。选择哪种证书取决于网站规模和需求
|
9天前
|
安全 数据建模 测试技术
只有ip没有域名怎么申请SSL
在没有域名只有IP地址的情况下,仍可申请SSL证书。需确保拥有固定公网IP地址和服务器管理权限,选择支持IP SSL证书的CA(如JoySSL),完成注册、购买、验证、安装和测试等步骤,实现HTTPS加密访问。注意证书有效期、兼容性和安全性。
|
1月前
|
安全 应用服务中间件 Shell
nginx配置https的ssl证书和域名
nginx配置https的ssl证书和域名
|
1月前
|
网络安全
阿里云国际版如何为SSL证书更换域名?
阿里云国际版如何为SSL证书更换域名?
|
1月前
|
应用服务中间件 网络安全 nginx
nginx如何代理ssl
nginx如何代理ssl
|
3月前
|
JSON 安全 网络协议
【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问
为了确保Azure虚拟机资源的安全管理,只有指定IP地址才能通过RDP/SSH远程访问。解决方案包括使用Azure Policy服务扫描所有网络安全组(NSG),检查入站规则中的3389和22端口,并验证源地址是否在允许的IP列表中。不符合条件的NSG规则将被标记为非合规。通过编写特定的Policy Rule并定义允许的IP地址参数,实现集中管控和合规性检查。
|
3月前
|
安全 网络安全
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
|
4月前
|
弹性计算 应用服务中间件 Linux
阿里云服务器开放端口完整图文教程
笔者近期开发完成的服务端程序部署在阿里云的ECS云服务器上面,一些应用程序配置文件需要设置监听的端口(如Tomcat的8080、443端口等),虽然通过CentOs 7系统的的「防火墙」开放了对应的端口号,任然无法访问端口号对应的应用程序,后面了解到原来还需要设置云服务器的「安全组规则」,开放相应的端口权限,服务端的接口才能真正开放。
689 1
阿里云服务器开放端口完整图文教程
|
4月前
|
弹性计算 运维 数据安全/隐私保护
云服务器 ECS产品使用问题之如何更改服务器的IP地址或端口号
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。