脱クラウド計画(1)の後、アクセス解析のログを見ていると自分のアクセスがカウントされていることに気づきました。

アクセス解析のツールumamiでは、カウントしないIPアドレスやカウントしないホスト名を指定できます。
最初は自分のIPアドレスが設定したカウントしないIPアドレスから変わってしまったのだと思ったのですが、そうではないようでした。

確認してみると、先日の脱クラウド計画(1)の影響(解析ツールを社内サーバーへ引っ越した)で、解析ツールがクライアントIPアドレスを正しく認識できなくなってしまったようです。

処置

umamiの設定ではリバースプロキシ等でヘッダーが変更されるアクセスの場合に.envにどの項目をIPアドレスとするかを指定することができます。

CLIENT_IP_HEADER = <header name>

HTTP header to check for the client's IP address. This is useful when you're behind a proxy that uses non-standard headers.

Environment variables

今回の状況ならば、

CLIENT_IP_HEADER='x-forwarded-for'

とすれば動作すると思ったのですが、設定を変えても自分のアクセスがカウントされてしまいます。
調べてくと、ヘッダーの「X-Forwarded-For」をそのままIPアドレスとして識別していました。

「X-Forwarded-For」の中身なので、クライアントのIPアドレスに加え、解析ツールまでに経由したプロキシのアドレスも記載されています。

'xxx.xxx.xxx.xxx(クライアントのIPアドレス), xxx.xxx.xxx.xxx(リバースプロキシのIPアドレス)'

(↑)をIPアドレスと認識し、カウントしないIPアドレスとマッチした時に一致しないためカウントされていたようです。

umamiのクライアントIPを識別する箇所は
umami/lib/request.js

export function getIpAddress(req) {
  // Custom header
  if (req.headers[process.env.CLIENT_IP_HEADER]) {
    return req.headers[process.env.CLIENT_IP_HEADER];
  }
  // Cloudflare
  else if (req.headers['cf-connecting-ip']) {
    return req.headers['cf-connecting-ip'];
  }
  return requestIp.getClientIp(req);
}

です。
できれば手を加えずに対処したかったのですが、現在の構成で自社でのみ使用するという前提ですので単純に取得したX-Forwarded-Forの値をパースすることにしました。
umami/lib/request.js

export function getIpAddress(req) {
  // Custom header
  if (req.headers[process.env.CLIENT_IP_HEADER]) {
    let ips = req.headers[process.env.CLIENT_IP_HEADER].split(',');

    return ips[0];
  }
  // Cloudflare
  else if (req.headers['cf-connecting-ip']) {
    return req.headers['cf-connecting-ip'];
  }
  return requestIp.getClientIp(req);
}

これでクライアントIPアドレスが正しく識別できるようになり、自分のアクセスまでカウントされないようになりました。

最近のエントリー

404 WASP not found

第12回 「パーソナルサーバ」について考える

Jar Gardenに植物を植える

新しいお友達

Google翻訳、ChatGPT、Gemini...

Node.jsでGemini 1.5 FlashをAPI経由で使う

今日は「ぴろろんの日」

Node.jsでGPT-4oをAPI経由で使う

遠隔手話通訳実験

LLMと戯れてみる

新刊情報の収集

最近のできごと

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す