インフラエンジニアも人間じゃない?

インフラエンジニアの備忘録

Nextcloud 15をリバースプロキシ+サブディレクトリで利用する

Nextcloud 15のアプライアンス版をリバースプロキシ経由で使おうと思ったらなかなか設定ができなかったのでメモ


構成は以下のイメージ

インターネット > FW > リバースプロキシ(https port443) > FW > Nextcloud(http port80)

リバースプロキシ側で他のWebサービスも色々中継させており、Let's Encryptの証明書も全部そっちに入れている構成になっている。

今回やりたかったのはこんな感じ

https://tmp1.example.com/      → 別のサブドメインでそのまま使う。
https://tmp2.example.com/      → 同じサブドメインでそのまま使う。
https://tmp2.example.com/nextcloud/ → 同じサブドメイン、別ディレクトリにnextcloudを入れる。

ちなみにhttps://tmp2.example.com/ではベーシック認証を使って認証させていたため、
同じドメインのサブディレクトリであればnextcloud側では認証することがないのでエセSSOのような感じとなる。
(nextcloud側がベーシック認証に対応しているため。)

リバースプロキシ側はnginxのため特に工夫もなく設定

server {
    server_name  tmp2.example.com;
    listen 443;
    ssl on;

    ~略~
    
    location /nextcloud/ {
        auth_basic "";
        auth_basic_user_file /********/.htpasswd;

        proxy_pass http://nextcloud.local/;
        proxy_connect_timeout 10;
   }
   
}

Nextcloud側は以下の設定を追加


/var/www/nextcloud/config/config.php
(config.phpはデフォルトのものがあるはずなので、$CONFIGのarrayに追記する。)

<?php
$CONFIG = array (
  'trusted_proxies'   => ['0.0.0.0'],
  'overwriteprotocol' => 'https',
  'overwritehost'     => 'tmp2.example.com',
  'overwritewebroot'  => '/nextcloud',
);


/etc/apache2/sites-available/000-default.conf
先頭行の

<VirtualHost *:80>

<VirtualHost *:800>

へ変更します。
(アクセスできなければ何でもいいのでDocumentrootを変えてもOK)

結果

ベーシック認証も効いていい感じになりました。