現象
Pleasanterでちょっとした申請システムを作っていたのですが、1MB以上の写真を添付しようとすると、添付できずに途中で止まってしまう現象が発生しました。その時、ブラウザ上では特にエラーメッセージの表示はされませんでした。
原因
リバースプロキシとしてnginxを使用していたのですが、クライアントからの最大リクエストサイズがデフォルトで1MBとなっていることが原因でした。
解決方法
nginxの最大リクエストサイズを、より大きな値に設定することで解決しました。
nginxの設定ファイル(conf.d/配下の.confファイル)に上限を100MBとする行を書き足しました。
server {
listen 443 ssl http2;
#---その他の設定---
#↓の一行を書き足し
client_max_body_size 100m;
location / {
#---その他の設定---
}
}
</pre>
とりあえず100MBで設定をしておき、実際の容量制限はPleasanter上で設定することにしました。
その他覚書
今回、PleasanterはDocker上に構築していたのですが、同じサーバー上に複数のWebサービスを立ち上げるため、nginxをリバースプロキシとして運用していました。他のサービスは、ファイルをアップロードすることがそもそもない運用でしたので、まったく気付きませんでした。
Pleasanterは、添付ファイルの容量などもGUIで設定できるので、最初はそちらが原因かと見当はずれなところから調査を始めてしまいました。nginx、こんなデフォルト設定があるんですね……。
やるべきだったこと
nginxのログを調べる
軽く調べたら「ほぼこれだろうな」という原因に行き当たってしまったので、ログを調べずに設定をあててしまいました。ログの確認をして裏付けをとってから作業したほうがよかったですね。
最大リクエストサイズの設定は共通設定としておく
今回、nginxの下に複数のwebサービスを起動しています。Pleasanter以外のサービスは、ファイルのアップロードをするという運用はありませんが、今後のことを考えて共通設定の.confを作り、そちらに設定を移行しようと思います。
nginxの再起動
サービスを内部でしか使用していなかったので、次のコマンドでコンテナを再起動し、設定を当てなおしました。
docker compose nginx restart
コンテナの再起動自体は、1秒もかからず完了はします。
とはいえ、設定をreloadすればダウンタイムなしで設定を当てられるので、よりベストな手段をとっていくこととし、今後は次のコマンドを使用していこうと思います。
docker compose exec nginx nginx -s reload