Tôi gặp hiện tượng lạ như sau:
- 2 router Xiaomi AX3600 mesh có dây.
- RPi cài đặt Hass OS nối với router node
Loa Google Home nếu kết nối Wifi với router chính thì Hass điều khiển phát tiếng qua Google TTS hay media_player.play_media bình thường, nhưng nếu kết nối wifi với router node thì Hass không phát âm thanh được, lỗi không tìm thấy file âm thanh.
Lúc đầu tưởng router node bị lỗi, nhưng đọc tài liệu về Hass thì thấy có thể do cài đặt hệ thống mạng chưa phù hợp.
Vì port 80 và 443 được NAT về một RPi khác cài dịch vụ web nên không thể cài addon Nginx proxy trên máy chủ Hass. Tôi cài proxy cho Hass trên máy chủ web.
- Bỏ NAT port 8123 về máy chủ Hass
- Cho Nginx proxy trên máy chủ web chuyển yêu cầu https://hass.domain.me về http://ip_hass:8123
- Bỏ cài đặt ssl trên máy chủ Hass
- Tất cả các dịch vụ trên Hass nhận đường dẫn https://hass.domain.me hay http://hass_ip:8123
Kết quả Hass hoạt động bình thường. Truy cập Hass qua đường dẫn https://hass.domain.me, port 443 thay vì 8123.
- Cài đặt Nginx proxy:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
## HTTP => HTTPS
server {
listen 80 default;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name hass.domain.me;
ssl_certificate /etc/letsencrypt/live/hass.domain.me/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hass.domain.me/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
ssl_protocols TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK$
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
proxy_buffering off;
location / {
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://hass_ip:8123;
}
}
2. Cấu hình Hass
http:
# base_url: http://hass_ip:8123
# ssl_certificate: /ssl/fullchain.pem
# ssl_key: /ssl/privkey.pem
use_x_forwarded_for: true
trusted_proxies:
- proxy_ip
Chú thích
Nếu trên máy chủ proxy có dnsmasq thì đặt DNS cho https://hass.domain.me (file /etc/hosts hay /etc/hosts.dnsmasq), khi đó luôn dùng domain name ngay cả trên mạng cục bộ.
proxy_ip https://hass.domain.me