Nginx proxy cho HASS

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.

  1. 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

Comments Off on Nginx proxy cho HASS

Filed under Software

Comments are closed.