nginxで"413 Request Entity Too Large"が出たとき #https-portal #Docker #nginx

NASの導入に伴い、家庭内のネットワーク環境を見直している。

記事的に順序が前後して申し訳ないのだが、僕の悩みは皆の悩みということで、早めに対処法を載せておくことにする。

エラーとしては「413 Request Entity Too Large」が対象。

小さな悩みを乗り越えていくのは面倒だけど楽しいよね。

今回はうちの環境の場合に限っては問題の切り分けがしやすかったとも言える。

起こった現象としては、宅外からのアクセスで、ブログを更新する際に、「413 Request Entity Too Large」が出るというものだ。表示としてはこんな感じ。

nginx_error_413.jpg

自分が体験したわけではないので、この画像のみが頼り。

我が家の場合はWebサーバーがそもそもApacheなのでnginxのメッセージが出ることはあり得ないというのが切り分けの決め手。たぶんWebサーバー側もnginxだったら混乱していたかもしれない。

このメッセージの出どころはリバースプロキシに使っているDockerコンテナ「https-portal」の中のnginxだった。

今回、SynologyのNASを導入するタイミングで、ルーターから散らばっていた宅外からのアクセスをNASに集約し、NASから末端の経路に転送するという方法に変更した。それにはhttps-portalの存在が大きいのだが、SSLの証明書管理を一本化したかったという点、将来的に物理サーバーを仮想マシンに置き換えたいという点、経路をまとめることでネットワーク機材の整理をしたかったという点だ。どうもこの作業が裏目に出てしまったようだ。

webサーバーだとよくある問題で、一度のアップロードで受け付けるファイルサイズの上限が決められていて、アップローダーなどを設置すると大体この問題に引っかかる。

phpだとupload_max_filesize」、「post_max_size」とかApacheだと「LimitRequestBody」とかだ。

今回はリバースプロキシとしてnginxを通過するときにこの問題に引っかかったようだ。

nginxそのものであれば/nginx/default.confだが、今回はDockerの中なので、https-portal Advanced Usageにあるようにenvironmentとして追記した。

docker-compose.yml

environment:
      STAGE: local
      DOMAINS: 'localhost -> http://192.168.0.10'
      CLIENT_MAX_BODY_SIZE: 100M

とりあえずこれで問題は解決。