我正在做一个实践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
型
有人能帮忙吗?
4条答案
按热度按时间zpjtge221#
您已经修复了HTTP服务器上的问题,但您的HTTP服务器设置为301重定向到HTTPS服务器......您的HTTPS服务器没有配置
client_max_body_size
,因此它默认为1 M并导致此413(请求实体过大)错误。要解决此问题,您只需将
client_max_body_size
添加到BothHTTP服务器块 * 和 * HTTPS服务器块,如下面的示例所示:字符串
有关
client_max_body_size
的更多信息,请访问:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_sizeClient_max_body_size大小;
默认值:client_max_body_size 1 m;
上下文:http、服务器、位置
设置客户端请求正文的最大允许大小,在“Content-Length”请求标头字段中指定。如果请求中的大小超过配置的值,则向客户端返回413(请求实体太大)错误。请注意,浏览器无法正确显示此错误。将size设置为0将禁用对客户端请求正文大小的检查。
在此了解有关配置HTTPS服务器的更多信息:http://nginx.org/en/docs/http/configuring_https_servers.html
jqjz2hbq2#
打开Ubuntu终端
使用nano文本编辑器:
$
字符串
设置客户端主体大小为100M
型
点赞:
型
sxpgvts33#
我知道这个问题已经得到了回答,但与其在服务器下的代码中多次使用“client_max_body_size 100 M;”,不如在http部分下添加一次--参见下面的第2行。
字符串
来源:http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
vptzau2j4#
这真的不相关,但我觉得正确的方法来处理文件验证是我要在这里演示。而不是使用nginx确定文件大小,你实际上可以在你的项目中用下面的过程来做,因为这就是我所做的,在我的项目中一切都很好。这样做的好处是,当用户上传无效文件时,你可以定制你想要发送回用户的消息。或文件的大小大于您在项目配置中指定的大小。
settings.py
字符串
custom_validator.py
型
然后你可以在你的django模型中添加custom_file_validor到file或者image字段
models.py
型
所以上面的代码总是基于你的自定义验证来验证镜像,而不是基于服务器(nginx)验证。
在你的nginx.conf上,只要把它添加到你的http块中
nginx.conf
型
如果您的用户将上传图像或文件在他们的结束,你可以简单地只是使用下面的对您的看法。
views.py
型
所以上面将使用您的自定义验证,而不是服务器(nginx)验证,因为您已经将其设置为0。我希望这对将来看到这一点的人来说足够清楚。这花了我一些时间来弄清楚,但效果很好。