413 请求实体太大 nginx django

Posted

技术标签:

【中文标题】413 请求实体太大 nginx django【英文标题】:413 Request Entity Too Large nginx django 【发布时间】:2016-08-27 22:47:11 【问题描述】:

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

但是当客户端上传太多图片时出现以下错误

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 等)? 另外,您已将 client_max_body_size 添加到您的 HTTP 服务器块,但未添加到 HTTPS 服务器块。这可能就是问题所在。 我解决了我的问题,HTTPS 必须有 client_max_body_size 谢谢@solarissmoke 【参考方案1】:

您已经解决了 HTTP 服务器上的问题,但是您的 HTTP 服务器设置为 301 重定向到您的 HTTPS 服务器...您的 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 大小;

默认: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

【讨论】:

【参考方案2】:

打开 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 ...


【讨论】:

以上是关于413 请求实体太大 nginx django的主要内容,如果未能解决你的问题,请参考以下文章

413 请求实体在 Nginx 和 Amazon ElasticBeanstalk 中太大

nginx 413 请求实体在上传时太大[加载超过 1Mb 的文件

Node/Nginx,413请求实体太大,client_max_body_size设置

413 请求实体太大 - 文件上传问题

413请求实体太大

413 Request Entity Too Large(请求实体太大)