n8nでOAuth Redirect URLがlocalhostになる問題
/ 3 min read
Table of Contents
はじめに
Docker Composeでセルフホストしているn8nでOAuth連携を設定していると、管理画面に表示されるOAuth Redirect URLが
http://localhost:5678/… になってしまい、外部のOAuthプロバイダ側に正しいコールバックURLを登録できないことがあります。
私の環境でも同様の事象が発生しましたが、環境変数に N8N_PROXY_HOPS=1 を追加することで解決しました。
症状
- n8nのCredential(OAuth2系)設定で表示されるOAuth Redirect URLが http://localhost:5678/… になっている。
- その結果、GoogleやGitHubなどのOAuthアプリ設定画面に正しいRedirect URLを登録できず、認可フローが失敗する。
前提(構成)
- n8nはDocker Composeで起動。
- 外部公開(HTTPS終端)はリバースプロキシ経由(またはそれに近い構成)を想定。
- WEBHOOK_URLは外部公開URL(例: https://example.com/ )を指定済み。
解決策:N8N_PROXY_HOPS=1 を追加
結論として、docker-compose.ymlのenvironmentにN8N_PROXY_HOPS=1を追加したら、OAuth Redirect URLが期待するドメイン(例: https:/example.men/… )を指すようになりました 。
修正後のdocker-compose.ymlは次のとおりです。ポイントはN8N_PROXY_HOPS=1の1行だけです 。
services: n8n: image: docker.n8n.io/n8nio/n8n container_name: n8n ports: - 127.0.0.1:5678:5678 environment: - GENERIC_TIMEZONE=Asia/Tokyo - TZ=Asia/Tokyo - N8N_HOST=example.com - N8N_PROTOCOL=https - WEBHOOK_URL=https://example.com/ - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true - N8N_RUNNERS_ENABLED=true - N8N_PROXY_HOPS=1 volumes: - n8n_data:/home/node/.n8n restart: alwaysvolumes: n8n_data:おまけ:なぜこれで直るのか(ざっくり)
n8nが外部URLを組み立てる際、リバースプロキシ配下ではX-Forwarded-*のようなヘッダを参照して「本当はhttpsでアクセスされている」などを判断します 。
N8N_PROXY_HOPSは、プロキシを何段挟んでいるかをn8nに伝えて、これらのヘッダ解釈を正しく行わせるための設定です 。