[Docker] nginx-proxyコンテナで413 Request Entity Too Largeと出た時の対処
Dockerで立てたphpMyadminサーバーで、8Mほどのファイルをインポートしようとしたところ「413 Request Entity Too Large」と出てインポートが出来なかったので対処方法を調べてみました。
更新日: 2018.7.17公開日: 2017.9.8
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周りのエラーが起きたら、設定されているかを確認すると良さそうです。