先日、Caddyによるリバースプロキシサーバで、おうちWordPressサイトをSSL化してインターネットからアクセス可能に設定してみました。
CaddyはACME、SSL証明書の自動更新に対応しており、Let’s EncryptまたはZeroSSLの証明書が取得可能です。
WordPressと同じように、Nextcloudサーバが利用できるように。
NextcloudサーバとCaddyを設定してみようと思います。
目次
NextcloudサーバのCaddyホスティング設定例
ホスティング用Caddyサイトの構築
こちらの記事の手順で、Raspberry Pi 4でRHEL9互換のRocky Linuxを起動し、Caddyを起動しました。
WordPressサイトと共存するためNextcloudをサブディレクトリ化
おうちKubernetesにデプロイしたWordPressを、CaddyでSSL化してホスティングしています。
同じホスト名で複数のサービスをホスティングできるように、WordPressは「/blog」というサブディレクトリでアクセスできるようにしました。
Nextcloudサーバは「/nextcloud」でアクセスできるようにしたいと思います。
Nextcloudサーバはsnapで構築
Nextcloudサーバは、Fedora 28にてSnapを使用して構築しました。
Snap版は、設定ファイルを直接編集できず、occコマンドで設定を変更する必要があります。
Nextcloudサーバのホスティング設定
公式のNextcloudリバースプロキシ設定手順
Nextcloudの設定変更は、公式の手順に従って行わせて頂こうと思います。
config/config.phpの下記の設定を変更します。
- overwritehost
- overwriteprotocol
- overwritewebroot
- overwritecondaddr
- overwrite.cli.url
- trusted_proxies
注意が必要な設定は、次の2点でしょうか。
- overwritecondaddrは、プロキシのIPアドレスを正規表現で設定
- .ドットはエスケープして\.にて記述
- 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サーバは、のんびり時間をかけてファイルの同期を行っても、実用的には問題はない感じかと思います。
環境は構築できましたので、実際に利用して、実用性を確認してみようと思います。