nginx-client_max_body_sizeは効果がない


205

nginxは言い続けますclient intended to send too large body。グーグルとRTMが私を指摘しましたclient_max_body_size。私はそれを設定する200mにはnginx.conf、同様のようにvhost conf、再起動Nginxは数回、私はまだエラーメッセージが出ています。

見落としましたか?バックエンドはphp-fpmmax_post_sizeそしてmax_upload_file_sizeそれに応じて設定されます)です。


4
SSLが有効になっている場合のclient_max_body_sizeに問題があります。永続的なnginxバージョンで同じ問題が発生しただけで、安全な接続でこのディレクティブが無視されます。まだ解決策を探しています。
Neolo

14
場合、誰がこれをグーグル:(Ubuntuの12.04で)nginxの1.1.19は思わ「サーバ」におけるそれとのそれの罰金が、「HTTP」ディレクティブでclient_max_body_sizeを無視します。これは過去6か月のアップデートで導入されたようです。私にとっては、同じサーバー上の同じ設定ファイルが以前は機能していたためです。
デイブ、

1
@Daveおよび2018年にここに来た場合、これは修正さclient_max_body_sizeれたようです—このhttpセクションでは、nginxバージョン1.14.1で予想される効果があります
DomQ

これにより、コンテンツの長さのヘッダーがチェックされます(少なくとも1.4.6)。そのため、未設定のコンテンツの長さ、またはコンテンツの長さが最大本文サイズよりも小さい値に設定された大きなファイルがアップロードされた場合、HTTP 413
Charles

回答:


131

nginxのドキュメントに従って、client_max_body_size 20m(または必要な任意の値)を次のコンテキストで設定できます。

context: http, server, location

20
それは私にとっては場所では機能せず、サーバーのコンテキストで機能しました。上書きされたかどうかはわかりませんが、言うことはできません。
Dipen、

@ディペン:興味深い。どのバージョンのNGinxをお持ちですか?
nembleton

7
ディペンが言ったことと同じですが、サーバー{}またはロケーション{}ブロックでは取得できません...それはhttp {}コンテキストでのみ機能します。奇数
ロビー

4
http {}セクションで、Debian GNU / Linux 7.1(wheezy)で実行されているnginx / 1.4.1でのみ動作することを確認できます。
Fernando Kosh 2013年

httpまたはのlocation設定時に、設定の確認に失敗します。serverレベルに設定すると機能します。nginx / 1.4.4
AlbertEngelB 2014年

104

NGINXの大規模なアップロードが、ホストされたWordPressサイトで正常に機能するようになりました(nembletonとrjha94からの提案による)

私は彼らの提案に少し説明を加えれば、それは誰かのために役立つかもしれないと思いました。まず、アップロードディレクティブを3つすべての定義ブロック(サーバー、場所、http)に含めていることを確認してください。それぞれに個別の行エントリが必要です。結果は次のようになります(...は定義ブロック内の他の行を反映しています)。

http {
    ...
    client_max_body_size 200M;
}    

(私のISPconfig 3設定では、このブロックは/etc/nginx/nginx.confファイルにあります)

server {
    ...
    client_max_body_size 200M;
}

location / {
    ...
    client_max_body_size 200M;
} 

(私のISPconfig 3設定では、これらのブロックは/etc/nginx/conf.d/default.confファイルにあります)

また、サーバーのphp.iniファイルがこれらのNGINX設定と一致していることを確認してください。私の場合、php.iniのFile_Uploadsセクションの設定を次のように変更しました。

upload_max_filesize = 200M

注:ISPconfig 3セットアップを管理している場合(私のセットアップは、CentOS 6.3で、Perfect Serverに従って)、これらのエントリをいくつかの個別のファイルで管理する必要があります。構成が段階的なセットアップの構成に似ている場合、変更する必要があるNGINX confファイルは次の場所にあります。

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf 

私のphp.iniファイルはここにありました:

/etc/php.ini

nginx.confファイルのhttp {}ブロックを見落とし続けました。どうやら、これを見落とすと、アップロードをデフォルトの1Mに制限する効果がありました。関連する変更を行った後、NGINXおよびPHP FastCGIプロセスマネージャー(PHP-FPM)サービスを必ず再起動する必要もあります。上記の構成では、次のコマンドを使用します。

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

24
/etc/init.d/nginx reload代わりに使用することをお勧めします。これにより、「設定が間違っている場合」などの利点が追加され、NginXは機能を停止しません。
Hengjie 2013

これは私にとって本当に役に立ちましたありがとう!多数の異なるphp.iniファイル設定などでハッキングした後の私の問題を解決しました
Yos

小文字のmがうまくいきました。client_max_body_size 100m;
so_mv 14

13
@Hengjie代わりにnginx -t(構成ファイルの構文をテストする)を使用してからnginx -s reload(実際のリロードを実行する)ことをお勧めします。
Anoyz、2015年

私の気まぐれなボックスに2つのiniファイルがあったことを指摘する必要があります-/etc/php5/cli/php.iniと/etc/php5/fpm/php.iniとSymfonyのロードされた構成はfpmのものでした。したがって、これを編集することを忘れないでください。
Jalal 2016年

65

のとして2016年3月、私は(それが重要ではないことを、Pythonの要求から)HTTPS上でPOST JSONにしようと、この問題に遭遇しました。

トリックは「client_max_body_size 200M;」http {}server {}を置くことです。少なくとも2つの場所

1.httpディレクトリ

  • 通常は /etc/nginx/nginx.conf

2.server vhost内のディレクトリ。

  • apt-get(およびデフォルトでvginを使用してnginxをインストールする他のディストリビューションパッケージマネージャー)を介してインストールしたDebian / Ubuntuユーザーの場合、vhosts /etc/nginx/sites-available/mysite.comを持たないユーザーの場合は、おそらくnginx.confまたはそれと同じディレクトリにあります。

3. 2location /と同じ場所にあるディレクトリ

  • より具体的にすることもできます/が、まったく機能しない場合は、これを適用してから/、その機能をより具体的にすることをお勧めします。

覚えておいてください -あなたはSSLを使用している場合、それはSSLのために上に設定する必要でしょうserverし、locationあまりにも、どこそれは(のように理想的に同じであってもよい2)。クライアントがhttpでアップロードを試み、それらがhttpsに301されることを期待している場合、nginxはファイルがhttpサーバーに対して大きすぎるため、リダイレクトの前に実際に接続をドロップするため、で両方

最近のコメントは、新しいnginxバージョンのSSLでこれに問題があることを示唆していますが、私は1.4.6を使用しており、すべてが良好です:)


3
ドキュメントには、デフォルトが「1m」と記載されており、1メガビットではなく1メガバイトであることが判明しました。まだテストしていませんが、常にメガバイトです。
Thomas

2
@Thomasええ、それは常にMではなくmだったので、自分でテストを実行したので、それは間違いなくメガバイトです。
CppLearner 2016

1
両方ありがとう-ビット/バイトビットを削除しました。
JJ

2
2018年とnginxバージョン1.14.1では、これは修正されたようです— 他の場所に追加する必要なくclient_max_body_sizeセクションで受け入れられhttpます。
DomQ

27

次の変更を適用する必要があります。

  1. 更新php.ini(から正しいiniファイルを検索phpinfo();)しpost_max_sizeupload_max_filesize必要なサイズに増やします。

    sed -i "s/post_max_size =.*/post_max_size = 200M/g" /etc/php5/fpm/php.ini
    sed -i "s/upload_max_filesize =.*/upload_max_filesize = 200M/g" /etc/php5/fpm/php.ini```
    
  2. あなたのウェブサイトおよび追加の更新nginxの設定client_max_body_sizeあなたの値locationhttpまたはserverコンテキスト。

    location / {
        client_max_body_size 200m;
        ...
    }
    
  3. NginXとPHP-FPMを再起動します。

    service nginx restart
    service php5-fpm restart
    

注:php-fpmサービスコマンドで適切に更新されなかった場合、いつか(私の場合はほぼ毎回)プロセスを強制終了する必要があります。これを行うには、プロセスのリストを取得し(ps -elf | grep php-fpm)、1つずつ削除する(kill -9 12345)か、次のコマンドを使用して実行します。

ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9

12

http_}ブロック内でclient_max_body_sizeディレクティブを設定していて、場所{}ブロック内ではないかどうかを確認してください。私はそれをhttp {}ブロック内に設定し、それは動作します


11

これが悪い場合は誰かが私を修正しますが、私はできるだけすべてをロックダウンしたいと思います。アップロードのターゲットが1つしかない場合(通常の場合)、変更をその1つのファイルにターゲットします。これは、Ubuntu nginx-extras mainline 1.7+パッケージで私のために動作します:

location = /upload.php {
    client_max_body_size 102M;
    fastcgi_param PHP_VALUE "upload_max_filesize=102M \n post_max_size=102M";
    (...)
}

私もこのアイデアが好きですが、この方法ではうまくいきません。私ができることは、値を減らし、場所レベルでそれを増やすことではありません。
Geza Turi 2016

4

最近同様の問題があり、そのような問題client_max_body_size 0;を解決できることがわかりました。これにより、client_max_body_sizeが無制限に設定されます。ただし、ベストプラクティスはコードを改善することです。そのため、この制限を増やす必要はありません。


3

他の回答ですでにclient_max_body_sizeとさまざまなPHP設定(upload_max_filesize / post_max_sizeなど)を設定し、結果なしでNGINXとPHPを再起動または再ロードしたと仮定して、これを実行します...

nginx -T

これにより、NGINX構成で未解決のエラーが発生します。私の場合、修正が必要なNGINX構成(証明書の誤ったパス)に他の未解決のSSLエラーがいくつかあることに気づく前に、丸1日の間413エラーと格闘しました。「nginx -T」から得られた未解決の問題を修正したら、NGINX、およびEUREKAを再ロードしました!! それで直った。


3

私は古いライブサーバーをミラーリングするために開発サーバーをセットアップしています。PerfectServer-Ubuntu 14.04(nginx、BIND、MySQL、PHP、Postfix、Dovecot、ISPConfig 3)を使用しました。

同じ問題が発生した後、私はこの投稿に出くわし、何も機能しませんでした。すべての推奨ファイル(nginx.conf、ispconfig.vhost、/ sites-available / defaultなど)の値を変更しました

最後に、client_max_body_size私の中で変更して/etc/nginx/sites-available/apps.vhostnginxを再起動することがトリックをしたものです。うまくいけば、それは他の誰かを助けます。


3

同じ問題に遭遇しましたが、nginxとは何の関係もありませんでした。nodejsをバックエンドサーバーとして使用し、nginxをリバースプロキシとして使用しています。413コードはノードサーバーによってトリガーされます。node use koa本体を解析します。koaはurlencodedの長さを制限します。

formLimit:URLエンコードされた本体の制限。ボディがこの制限より大きくなると、413エラーコードが返されます。デフォルトは56kbです。

formLimitをより大きく設定すると、この問題を解決できます。


0

client_max_body_size指令が無視されたのと同じ問題があった。

私の愚かなエラーは、/etc/nginx/conf.d末尾がでないファイルを中に入れたことでした.conf。Nginxはデフォルトではこれらをロードしません。


-2

Windowsバージョンのnginxを使用している場合は、すべてのnginxプロセスを強制終了してから再起動して確認できます。私の環境で同じ問題が発生しましたが、このソリューションで解決しました。


それが私の問題でした、ありがとう!1つのNginxインスタンスが正しく終了しなかったと思います。Windowsで終了したかどうかを確認することは決して悪いことではありませんtasklist /fi "imagename eq nginx.exe"
Valery Baranov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.