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 http và 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://ip_hass

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.

Tham khảo 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_redirect http:// https://;
    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://ip_hass:8123;
  }
}

Chú thích

Cần có reverse dns (như dnsmasq) để giải mã tất cả domain của web server về local ip. Nếu không, website có thể không hoạt động trong mạng cục bộ.

Comments Off on Nginx proxy cho HASS

Filed under Software

Comments are closed.