背景
EBにrailsアプリケーションをデプロイしたらファイルのアップロードがうまくいかず
調査
$ eb ssh
でサーバに入り
$ view /var/log/nginx/access.log
でログを調査
413エラーが出ていました
nginxで"client intended to send too large body"が発生した時の対策方法
を見てみると
どうやらファイルサイズがnginxの設定値より大きくてエラーになるらしく、デフォルトでは1MBまでしか受け取れないらしい
設定を変更してみる
試行1
Elastic beanstalk で大きいデータを POST したら nginx が 413 Request Entity Too Large
reasing client_max_body_size in Nginx conf on AWS Elastic Beanstalk
を参考にebextensionsを書いてデプロイしてみる
files:
"/etc/nginx/conf.d/client-max-body-size.conf":
mode: "000755"
owner: root
group: root
content: "client_max_body_size 1024M;"
そしてデプロイをするも変わらずエラー
試行2
Nginx httpディレクティブで指定したclient_max_body_size が無視される
を見て
サーバ内部の/etc/nginx/nginx.conf
を見てみると
include /etc/nginx/conf.d/*.conf;
がhttpディレクティブに書かれており、serverディレクティブには
include /etc/nginx/default.d/*.conf;
とあったので.ebextensions/01-nginx-max-body.config
の
/etc/nginx/conf.d/client-max-body-size.conf
を
/etc/nginx/default.d/client-max-body-size.conf
に書き換えてデプロイするもエラー
試行3
設定が反映されていないのでは?と思ったがnginxの設定値を確認するコマンドがわからず
とりあえずサーバ内で
# nginx -s reload
をしてみると、動いた!!!
なるほど、設定が反映されていないんですね〜
ということで最終的に
files:
"/etc/nginx/conf.d/client-max-body-size.conf":
mode: "000755"
owner: root
group: root
content: "client_max_body_size 1024M;"
container_commands:
01-nginx_reload:
command: sudo nginx -s reload
でデプロイしたら成功、予想通り!
デプロイポリシーがAll at once
だったのでreload
が必要だったのかもしれない
immutable
だと新しいインスタンスが立ち上がるからreload
必要ないのかもしれない
ここらへんは要検証