株式会社NoSchoolでCTOをしている@mejilebenです。
今日はdocker
でハマったところを書きます。
概要
nginx
をDocker
で利用しているとき、413 Request Entity Too Large
で怒られてしまう事案が発生しました。
その原因が、nginx
のDockerではなく、その前段に構えていたhttps-portal
というDockerコンテナだったので、メモついでに書き残しておきます。
構成
NoSchoolではローカルの開発環境をDocker
で構成しています。
https-noschool:
container_name: https-noschool
image: steveltn/https-portal:1
ports:
- '80:80'
- '443:443'
environment:
STAGE: local
DOMAINS: 'localhost -> http://nginx-noschool'
volumes:
- ./docker/https-portal/cert:/var/lib/https-portal
depends_on:
- nginx-noschool
nginx-noschool:
image: nginx:(VERSION)
container_name: nginx-noschool
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./:/opt/noschool
environment:
TZ: Asia/Tokyo
depends_on:
- php-noschool
php-noschool:
build: ./docker/php-fpm
container_name: php-noschool
volumes:
- ./:/opt/noschool
working_dir: /opt/noschool
environment:
TZ: Asia/Tokyo
depends_on:
- php-front-noschool
nginx
をhttpサーバー、PHPの実行環境としてはphp-fpm
を利用し、本番同様https
の環境を再現するために、https-portalを利用しています。
起こったこと
ローカルで画像を使った投稿をPOST
しようとすると、413 Request Entity Too Large
と画面に表示され、動作しませんでした。
調べたこと
ググれば、要はnginx
のclient_max_body_size
設定を書き換えることで上記の症状が治るとのことでした。デフォルトではリクエストの最大バイト数が1MBに設定されており、画像を添付するとゆうに超えてしまうということです。
やったこと
上記設定の通り、nginx
自体の設定ファイルは./docker/nginx/default.conf
に置いてあるので、その中にclient_max_body_size 50M;
と書き加え、docker-compose
を再起動しました。
しかし、それでも画像投稿時に同様のエラーが出てしまいました。
原因
nginx
の前段に置いているhttps-portalが同様にnginx
を利用してhttps
化をしており、そこで引っかかっていたのが原因でした。
上記リポジトリのREADMEにもAdvanced Usageとして設定方法が書かれているので、
environment:
STAGE: local
DOMAINS: 'localhost -> http://nginx-noschool'
CLIENT_MAX_BODY_SIZE: 10M
というように、docker-compose.yml
に最大リクエストサイズを指定してあげる必要があります。
どうして分かったのか
普段開発するときはdocker-compose up -d
しているのですが、今回のように詰まったときは特にdocker-compose up
として、常にDocker
側のログを吐き出すようにしています。
すると画像をPOST
したときにエラーログが流れてきたのですが、nginx-noschool
コンテナのログではなく、https-noschool
コンテナのログだったのです。
そこでREADMEを見に行った結果、内部的にnginx
を使っているコンテナであることが判明し、今回の設定内容の変更に至りました。
※もちろんnginx
側の設定変更も必要です。両方client_max_body_size
の変更しないといけないのが少々面倒ではありますね。
教訓
- なんとなくで
docker-compose
していたらバグった時に戸惑うのでちゃんと把握しておきましょう← - 困ったら
docker-compose up
でログ観察
最後に
僕が働いているNoSchoolでは仲間を募集中です!
創業期真っ只中、社員は僕と社長の2人きり(+副業メンバー4人)でEdTechを変えに行ってます!
興味あればお茶でもしましょう。Twitterからの連絡でも大歓迎です!
https://www.wantedly.com/companies/noschool