Nextcloud カレンダーのレートリミットを変更する方法

Nextcloud Enterprise Linux 9
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

Nextcloud でカレンダー共有の権限を編集しようとしたところ、エラーが発生しました。

このカレンダーは 20 人近くで共有しており、カレンダー設定画面を開いただけで共有が解除されたり、保存が反映されない等の問題が起きたため、解決法を記録しておきます。

環境

  • Nextcloud Hub 25 Autumn:32.0.9
  • Calendar:6.4.0
  • DAV:1.34.2

エラーログ

エラーログを見ると、Too many addressbook or calendar share requests となっています。

原因

レートリミット部分のソースを見てみると、3600 秒で 20 回の設定がされていました。

$identifier = 'share-addressbook-or-calendar';
$userLimit = $this->config->getValueInt('dav', 'rateLimitShareAddressbookOrCalendar', 20);
$userPeriod = $this->config->getValueInt('dav', 'rateLimitPeriodShareAddressbookOrCalendar', 3600);

try {
        $this->limiter->registerUserRequest($identifier, $userLimit, $userPeriod, $user);
} catch (IRateLimitExceededException $e) {
        throw new TooManyRequests('Too many addressbook or calendar share requests', 0, $e);
}

1 時間(3600 秒)に 20 回でリミットに達してしまうため、アドレス帳やカレンダーの共有設定を 20 人分変更するとそれだけでアウトになってしまいます。

対策

ratelimit.protection.whitelist で IP アドレスのホワイトリストを設定しましたが、アドレス帳とカレンダーのレートリミットはユーザー毎にカウントしている様で効果がありませんでした。

occ コマンドで rateLimitShareAddressbookOrCalendar の値を書き換えることで解決する事ができました。

sudo -u apache php occ config:app:set dav rate LimitShareAddressbookOrCalendar --value 1000 --type integer
(out) Config value 'rateLimitShareAddressbookOrCalendar' for app 'dav' is now set to '1000', stored as integer in fast cache

設定を元に戻すには、rateLimitShareAddressbookOrCalendar を削除すれば OK です。

sudo -u apache php occ config:app:delete dav rateLimitShareAddressbookOrCalendar
(out) Config value rateLimitShareAddressbookOrCalendar of app dav deleted

コメント

タイトルとURLをコピーしました