web-dev-qa-db-ja.com

413リクエストエンティティが大きすぎますnginx django

練習用のWebサービス(クライアントのアートブック表示Webサイト)を作成しています。クライアントはアートブックの画像をサーバーにアップロードできます。

しかし、クライアントがアップロードする画像が多すぎると、次のエラーが発生します

413 Request Entity Too Large

Nginx.confにclient_max_body_size 100M;を追加してみました

#user  nobody;
#Defines which Linux system user will own and run the Nginx server

worker_processes  1;

#error_log  logs/error.log; #error_log  logs/error.log  notice;
#Specifies the file where server logs.

#pid        logs/nginx.pid;
#nginx will write its master process ID(PID).

events {
    worker_connections  1024;
}


http {
    include       mime.types;

    default_type  application/octet-stream;

    #access_log  logs/access.log  main;

    sendfile        on;

    server {
        listen       80;

        server_name  xxxx.net;
        client_max_body_size 100M;
        keepalive_timeout 5;

        return 301 https://$server_name$request_uri;

    }

    # HTTPS server
    #
    server {
        listen       443 default_server ssl;
        server_name  xxx.net;

        ssl_certificate      /etc/letsencrypt/live/xxxx.net/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/xxxx.net/privkey.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;


        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_Host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://127.0.0.1:8000;
            proxy_redirect off;
        }
    }
}

そして試した:

Sudo service nginx restart
Sudo service nginx reload

再試行します

runserver 

しかし、それでも取得します

413 Request Entity Too Large

誰か助けてもらえますか?

17
Jade Han

HTTPサーバーの問題を修正しましたが、HTTPサーバーはHTTPSサーバーへの301リダイレクトに設定されています... HTTPSサーバーにはclient_max_body_sizeが構成されていないため、デフォルトで1Mになり、これが発生します- 413(リクエストエンティティが大きすぎます)エラー。

この問題を修正するには、client_max_body_size[〜#〜] both [〜#〜] HTTPサーバーブロックとに追加するだけです。 以下の例に示すように、HTTPSサーバーブロック:

http {
    ...
    ######################
    # HTTP server
    ######################
    server {
        ...
        listen       80;
        server_name  xxxx.net;
        client_max_body_size 100M;
        ...
    }

    ######################
    # HTTPS server
    ######################
    server {
        ...
        listen       443 default_server ssl;
        server_name  xxxx.net;
        client_max_body_size 100M;
        ...
    }
}

client_max_body_sizeの詳細はこちら: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

構文:client_max_body_size size;

デフォルト:client_max_body_size 1m;

コンテキスト:http、サーバー、場所

「Content-Length」リクエストヘッダーフィールドで指定された、クライアントリクエストボディの最大許容サイズを設定します。リクエストのサイズが設定された値を超えると、413(Request Entity Too Large)エラーがクライアントに返されます。ブラウザはこのエラーを正しく表示できないことに注意してください。サイズを0に設定すると、クライアントリクエストの本文サイズのチェックが無効になります。

HTTPSサーバーの構成について詳しくは、こちらをご覧ください: http://nginx.org/en/docs/http/configuring_https_servers.html

7
Joshua Craven