web-dev-qa-db-ja.com

nginx-client_max_body_sizeは効果がありません

nginxはclient intended to send too large bodyと言い続けます。グーグルとRTMはclient_max_body_sizeを示してくれました。 200mnginx.confvhost confに設定し、Nginxを数回再起動しましたが、エラーメッセージが表示されます。

私は何かを見落としていましたか?バックエンドはphp-fpmです(max_post_sizemax_upload_file_sizeはそれに応じて設定されます)。

179
q_no

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

context: http, server, location
121
nembleton

NGINXの大規模なアップロードは、ホストされているWordPressサイトで正常に機能しています。

私は彼らの提案に少し明確化を加えれば、それが誰かに役立つかもしれないと思った。まず最初に、増加したアップロードディレクティブをすべて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セットアップを管理している場合(私のセットアップは The Perfect Server に従ってCentOS 6.3上にあります)、これらのエントリをいくつかの個別のファイルで管理する必要があります。構成が段階的なセットアップの構成に似ている場合、変更する必要があるNGINX confファイルは次の場所にあります。

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

私のphp.iniファイルは次の場所にありました。

/etc/php.ini

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

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

2016年3月の時点で、https経由でPOST jsonを実行しようとするとこの問題に遭遇しました(pythonリクエストから、それは重要ではありません)。

コツは"client_max_body_size 200M;"少なくとも2つの場所http {}およびserver {}

1。httpディレクトリ

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

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

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

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

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

覚えておく-SSLを使用している場合は、SSLのserverlocationにも上記を設定する必要があります(理想的には2。と同じです)。クライアントがhttpでアップロードしようとすると、httpsに対して301'dになると予想される場合、nginxはhttpサーバーに対して大きすぎるファイルのためにリダイレクトの前に実際に接続をドロップすることがわかったので、 inboth

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

56
J.J

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

  1. php.iniphpinfo();から適切なiniファイルを検索)を更新し、post_max_sizeおよびupload_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. WebサイトのNginX設定を更新し、locationhttp、またはserverコンテキストにclient_max_body_size値を追加します。

    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
20
Qorbani

Location {}ブロック内ではなく、http {}ブロック内にclient_max_body_sizeディレクティブを設定しているかどうかを確認してください。 http {}ブロック内に設定しましたが、動作します

11
rjha94

これが悪い場合は誰かが私を修正しますが、可能な限りすべてをロックダウンし、アップロードのターゲットが1つしかない場合(通常の場合)、その1つのファイルへの変更をターゲットにします。これは、Ubuntu nginx-extrasメインライン1.7+パッケージで機能します。

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

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

nginx -T

これにより、NGINX設定で未解決のエラーが発生します。私の場合、NGINXの設定(証明書の誤ったパス)に修正が必要な他の未解決のSSLエラーがあることに気付く前に、1日413エラーに苦労しました。 「nginx -T」から取得した未解決の問題を修正し、NGINXをリロードし、EUREKAを追加しました!!それはそれを修正しました。

2
P-Didz

私は古いサーバーをミラーリングするために開発サーバーを設定していますが、使用しました The Perfect Server-Ubuntu 14.04(nginx、BIND、MySQL、PHP、Postfix、Dovecot and ISPConfig 3)

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

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

2

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

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

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

2
pangpang

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

0
Adrián Molčan

client_max_body_sizeディレクティブが無視されるのと同じ問題がありました。

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

0
Philippe Gerber