server-memo.net

nginxで413 Request Entity Too Large

      2016/01/22

nginxで413 Request Entity Too Largeが表示される場合の対応方法

環境

CentOS 6.4

nginxで413Request Entity Too Large

wordpressにスクリーンショットの画像をupload使用とすると、エラーでアップロードできません。

ブラウザ上ではHTTPエラーと表示されています。

スクリーンショット 2014-11-17 20.05.41

うまくいかない場合は、ブラウザーアップローダーを使用してと表示されているので、素直に従ってブラウザーアップローダーで画像をアップロードしてみます。

ブラウザーアップローダーを使用すると、nginxが「413 Request Entity Too Large」のエラーを吐いているのがわかりました。

スクリーンショット 2014-11-17 19.09.59

エラーメッセージの内容から、リクエストしたEntityが大きすぎる事が原因であることがわかります。

nginxの公式ページで調べてみると、「client_max_body_size」の項目を設定することで、より大きなファイルに対応させることが出来る事がわかりましたので、早速設定します。

http://wiki.nginx.org/HttpCoreModule#client_max_body_size

設定書式等

公式のサイトでは、下記のような説明が記述されています。

Syntax:    client_max_body_size size
Default:   client_max_body_size 1m;
Context:  http,server,location

上記のことから、client_max_body_sizeの初期値は1mで、 http,server,locationの部分に設定できることがわかります。

設定ファイル更新

nginxの設定ファイルである、nginx.confの設定をします。まずは、念のためバックアップを取ってから作業をします。

# cp -p /etc/nginx/nginx.conf /etc/nginx/nginx.conf_yyyymmdd
# vi /etc/nginx/nginx.conf
nginx.conf 設定例

実際には赤字で記述したような箇所に設定することができます。http部分であればhttpモジュール全体に、serverであれば設定されているサーバ事に、location部分であればその部分URIのみに設定を反映させることができます。

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    client_max_body_size 10M;

upstream server-memo {
	server 127.0.0.1:10080;
}

server {
	listen	80;
	server_name www.server-memo.net;
        client_max_body_size 500M;
	location / {
		proxy_pass http://server-memo/;
		client_max_body_size 1G;
  	     }
      }
}

※私の場合は、server部分にclient_max_body_size 10Mと設定しました。

設定反映

nginx.confの設定完了後、nginxをreloadさせることで設定を反映さえることができます。

# service nginx reload

設定を追加したあとに、エラーを起こしていたファイルを再度アップロードしてみたところ、無事アップロードすることが出来るようになりました!

 - nginx