[Docker] nginx-proxyコンテナで413 Request Entity Too Largeと出た時の対処

Dockerで立てたphpMyadminサーバーで、8Mほどのファイルをインポートしようとしたところ「413 Request Entity Too Large」と出てインポートが出来なかったので対処方法を調べてみました。

413エラーの原因

今回のphpMyadminサーバーコンテナは、nginx-proxyコンテナを経由させてアクセスする仕組みなっていて、そのnginx-proxyコンテナがclient_max_body_sizeを少なく制限しているためでした。

対処方法

対処方法は簡単です。

nginx-proxyコンテナに「client_max_body_size」の設定を読み込ませればOK。とはいえ、Dockerコンテナなので多少面倒なステップがあります。

conf.dディレクトリをマウントする

まず、Dockerのnginx-proxyコンテナにオリジナル設定ファイルを読み込ませるために、ローカルのconf.dディレクトリをコンテナにマウントします。

一度、nginx-proxyコンテナを停止します。そのあとにconf.dディレクトリを作成して、設定を追加します。

mkdir conf.d

//docker runなら(あとで起動する時に)
docker run ...... -v ./conf.d:/etc/nginx/conf.d

//docker-composeならvolumesの項目に下記を追加
- ./conf.d:/etc/nginx/conf.d

これで、カレントディレクトリのconf.dに「xxxx.conf」という名前でファイルを入れると読み込まれるようになりました。

オリジナル.confファイルに「client_max_body_size」を設定する

続いて、自作設定ファイルを入れます。

cd conf.d
vi mysetting.conf
client_max_body_size 500M ;  //※500Mのところは適宜変更してください

あとは、nginx-proxyコンテナを起動させればOKです。

//docker run 
docker run -v ./conf.d:/etc/nginx/conf.d ...... //コマンドは適宜合わせてください

//docker-compose
docker-compose up -d

エラーが出ずに起動ができればOKです。

確認

きちんと設定が読み込まれているか不安な場合は、コンテナに入って確認することができます。

docker exec -it {コンテナ名 or コンテナID} bash

cd /etc/nginx/conf.d

ls -la
default.conf
mysetting.conf

ちゃんとマウントされていましたね。

あとはphpMyadminに戻ってインポートをすればOKです。

nginx-proxyコンテナは、軽量で便利なのですが、最低限の設定しかされていないことがあるので、nginxやhttp周りのエラーが起きたら、設定されているかを確認すると良さそうです。