Nextcloudで大容量ファイルを安定して扱うためのApacheチューニング:RequestReadTimeoutの調整

スマートフォンからの画像を自分のPCに転用する形で用いているNextcloud。

アップロードが途中で失敗したり、特定の条件下で接続が切れたりすることがあります。Apacheビルトインのmod_reqtimeout設定を最適化し、サーバーの安定性と利便性を両立させるためのチューニングを行いました。

環境

  • Nextcloud 32
  • Apache 2.4
  • PHP-FPM8.3
  • Ubuntu 24.04

そもそもmod_reqtimeoutとは?

Slowloris(スローロリス)攻撃への対策

このモジュールがビルトインされたのは、Slowlorisという、非常に低コストで強力な攻撃手法への対抗があります。

通常のDoS攻撃は大量の通信を送りますが、Slowlorisは逆に「極めてゆっくり」通信します。

  1. サーバーに接続を開始する。
  2. リクエスト(ヘッダーやボディ)を、タイムアウトにならないギリギリの遅さで、1バイトずつ小出しに送る。
  3. サーバー側は「まだデータが来るはずだ」と判断し、その接続(スレッドやプロセス)を維持し続ける。

結果 サーバーの同時接続数の上限が攻撃者の「待ち」状態で埋まってしまい、正規のユーザーがアクセスできなくなります。

mod_reqtimeout は、この「嫌がらせ」を許さないための防衛線です。

サーバーリソースの適正管理

Apacheサーバーが1つの接続を維持するには、メモリやCPUリソースを消費します。
もしタイムアウト設定がない、あるいは極端に長い場合、以下のような問題が発生します。

  • ゾンビ接続の蓄積: ネットワークが切れたのにクローズ処理が終わっていない接続が残り続ける。
  • リソースの浪費: 応答の遅いクライアント(意図的か否かに関わらず)のために、サーバーの貴重な作業枠をいつまでも空けておくことになります。

なぜこれがNextcloudで徒になるのか

Nextcloudのデータの性質と通信の仕組みにあります。

巨大なファイルを細切れにする

Nextcloudは、数MBから数GBあるような大きなファイルを送る際、一気に送らずにファイルを分割して、「チャンク(塊)」に分割して送信します。

  • 動作の流れ:
    • チャンクAを送信 → サーバーが処理 → チャンクBを送信……
  • 問題点:
    • チャンクとチャンクの間に、クライアント側でのファイル読み込みやハッシュ計算などで一瞬「無通信」の時間が流れます。
  • 結果:
    • Apacheのmod_reqtimeoutは、この無通信を先のSlowlorisと誤認して、接続をバッサリ切ってしまいます。

モバイル回線の不安定さ

Nextcloudは外出先のスマートフォンから使うことを想定しています。

  • 電波の瞬断:
    • 移動中にWi-Fiから4G/5G回線に切り替わったりする。
  • 上り速度の制限:
    • モバイル回線は「下り」は速くても「上り」が極端に遅いことが多い。

これも、先のSlowloris攻撃と見做されてしまいます。

チューニングの必要性

だからといって、このmod_reqtimeoutを無効にすると、それらの攻撃への備えがなくなります。

Nextcloudの利便性を高めつつ不審な攻撃を守るというのは

「任務」は遂行する「部下」も守る
お前ごときに「両方」やるというのはそう難しいことじゃあないな

ぐらいの精神でやっていきましょう。

さっくりとした手順

  • mod_reatimeoutの設定ファイルのバックアップを取る。
  • mod_reatimeoutの設定ファイルを修正する。
  • サービス再起動を行う。

mod_reatimeoutの設定ファイルのバックアップ

  • 念のためのモジュール確認
sudo apache2ctl -M |grep req

reqtimeout_module (shared)を確認します。(apacheをapt等で入れていれば、まず入っています)

  • ファイルバックアップ
sudo cp -pi /etc/apache2/mods-available/reqtimeout.conf /path/to/backup/directory/reqtimeout.conf.$(date +%Y%m%d)

/path/to/backup/directoryは自分の環境に合わせます。

  • ファイルバックアップ確認
diff -u /path/to/backup/directory/reqtimeout.conf.$(date +%Y%m%d) /etc/apache2/mods-available/reqtimeout.conf 

エラーがないことを確認します。

mod_reatimeoutの設定ファイルを修正

/etc/apache2/mods-available/reqtimeout.confを管理者権限で修正します。

筆者は以下のように行いました。

-RequestReadTimeout body=10,minrate=500
+RequestReadTimeout body=20,minrate=500

具体的には、リクエストボディ(データの送信本体)の読み取り開始を待機する時間を10秒から20秒へ延長しています。

  • body=20:
  • リクエストボディの最初の1バイトを待つ時間を20秒に設定。
  • minrate=500:
  • データが送り始められた後、最低でも秒間500バイトの転送速度を要求する。これより遅い状態が続くとタイムアウトします。
  • ファイルの差分確認
diff -u /path/to/backup/directory/reqtimeout.conf.$(date +%Y%m%d) /etc/apache2/mods-available/reqtimeout.conf 

以下のような差分を確認します。

-RequestReadTimeout body=10,minrate=500
+RequestReadTimeout body=20,minrate=500

設定反映

  • 構文チェック
sudo apache2ctl configtest

Syntax OKとなることを必ず確認してください。でないと、apacheサービスが停止したままとなってしまい、サービス断が発生します。

  • Apache サービス再起動
sudo systemctl reload apache2.service
  • Apacheサービス再起動確認
systemctl status apache2.service

active(running)を確認します。

まとめ

Nextcloudサーバーにおいて、RequestReadTimeout のbody待ち時間を延長することは、「モバイル環境や大容量ファイル送信時の安定性」を向上させるために非常に有効な手段です。

もし、ログ(Apacheのerror_log)に The timeout specified has expiredrequest body read timeout といった記録が残っている場合は、この値を調整してみることをお勧めします。

  • 参考コマンド
sudo grep "request body read timeout" /var/log/apache2/error.log

2026年3月の外食記録-2-

昨日の続き、メインディッシュと言える食事群です。

鰯塩焼き

本当に鰯なのかと言うぐらいの大きさ。骨離れも良好。ワタもみっちり詰まって濃厚。身の脂ののりも言うまでもないです。

鱈の唐揚げ

フィッシュアンドチップスの定番、鱈がこうなるという例。白身がふわふわで、英国時代のものとは次元が違いました。

ポテトコロッケ

自家製という気合いの入れよう。ジャガイモを皮ごと潰した野趣あふれる風味が最高でした。

食事:手巻き

ブリの漬けを手巻きにするという技巧。のりがふやけないうちにすぐに食べる必要があったものの、これもおいしかったです。

いずれも、いい食事で心が満たされました。

2026年3月の外食記録-1-

週末、お世話になっているお店でのおいしい食事をいただきました。

刺身から始まり。この切付の時点で鮮度と腕がうかがえます。

蒸したジャガバターの上にウニをのせるという背徳的な食べ方をしたり

旬のホタルイカの酢味噌和え、

店の自作という牡蠣のオイル漬け。

この時点でも感動は極上でしたが、まだ続きがあります。

2026年3月の差しボードゲーム記録。

友人と卓を囲みました。

ロストシティ タイルズ

色を絞れたこともあり、40点差をつけての勝利。(上のタイルは計算のため順番を変えています)

真打

納涼落語会での『牡丹灯籠』に年末落語会の『芝浜』をかけることができました。

宝石の煌めき デュエル

一色10点で勝利。発展カードの偏りを読み取れたのが功を奏しました。

天下鳴動

計略カードと援軍が勝敗を形づけるゲーム。運と戦略が絡むゲームではありましたが敗北。

いい気分転換でした。

Nextcloud Ver 32にアップデート後、高性能バックエンドのDockerをアップデート。

警告: 実行中のバージョン: 2.0.4~docker; サーバーはこのTalkバージョンの全ての機能をサポートしていません。欠落している機能: chat-relay

と出たので、それに対応していきます。

環境

  • Nextcloud 33.0
  • Dockerを利用して高性能バックエンドサーバ(Signaling Server)を構築。構築手順
  • それ以外はLAMP環境。
    • Apache 2.4
    • MySQL
    • PHP-FPM
    • その上でNextcloud

アップデートは、こちらの手順で、コマンドラインから行いました。

その後、管理画面で上記のエラーが出たという次第です。

やっぱり必要なフェイズ・ゼロ

このNextcloudを個人的に運用しているのならばそのまま行って構いません。しかし、これを組織で運用しているとなると話はまるで違います。

  • NextcloudのアップデートによりDockerコンテナもアップデートが必要。
  • ついてはこの計画でサーバ設定を行う
  • そのため、追加で作業時間をいただきたい
  • 作業時間は○時頃、○分程度で終わる。その間、Nextcloudは使えなくなる
    など、利用者への周知という名の政治交渉が必要になります。この運用者の政治的な立ち位置(担当者/担当部門が強権を振るえるか否か)でも言い方や手段が決まってきます。そこは状況に応じていきましょう。

※ 検証環境を用意できる程度には時間と予算と環境に余裕がある方は、その環境にいることを感謝しつつ、検証を重ねていきましょう。

さっくりとした手順

  1. Nextcloudのメンテナンスモードを有効化します。
  2. Dockerの設定ファイルを修正します。
  3. Dockerコンテナを最多値揚げします。
  4. Nextcloudのメンテナンスモードを無効化します。
  5. エラーの解消を確認します。

メンテナンスモードを有効化

  • Nextcloudのルートディレクトリ移動
cd /path/to/nextcloud/root/directory && pwd

自分の環境に合わせます。(筆者環境/home/www-data/nextcloud)

  • メンテナンスモード有効化
sudo -u www-data php occ maintenance:mode --on
  • メンテナンスモード確認

運用中のNextcloudのURLにアクセスし、メンテナンスモードであることを確認します。

設定ファイル (server.conf) の構成

  • ファイルのバックアップ
sudo cp -pi /hoge/docker/files/nextcloud-signaling/server.conf /path/to/backup/directory/server.conf.$(date +%Y%m%d)

自分の環境に合わせます。

  • ファイルのバックアップ確認
diff -u /path/to/backup/directory/server.conf.$(date +%Y%m%d) /hoge/docker/files/nextcloud-signaling/server.conf

差分がないことを確認します。

  • server.confファイル修正

chat-relay 機能を有効にするため、以下のように項目を付け加えます。

  • [chat] セクション(新規追記)
[chat]
enabled = true

追記したら保存を行います。

  • ファイル修正確認
diff -u /path/to/backup/directory/server.conf.$(date +%Y%m%d) /hoge/docker/files/nextcloud-signaling/server.conf

以下の差分を確認します。

+ [chat]
+ enabled = true

Docker アップデート・再起動

これが地味にハマりました。古い docker-compose (v1.29.x等) を使用している環境だと、イメージのメタデータ構造の違いによるエラー(KeyError: 'ContainerConfig')が発生。

それを避けるための手順です。

  • 最新イメージの直接取得

docker-compose を介さず、Docker本体で最新イメージをプルする。

sudo docker pull strukturag/nextcloud-spreed-signaling:latest
sudo docker pull nats:2.9
  • 不完全なコンテナの掃除

作成失敗などで残った残骸を削除し、競合を防ぐ。

sudo docker container prune -f
  • コンテナの起動
sudo docker-compose up -d

Nextcloudのメンテナンスモードの無効化

  • メンテナンスモード無効化
sudo -u www-data php occ maintenance:mode --off
  • メンテナンスモード確認

運用中のNextcloudのURLにアクセスし、管理画面に入ります。

Nextcloud管理画面での反映

Nextcloudの「設定」>「Talk」にある高性能バックエンド設定で、URL横の「チェックマーク(保存)」を押し、chat-relayAvailable features に含まれたことを確認して対処完了です。

改めて思ったこと

Dockerは確かに便利な代物ですが、管理が複雑になっていくというのが難点。それ故、Dockerは最小限にして登録していきたいものです。

緊急対応:Ubuntu搭載PCが不調となったとき(initramfsエラー)の対処。

宅内でのサーバとして立てているUbuntu20.04という完全にEOLを迎えている機体。それがエラーを起こしたときのメモです。

1. 発生した事象

Ubuntu 20.04を入れているミニPCの起動時、画面に以下のメッセージが表示され、デスクトップが立ち上がらずに (initramfs) というプロンプトで停止しました。

  • sgx: disabled by BIOS
  • (initramfs) _ (入力待ち状態)

2. 原因切り分け

以下、Geminiからのアドバイス。

  • SGXのメッセージ: これは単なる「通知」であり、起動不可の直接的な原因ではないことが多い。
  • initramfsでの停止: 真の原因は、ファイルシステムの整合性エラー。強制終了や停電などで、Ubuntuがインストールされているディスク領域(パーティション)が正常に読み込めなくなったために発生します。

3. 対処手順(修復方法)

これに従って対処を行いました。

エラーを起こしたパーティションの特定

(initramfs) プロンプトで exit を入力

エラーの詳細(どのパーティションが壊れているか)を確認するために、まず exit と打ちます。

エラーメッセージからデバイス名を特定

The root filesystem on /dev/sdb2 requires a manual fsck

というメッセージが表示されました(筆者環境)これをメモします。

パーティション修復

特定したデバイス名に対して修復コマンドを実行します。

fsck /dev/sdb2 -y

-y オプションを付けることで、すべての修復箇所を自動で「Yes」として処理します。

修復完了後の再起動

FILE SYSTEM WAS MODIFIED と表示されたら、以下のコマンドで再起動(またはブート続行)を試みます。

reboot

または

exit

結局原因は?

機器が古すぎたためのディスクエラー につきます。

これが仕事でしたら「さっさと取り替えろ」「いや、取り替えないように準備する」なのですが、自分の環境なのでそうはいかず。

なんとか予算と時間を見つけてリプレースをする必要に迫られました。

各種マーカー追加。(統率者メモ2026/03/14)

こちらのデッキで用いるトークン群をGemini nano banana 2にて生成。

それに合わせて、

統率者でよく混乱しがちになる

  • エネルギーがいくつあるか
  • 毒をいくつ喰らっているか(与えているか)
  • 統率者ゾーン/統率者税
  • 統率ダメージ管理

などを生成した後、L判で出力。B7ハードケースにも詰めました。

隙間があるのが課題なので、そのあたりを詰めればもっといいものになりそうです。

ひと繋ぎ、全惑星。(アプリ版『ガイアプロジェクト』ダー・シュワームチャレンジ)

行き狩りの電車でプレイしている『ガイアプロジェクト』で珍しい事象が起きました。

使った勢力はお気に入りのダー・シュワーム。

まず完成図がこちら。ここまで宙域を伸ばしているのも異例ですが

マジョリティ「惑星改造」が9。つまり、航法5の暗黒惑星を含めてコンプリート。

惑星改造ゴールはアンバスに取られたものの、同盟×5タイルと研究ごとに2点タイルを取ることができて

最終得点は173点。まず取ることがない航法ゴールをダー・シュワームでやったという珍事です。

USBメモリに割り当てられた特殊領域の解除メモ。

何かと現役なUSBメモリ。再セットアップ中に(Windows管理→ディスク管理)

このように見割り当て/もしくは複数のパーティションができた場合に対応するときのメモです。

注意点

この操作を行うと、USBメモリ内のデータはすべて消去されます。 必要なファイルがある場合は、作業前に必ずパソコン本体などへバックアップを取ってください。

ディスク番号は絶対に間違えないでください。

OSインストールドライブが文字通り吹っ飛ぶような操作です。

手順

コマンドプロンプトを管理者で実行。

Windowsキー→cmdを入力。コマンドプロンプトが入力されたら、右クリックで「管理者として実行」を選択。

コマンドプロンプトでdiskpartを起動

diskpart

を入力してEnterを実行。

ディスク番号を確認

list disk

を実行。

この時、上述したディスク3が操作をするUSBメモリであることを確認しましょう。

※ここでディスク番号を間違えると、パソコンのSSDなどを消去してしまうため慎重に選んでください。

USBメモリを選択

select disk 3

を実行します。「ディスク 3 が選択されました」と表示されます。

中身を消去

clean

を実行します。これで、ディスク内の全てのパーティションが消えます。

新しいパーティションを作成

create partition primary

を実行します。

USBメモリのフォーマット

fs=ntfs quick

等でフォーマットを行います。

終了

exit

でdiskpartを抜けます。

霊気走破構築済み統率者デッキ『生けるエネルギー』最初の改良。(統率者メモ:2026/03/11)

1年前に買ったまま放置していたデッキをようやく組めました。

生けるエネルギー:改

ネットで見た改造案を元に、進化とトークン戦略。ゲームチェンジャーを一切入れないブラケット2に抑えています。

統率者

  • 《光輝の創造者、サヒーリ/Saheeli, Radiant Creator(DRC)》

デッキ

クリーチャー

  • 《オーロラの変幻者/Aurora Shifter(M3C)》
  • 《乱動の地図作り/Roil Cartographer(MH3)》
  • 《潮の星、京河/Keiga, the Tide Star(CLB)》
  • 《破片撒きのスフィンクス/Sharding Sphinx(MOC)》
  • 《蜥蜴丸/Lizard Blades(NEO)》
  • 《改革派の霊気砲手/Aethertorch Renegade(KLD)》
  • 《極楽鳥/Birds of Paradise(RVR)》
  • 《金脈のハイドラ/Goldvein Hydra(OTJ)》
  • 《恐竜の卵/Dinosaur Egg(LCC)》
  • 《目ざとい新人/Sharp-Eyed Rookie》
  • 《獣性を築く者/Architect of the Untamed(DRC)》
  • 《警戒するラッドスタッグ/Watchful Radstag(PIP)》
  • 《進化の証人/Evolution Witness(MH3)》
  • 《世界魂の代弁者、ニッサ/Nissa, Worldsoul Speaker(DRC)》
  • 《浄化のドルイド/Druid of Purification(DRC)》
  • 《ピーマの先駆者/Peema Trailblazer(DRC)》
  • 《猛る霊気コブラ/Rampaging Aetherhood(DRC)》
  • 《サイクロプスの超伝導師/Cyclops Superconductor(MH3)》
  • 《ティラニッド・プライム/Tyranid Prime(40K)》
  • 《崇高な飛行士/Empyreal Voyager(KLD)》
  • 《ならず者の精製屋/Rogue Refiner(DRC)》
  • 《つむじ風の巨匠/Whirler Virtuoso(DRC)》
  • 《双子唱者、アドリックスとネヴ/Adrix and Nev, Twincasters(MKC)》
  • 《フラクタルの花、エシックス/Esix, Fractal Bloom(MKC)》
  • 《テルカーの技師、ブルーディクラッド/Brudiclad, Telchor Engineer(M3C)》
  • 《整備長、ピア・ナラー/Pia Nalaar, Chief Mechanic(DRC)》
  • 《極楽の羽ばたき飛行機械/Ornithopter of Paradise(DRC)》
  • 《静電気式打撃体/Electrostatic Pummeler(KLD)》
  • 《歩行格納庫の自動機械/Stridehangar Automaton(DRC)》
  • 《ワームとぐろエンジン/Wurmcoil Engine(SOM)》
  • 《三重の稲妻巨人/Threefold Thunderhulk(SOC)》

インスタント

  • 《語りの調律/Tune the Narrative(MH3)》
  • 《秘儀の否定/Arcane Denial(WOC)》
  • 《不許可/Disallow(DRC)》
  • 《混沌のねじれ/Chaos Warp(WHO)》
  • 《エレクトロサイフォン/Electrosiphon(PIP)》

ソーサリー

  • 《霊気との調和/Attune with Aether(KLD)》
  • 《自然の知識/Nature's Lore(S99)》
  • 《冒涜の行動/Blasphemous Act(VOC)》
  • 《慮外な押収/Confiscation Coup(DRC)》

アーティファクト

  • 《太陽の指輪/Sol Ring(DRC)》
  • 《改良式鋳造所/Retrofitter Foundry(DRC)》
  • 《稲妻のすね当て/Lightning Greaves(TDC)》
  • 《抽出機構/Decoction Module(M3C)》
  • 《好奇のタリスマン/Talisman of Curiosity(DRC)》
  • 《秘儀の印鑑/Arcane Signet(ZNC)》
  • 《独創のタリスマン/Talisman of Creativity(WHO)》
  • 《織木師の組細工/Woodweaver's Puzzleknot(KLD)》
  • 《パンハモニコン/Panharmonicon(DRC)》
  • 《霊気池の驚異/Aetherworks Marvel(DRC)》
  • 《ウギンのきずな/Ugin's Nexus(KTK)》
  • 《ゴンティの霊気心臓/Gonti's Aether Heart(M3C)》
  • 《特製の闘車/Bespoke Battlewagon(MH3)》
  • 《模倣メカ/Imposter Mech(NEC)》
  • 《秘密の複製機/Esoteric Duplicator(BIG)》
  • 《世界歩きの兜/Worldwalker Helm(BIG)》
  • 《イゼットの発電装置/Izzet Generatorium(MH3)》

エンチャント

  • 《革新の時代/Era of Innovation(DRC)》
  • 《テフェリーのヴェール/Teferi's Veil(WTH)》
  • 《倍増の季節/Doubling Season(PZA)》
  • 《降霜断崖の包囲/Frostcliff Siege(TDM)》

プレインズウォーカー

  • 《崇高な工匠、サヒーリ/Saheeli, Sublime Artificer(WAR)》

土地

  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《森/Forest》
  • 《森/Forest》
  • 《森/Forest》
  • 《森/Forest》
  • 《焦熱島嶼域/Fiery Islet(WHO)》
  • 《天啓の神殿/Temple of Epiphany(WHO)》
  • 《嵐削りの海岸/Stormcarved Coast(WHO)》
  • 《凍沸の交錯/Frostboil Snarl(DRC)》
  • 《シヴの浅瀬/Shivan Reef(TDC)》
  • 《溢れ出た区画/Overflowing Basin(DRC)》
  • 《ヤヴィマヤの沿岸/Yavimaya Coast(C20)》
  • 《繁殖池/Breeding Pool(DIS)》
  • 《内陸の湾港/Hinterland Harbor(PIP)》
  • 《冠水樹林帯/Waterlogged Grove(WHO)》
  • 《蔦明の交錯/Vineglimmer Snarl(WHO)》
  • 《隠れた茂み/Sheltered Thicket(WHO)》
  • 《根縛りの岩山/Rootbound Crag(XLN)》
  • 《カープルーザンの森/Karplusan Forest(TDC)》
  • 《霊気拠点/Aether Hub(M3C)》
  • 《無声開拓地/Silent Clearing(MH1)》
  • 《風変わりな果樹園/Exotic Orchard(WOC)》
  • 《産業の塔/Spire of Industry(DRC)》
  • 《祖先の道/Path of Ancestry(TDC)》
  • 《統率の塔/Command Tower(ZNC)》
  • 《ケトリアのトライオーム/Ketria Triome(IKO)》
  • 《ヘリオス1/HELIOS One(PIP)》
  • 《アカデミーの廃墟/Academy Ruins(MMA)》
  • 《霧深い雨林/Misty Rainforest(ZNE)》

あなたが工匠(Artificer)やアーティファクトである呪文1つを唱えるたび、(E)(エネルギー(energy)・カウンター1個)を得る。
あなたのターンの戦闘の開始時に、(E)(E)(E)を支払ってもよい。そうしたとき、あなたがコントロールしているパーマネント1つを対象とする。他のタイプに加えて速攻を持つ5/5のアーティファクト・クリーチャーであることを除き、それのコピーであるトークン1体を生成する。次の終了ステップの開始時に、そのトークンを生け贄に捧げる。

という統率者。高名な者、ミシュラと似たような挙動ですが

  • パーマネントなら何でもいい
  • コピー先とコピー元は同名のトークン

というのが微妙に違います。なので、

  • 潮の星、京河をコピー→レジェンドルールにより墓地へ→相手のクリーチャーを永続的に奪う
  • 恐竜の卵をコピー→勝手に死亡するので勝手に発見5が誘発

など、結構面白い動きができそうです。

Page 1 of 286

Powered by WordPress & Theme by Anders Norén