サーバ

HAOS で Nginx リバースプロキシを使用する。

基本的に、以下のサイト

Reverse proxy using NGINX
⚠ This guide has been migrated from our website and might be outdated. Feel free to edit this guide to update it, and to...

のとおりに構成すれば問題ない?と思う。

発生したエラー

以前自分用に作成したリバースプロキシ用のテンプレート

を使用して、HAOS に対してサブドメインを割り当てようとしたところ、以下のようなエラー(以降、IP エラーと呼ぶ)が発生した。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ロガー: homeassistant.components.http.ban
ソース: components/http/ban.py:136
統合: HTTP (ドキュメンテーション, 問題)
最初に発生: 01:50:19 (19 発生)
最終ログ: 02:00:10
Login attempt or request with invalid authentication from buffalo.setup (192.168.11.1). Requested URL: '/auth/token'. (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36)
ロガー: homeassistant.components.http.ban ソース: components/http/ban.py:136 統合: HTTP (ドキュメンテーション, 問題) 最初に発生: 01:50:19 (19 発生) 最終ログ: 02:00:10 Login attempt or request with invalid authentication from buffalo.setup (192.168.11.1). Requested URL: '/auth/token'. (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36)
ロガー: homeassistant.components.http.ban
ソース: components/http/ban.py:136
統合: HTTP (ドキュメンテーション, 問題)
最初に発生: 01:50:19 (19 発生)
最終ログ: 02:00:10

Login attempt or request with invalid authentication from buffalo.setup (192.168.11.1). Requested URL: '/auth/token'. (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36)

結論を言うと、原因は大元のサイトでは書かれていた設定のいくつかが不足していることである。

正しい設定
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
server_name ha2.asaino.net;
location / {
proxy_pass http://192.168.11.107:8123; # 転送先のバックエンドサーバを指定
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ha2.asaino.net/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ha2.asaino.net/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = ha2.asaino.net) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name ha2.asaino.net;
return 404; # managed by Certbot
}
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { server_name ha2.asaino.net; location / { proxy_pass http://192.168.11.107:8123; # 転送先のバックエンドサーバを指定 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/ha2.asaino.net/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/ha2.asaino.net/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = ha2.asaino.net) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name ha2.asaino.net; return 404; # managed by Certbot }
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    server_name ha2.asaino.net;

    location / {
        proxy_pass http://192.168.11.107:8123;  # 転送先のバックエンドサーバを指定

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/ha2.asaino.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/ha2.asaino.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = ha2.asaino.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name ha2.asaino.net;
    return 404; # managed by Certbot
}

足りなかったのは、

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Host $host;

の部分。

沼ポイント

ここからが、数時間オーダーで沼った要因である。

この IP エラーは、不正な IP からアクセスがあったときに、セキュリティとしてアクセスを制限する機能である。それゆえ、一度不正なアクセスがあった場合には、そのアカウントに対してのアクセスを相当厳しく制限するようである。
従って、一度この IP エラーが出た場合、以下の手順でログイントークン削除する必要がある。

  1. ローカルネットからダッシュボードにアクセス
  2. 左下、アカウント
  3. セキュリティ
  4. トークンを更新
  5. すべてのトークンを削除する
余談

今回使用した HAOS の HTTP において、この IP エラーはよくある問題のようである。また、これが発生する条件は複数あり、軽く調べたところ、未解決のままクローズしている Issue が何件も見つかった。
それゆえ、「もしかしたら自分じゃどうしようもないようなエラーか?」とか思ってグダグダいろいろ試したのも、このエラーに数時間を費やした要因の1つでもあった。

コメント