skip to content
barorin&?

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.ymlenvironmentN8N_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: always
volumes:
n8n_data:

おまけ:なぜこれで直るのか(ざっくり)

n8nが外部URLを組み立てる際、リバースプロキシ配下ではX-Forwarded-*のようなヘッダを参照して「本当はhttpsでアクセスされている」などを判断します 。​
N8N_PROXY_HOPSは、プロキシを何段挟んでいるかをn8nに伝えて、これらのヘッダ解釈を正しく行わせるための設定です 。​