413请求实体过大 nginx django

43

我正在制作一个练习用的网络服务(客户端艺术画册展示网站)。客户可以将艺术画册图片上传到服务器上。

但当客户上传过多的图片时,我会收到以下错误信息:

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

有人能帮忙吗?


Nginx是独立运行还是有其他平台(如PHP、Python等)作为代理? - solarissmoke
11
你已经在HTTP服务器块中添加了client_max_body_size,但没有添加到HTTPS服务器块中。这很可能是问题所在。 - solarissmoke
5
我解决了我的问题,HTTPS必须有client_max_body_size,谢谢@solarissmoke。 - Jade Han
3个回答

63

你已经解决了HTTP服务器的问题,但是你的HTTP服务器设置为301重定向到HTTPS服务器... 你的HTTPS服务器没有配置client_max_body_size,因此默认为1M,导致出现413(请求实体过大)错误。

为解决此问题,只需在HTTP服务器块HTTPS服务器块中都添加client_max_body_size即可,例如:

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、server、location

设置客户端请求体的最大允许大小,该大小在“Content-Length”请求头字段中指定。如果请求中的大小超过配置值,则向客户端返回413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将size设置为0将禁用检查客户端请求体大小。

了解有关配置HTTPS服务器的更多信息,请阅读:http://nginx.org/en/docs/http/configuring_https_servers.html


2
谢谢,这很有帮助。做出更改后,我运行了sudo service nginx restart sudo service nginx reload - JayB

5

打开Ubuntu终端

使用nano文本编辑器:

$

sudo nano /etc/nginx/nginx.conf

将客户端请求体大小设置为100M

client_max_body_size 100M;

类似:

http {

        ##
        # Basic Settings
        ##
        client_max_body_size 100M;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ## More codes here ...

}

1

我知道这个问题已经有答案了,但是你可以只在http部分下添加一次"client_max_body_size 100M;",而不是在服务器下的代码中多次添加 - 参见下面第2行。

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

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

来源:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接