Nginx httpディレクティブで指定したclient_max_body_size が無視される


概要

/etc/Nginx/Nginx.conf にてclient_max_body_size 10m; を指定しているのに、1MB超のファイルをアップロードできない。

/etc/Nginx/conf.d/hogehoge.conf のserver 内を修正したら思った通り動いた話。

起こったこと

WebサーバにNginxを利用しているWebサービスにて、2MBちょっとのファイルをアップロードしようとすると、Nginxの 413 Request Entity Too Large エラー が発生しました。
このエラーは、Nginxが許容しているよりも大きいのサイズのデータがサーバに送られたときに起こるエラーです。
Nginx構築時に10MBまでOKとするように、/etc/Nginx/Nginx.conf のhttp内には「 client_max_body_size 10m; 」と指定しているので、2MB程度では起きない認識でした。
エラーが発生したサーバの状況は次のとおりです。
  • OS:CentOS6.5
  • Nginx:1.6.3(リバースプロキシのために利用。)
  • サーバPGM:Node.js

確認したこと

  • NodeJS側の設定もれ
       → bodyParserの設定を確認。{limit: '10mb'} が設定されていることを確認。
  • 設定ファイル修正後のNginxの再起動を忘れ
       → Nginxの再起動(service nginx restart) → 状況は変わらず。

  • エラーコードでググっても、nginx.confのhttpディレクティブにclient_max_body_size を指定すればOKとしか見つけられません。
    そこで、今度は検索語句を「Nginx client_max_body_size doesn't work」に変更し再度ググったところ、それっぽい情報がみつかりました。

    解決策

    Nginxのバージョンによっては、httpディレクティブに記載すると無視されるが、serverディレクティブではとのこと。
    In case anyone else googles this: Nginx 1.1.19 (on Ubuntu 12.04) seems to ignore client_max_body_size in the 'http' directive,
    although it's fine with it in 'server'.
    This seems to have been introduced in an update in the last 6 months or so,
    because for me the same config file on the same server used to work. – Dave Apr 10 '14 at 11:42
    http://stackoverflow.com/questions/2056124/nginx-client-max-body-size-has-no-effect より
    「http内に書いていると無視されるけど、server内に書けば動くよ」的なことを言っています。
    (今回使っているNginxのバージョンとは違うのが気にはなりますが。。。)
    試しに/etc/Nginx/conf.d/hogehoge.conf にclient_max_body_size 10mを追記したのち、Nginxを再起動すれば無事動きました。
    server {
        listen 443;
        server_name hogehoge.com;
        ssl on;
        (省略)
    +   client_max_body_size 10m;
    }
    
    いまいちスッキリしませんが、同じことでハマったときはダメ元で試す価値はありそうです。

    0 件のコメント :

    コメントを投稿