Skip to main content

リバースプロキシ設定 — Nginx / Caddy / Traefik

リバースプロキシ設定 — Nginx / Caddy / Traefik

本番環境で Docmost を HTTPS で公開するとき、リバースプロキシの設定が必要です。リアルタイム共同編集(Yjs)は WebSocket を通す必要があります。

前提

→ 環境変数の詳細: 「必要インフラと環境変数リファレンス」(No.10.2)

Nginx の設定例

server {
    listen 443 ssl http2;
    server_name docs.example.com;

    ssl_certificate     /etc/ssl/certs/docs.example.com.crt;
    ssl_certificate_key /etc/ssl/private/docs.example.com.key;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        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;

        # WebSocket(共同編集に必須)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 86400;
    }
}

HTTP から HTTPS へリダイレクトする場合、APP_URLhttps://docs.example.com に設定してください。

Caddy の設定例

docs.example.com {
    reverse_proxy localhost:3000
}

Caddy は HTTPS 終端と WebSocket プロキシを自動処理します。APP_URL=https://docs.example.com を設定してください。

Traefik の設定例(Docker Compose ラベル)

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.docmost.rule=Host(`docs.example.com`)"
  - "traefik.http.routers.docmost.entrypoints=websecure"
  - "traefik.http.routers.docmost.tls=true"
  - "traefik.http.services.docmost.loadbalancer.server.port=3000"

Traefik v2 以降は WebSocket をデフォルトでサポートします。大きなファイルアップロード時は maxRequestBodyBytes を調整してください。

APP_URL との整合

設定 正しい例 よくある誤り
APP_URL https://docs.example.com http://localhost:3000(本番で使用)
プロキシ先 http://docmost:3000(内部) 公開 URL を proxy_pass に指定
X-Forwarded-Proto https 未設定で HTTP 扱いになる

よくある障害と対処

症状 原因 対処
共同編集がすぐ切れる WebSocket がプロキシを通っていない Upgrade / Connection ヘッダーを設定
413 Request Entity Too Large プロキシのリクエストサイズ制限 Nginx: client_max_body_size を拡大
無限リダイレクト HTTP ↔ HTTPS のループ APP_URL と SSL 終端の整合を確認
招待メールのリンクが壊れる APP_URL が内部 URL のまま 公開 HTTPS URL に変更して再起動
ログイン後に別ドメインへ飛ぶ APP_URL と実際のドメイン不一致 ドメインを統一

関連ナレッジ