Docker で Nextcloudをリバースプロキシ経由で使う際の「Access through untrusted domain」に対処する

相変わらず、いい感じのメモアプリ探しがつづいているわけですが Nextcloud を試した際に発生したエラーへの対処です。

今回の Nextcloud は CasaOS という NAS 風にいろいろなパッケージを GUI 管理できるアプリ経由で入れました。

そうすると何も考えずに Nextcloud を動かすことができるので楽チンです。

環境

インターネットから Nextcloud にアクセスできるようにリバースプロキシで Nextcloud にトラフィックを流しています。

  • Nextcloud: Docker Compose で運用(192.168.1.200)
  • リバースプロキシ: Synology NAS(192.168.1.100)
  • アクセスURL: https://nextcloud.nc.com

ドメイン名はあくまで例なので適宜読み替えてほしい。

ブラウザ → https://nc.txn.red
         → NAS (192.168.1.00) リバースプロキシ
         → Nextcloud コンテナ (192.168.1.200)

発生したエラー

ブラウザでアクセスすると以下のメッセージが表示され、先に進めない。

Access through untrusted domain Please contact your administrator. If you are an administrator, edit the “trusted_domains” setting in config/config.php like the example in config.sample.php.

原因

リバースプロキシ経由でアクセスする場合、以下が設定されていないと「知らないドメインから、知らないプロキシを経由してアクセスが来た」と判断され、接続を拒否されます。

  1. trusted_domains: アクセスを許可するドメイン/ホスト名
  2. trusted_proxies: 信頼するリバースプロキシのIPアドレス

リバースプロキシが同一ホスト上にあっても別マシンにあっても同様に発生します。

一般に自前で docker-compose.yml を書いているであれば設定ファイルを別のボリュームにするなり、ローカルのファイルシステムに予め設定すれば *.conf とか *.ini なんかを書き換えればいいのですが、CasaOS などのお仕着せのパッケージだとそうもいかないのでコンテナ起動時の環境変数に設定してやります。

上の例だと以下の環境変数にドメインやプロトコルを設定してやればいいです。

  • NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.nc.com localhost
  • TRUSTED_PROXIES: 192.168.1.244
  • OVERWRITEHOST: nextcloud.nc.com
  • OVERWRITEPROTOCOL: https
  • OVERWRITECLIURL: https://nextcloud.nc.com

docker-compose.yml ならこんな感じ、コンテナ管理アプリや docker-cli の形式に合わせてしていしてやればよい。

services:
  nextcloud:
    image: nextcloud
    environment:
      <em># 信頼するドメイン(スペース区切りで複数指定可)</em>
      - NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.nc.com localhost
      
      <em># リバースプロキシのIPアドレス</em>
      - TRUSTED_PROXIES=192.168.1.100
      
      <em># リバースプロキシ経由でのアクセス設定</em>
      - OVERWRITEHOST=nextcloud.nc.com
      - OVERWRITEPROTOCOL=https
      - OVERWRITECLIURL=https://nextcloud.nc.com

にしてもレスポンシブ重視のセルフホスティッドなノートアプリはほとんどなくていまだに Evernote 脱出からはじまるノートアプリ行脚の旅は終わらない。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です