Docker Nginx 413 Request Entity Too Large エラー

Docker Nginx

ファイルアップロード時エラー

ファイルアップロード機能を実装し、PCでテストした時点では問題なし「容量が小さいサイズ(1MB以内)しかこの時はテストしていなかった」

スマホで撮影したデータをアップロードした時、Nginx「413 Request Entity Too Large」エラーが発生。

「あっ!容量オーバーか」・・・急ぎで修正の必要はなかったのでとりあえず寝る。。。

2行目の「nginx」に注目(詳細はのちほど)
2行目の「nginx」に注目(詳細はのちほど)

Nginxのデフォルトアップロードサイズ

http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

情報をみると、デフォルトが1MBという事。確かにスマホから送ったサイズは1MB以上だった。”0” を指定すれば制限はなくなる。

当サイトの構成

まずは当サイトの構成に関して。

詳細は以下で記載しています。

https://outpust.jp/blog/c6953b19-652d-415c-939e-4ee5ae0da752

上記構成図を見て、すぐに「ココ」と気づいた方も多いかと。しばしお付き合いを。

試した事1

リバースプロキシ(Nginx)のDockerログを確認

エラーは出力していない。。。?

試した事2

リバースプロキシ(Nginx)の設定ファイル「default.conf」に以下を追加

client_max_body_size 0;

結果:変わらずエラー(確認後、上記記載は一旦削除)

試した事3

リバースプロキシ(Nginx)の設定ファイル「default.conf」に以下を追加

このリバースプロキシでエラーとなっているか確認する為。

--追加前--
error_page 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

--追加後--
error_page 413 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

結果:変わらずエラー

試した事4

HTTPS用(Nginx)の「docker-compose.yml」に以下を追加

environment:
      STAGE: production
      CLIENT_MAX_BODY_SIZE: 0  ← 追加

結果:エラーが少し変わった

2行目の「nginx」から「nginx/1.23.3」に変わった

HTTPS用のNginxは通過し、リバースプロキシ側のNginxで引っかかっている

nginx/1.23.3
nginx/1.23.3

試した事5

「試した事2」を再度設定

リバースプロキシ(Nginx)の設定ファイル「default.conf」に以下を追加

client_max_body_size 0;

結果:無事容量が大きいファイルもアップロードできるようになった。

最後に

DockerでNginxを【複数】使用して構築している方は ”ははまりやすい” 事案かと。

当サイトでは環境部分は制限なしで、アプリ側で容量制限を実施予定です。

いい勉強になりました。😆

プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!