Nextcloudでメディアコンテンツに対してのみプロキシキャッシュを有効にさせる

2 min read

こんにちは、無能です。

私の趣味は音楽を聞く事です。
全てのサブスクリプションサービスを解約して、全て音楽なども自炊化した私ですがNextcloudの不満と言えば読み込みが遅い

環境
Apache 自宅サーバー : Nextcloudを置いてる場所
nginx VPS : リバースプロキシ兼キャッシュサーバー

コンテンツ自体を毎回サーバー本体にアクセスしており、サーバー自体の負荷にも繋がる為にこれは改善したいとリバースプロキシでもあるVPS側のプロキシキャッシュについて改めることにしました。

手っ取り早くnginx.confの構文を書いておきます。

        location / {
        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;
        proxy_pass http://192.168.10.101/;  
    }
    
    location /remote.php/dav/ {
    # Caching
    proxy_cache zone2;
    add_header X-Cache-Status $upstream_cache_status; # debug
    proxy_cache_valid 200 90d;
    proxy_pass http://192.168.10.101/remote.php/dav/;
    proxy_ignore_headers Cache-Control Expires;
    proxy_hide_header Cache-Control;
    proxy_hide_header Pragma;

}

   location /remote.php/webdav/ {
    proxy_cache zone2;
    add_header X-Cache-Status $upstream_cache_status; # debug
    proxy_cache_valid 200 90d;
    proxy_pass http://192.168.10.101/remote.php/webdav/;
    proxy_ignore_headers Cache-Control Expires;
    proxy_hide_header Cache-Control;
    proxy_hide_header Pragma;

}

    location /index.php/apps/music/api/file/ {
    proxy_cache zone2;
    add_header X-Cache-Status $upstream_cache_status; # debug
    proxy_cache_valid 200 90d;
    proxy_pass http://192.168.10.101/index.php/apps/music/api/file/;
    proxy_ignore_headers Cache-Control Expires;
    proxy_hide_header Cache-Control;
    proxy_hide_header Pragma;

}

実際、
proxy_ignore_headers Cache-Control Expires;
proxy_hide_header Cache-Control;
ここで二回Cache-Controlを呼び出す意味があるのかどうか分かりませんが、とりあえずうまく動くようになりました。

また、 **/index.php/apps/music/api/file/**については私は音楽再生用のプラグインを導入しており恐らくプラグイン自体がNextcloudのAPIを呼び出す為に通常のNextcloudのメディア再生の動作と違うのでこれを追加しました。
入れてないヒトは入れなくても良いと思います。

かなり快適です。

参考元と改変してみて

参考元 : How to use caching reverse proxy with NextCloud, problems with NC setting “cache-control”

proxy_pass https://x.x.x.x/remote.php/webdav/;
と、このヒトはやっていましたが、僕の場合はうまく動作しませんでした。
Nextcloud内で/webdav/の場合と/dav/で指定している場合2つある事に気づき、それぞれの構文を記述することで成功しました。

特にNextcloudを最初に全体に対してキャッシュしたら、動作がめちゃくちゃになって案の定動きませんでした(笑)

コンテンツありすぎてすぐキャッシュパンパンになるのでは?と思いましたが、画像や音楽などのファイルに関しては有効的です。

他にも色々手付けて高速化出来たので気が向いたら更新します。