おうちLAN内のNextcloudサーバをSSL自動更新のCaddyでホスティングするには

先日、Caddyによるリバースプロキシサーバで、おうちWordPressサイトをSSL化してインターネットからアクセス可能に設定してみました。

https://denor.jp/kubernetes%e3%81%aewordpress%e3%82%92ssl%e8%87%aa%e5%8b%95%e6%9b%b4%e6%96%b0%e3%81%aecaddy%e3%81%a7%e3%83%9b%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af

CaddyはACME、SSL証明書の自動更新に対応しており、Let’s EncryptまたはZeroSSLの証明書が取得可能です。

WordPressと同じように、Nextcloudサーバが利用できるように。

NextcloudサーバとCaddyを設定してみようと思います。


NextcloudサーバのCaddyホスティング設定例

ホスティング用Caddyサイトの構築

https://denor.jp/pppoe%E6%8E%A5%E7%B6%9A%E3%81%97%E3%81%9Fraspberry-pi%E3%81%A7ssl%E8%A8%BC%E6%98%8E%E6%9B%B8%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E4%BB%98%E3%81%8Dweb%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E6%A7%8B

こちらの記事の手順で、Raspberry Pi 4でRHEL9互換のRocky Linuxを起動し、Caddyを起動しました。


WordPressサイトと共存するためNextcloudをサブディレクトリ化

おうちKubernetesにデプロイしたWordPressを、CaddyでSSL化してホスティングしています。

https://denor.jp/kubernetes%e3%81%aewordpress%e3%82%92ssl%e8%87%aa%e5%8b%95%e6%9b%b4%e6%96%b0%e3%81%aecaddy%e3%81%a7%e3%83%9b%e3%82%b9%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af

同じホスト名で複数のサービスをホスティングできるように、WordPressは「/blog」というサブディレクトリでアクセスできるようにしました。

Nextcloudサーバは「/nextcloud」でアクセスできるようにしたいと思います。


Nextcloudサーバはsnapで構築

Nextcloudサーバは、Fedora 28にてSnapを使用して構築しました。

https://denor.jp/nextcloud%E3%82%B5%E3%83%BC%E3%83%90%E7%B0%A1%E5%8D%98%E6%A7%8B%E7%AF%89-fedora-28-snap%E7%89%88

Snap版は、設定ファイルを直接編集できず、occコマンドで設定を変更する必要があります。


Nextcloudサーバのホスティング設定

公式のNextcloudリバースプロキシ設定手順

[blogcard url=”https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html”]

Nextcloudの設定変更は、公式の手順に従って行わせて頂こうと思います。

config/config.phpの下記の設定を変更します。

  1. overwritehost
  2. overwriteprotocol
  3. overwritewebroot
  4. overwritecondaddr
  5. overwrite.cli.url
  6. trusted_proxies

注意が必要な設定は、次の2点でしょうか。

  1. overwritecondaddrは、プロキシのIPアドレスを正規表現で設定
    • .ドットはエスケープして\.にて記述
  2. overwrite.cli.urlにサブディレクトリは入れない
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set overwritehost --value='<ダイナミックDNSホスト名>'
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set overwriteprotocol --value='https'
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set overwritewebroot --value='/nextcloud'
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set overwritecondaddr --value='^<リバースプロキシのIPアドレス正規表現>$'
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set overwrite.cli.url --value='https://<ダイナミックDNSホスト名>'
sudo /var/lib/snapd/snap/bin/nextcloud.occ config:system:set trusted_proxies --value="['<リバースプロキシのIPアドレス>']"


NextcloudのSSL無効化

SSL化はCaddyで行うため、NextcloudのSSLは無効に設定しました。

# SSL無効化設定
sudo /var/lib/snapd/snap/bin/nextcloud.disable-https
# SSL関連覚書
# 自己証明書のSSLを有効にする場合
# sudo /var/lib/snapd/snap/bin/nextcloud.enable-https self-signed

Caddyのリバースプロキシは、SSL自己証明書には対応していません。

このため、自己証明書を使っている場合は無効にする必要があります。


Caddyのリバースプロキシ設定

インターネットからNextcloudサーバへアクセスするため、reverse_proxy設定を追加するのですが。

sudo vi /etc/caddy/Caddyfile

Nextcloudのリバースプロキシは、handle_pathディレクティブを使用しました。

リバースプロキシサーバ側からNextcloudサーバへアクセスするリクエストは、/nextcloudサブディレクトリは不要です。handle_pathでリクエストのプレフィクス(/nextcloud部分)を削除してから、NextcloudサーバのIPアドレス192.168.xxx.12にアクセスする動きになります。

<ダイナミックDNSホスト名> {
    root * /usr/share/caddy
    file_server

    handle_path /nextcloud* {
        reverse_proxy <NextcloudサーバIPアドレス>:80
    }
}

設定変更後、Caddyサービスをリロードして設定変更を反映します。

sudo systemctl reload caddy.service

インターネット側からのアクセス確認

https://<ダイナミックDNSホスト名>/nextcloud

上記のURLへWebブラウザからアクセスすると、確かにおうちLAN内のNextcloudサーバへSSL暗号化しつつインターネットからアクセスできるようになりました。URL欄を見ますと、鍵のマーク、SSL証明書による暗号化が有効になっています。


Nextcloudサーバは、SSL証明書の自動更新に対応していますが。

ダイナミックDNSに登録したホスト名を使用して、複数のサービス、たとえばWordPressと共存させたい場合は、Nextcloudサーバ側のSSL機能は使用できず、リバースプロキシサーバ側のSSL証明書を使用する必要があります。

以上の設定で、リバースプロキシサーバのSSL証明書を自動更新しながら、オンプレミス環境のWordPressやNextcloudサーバに、インターネットから暗号化してアクセスできるようになりました。

アクセス速度に関しましては、NGN網を使用しても、IPv4 PPPoEを使用した場合は最大200Mbpsに制限されていると思います。

まあ、Nextcloudサーバは、のんびり時間をかけてファイルの同期を行っても、実用的には問題はない感じかと思います。

環境は構築できましたので、実際に利用して、実用性を確認してみようと思います。[amazonjs asin=”B08JL4NK38″ locale=”JP” title=”The Nextcloud Podcast”]

コメント

コメントを残す

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