Nginx:413请求实体太大错误和解决方案
我运行nginx作为基于PHP的Apache + mod_fastcgi服务器的前身。
我的应用程序允许用户上传最大2MB的镜像。
当用户尝试使用nginx反向代理上传大小超过1.5MB的镜像文件时,他们在屏幕上收到以下错误:Nginx 413 Request Entity Too Large
Nginx 413请求实体太大
我该如何解决此问题,并允许使用nginx Web-上载最大2MB的镜像服务器在Unix之类的操作系统上以反向代理或者独立模式工作?
错误:413请求实体太大,表明Web服务器配置为限制大文件大小。
可以使用client_max_body_size指令将Nginx设置为允许客户端请求主体的最大大小。
如果请求的大小超过配置的值,则会向客户端返回413(请求实体太大)错误。
您将看到如下错误:
当我尝试上传文件时413请求实体太大
您需要同时配置nginx和php以允许上传大小。
Nginx配置
要解决此问题,请编辑您的nginx.conf。
打开终端或者使用ssh客户端登录到远程服务器。
执行以下命令以使用文本编辑器(例如vi或者joe或者nano)编辑nginx.conf:
# vi /etc/nginx/nginx.conf
使用nano文本编辑器:
$ sudo nano /etc/nginx/nginx.conf
必须以root身份运行:
# vi /usr/local/nginx/conf/nginx.conf
将以下行添加到" http或者服务器或者位置上下文"中以增加nginx.conf中的大小限制,执行:
# set client body size to 2M # client_max_body_size 2M;
client_max_body_size指令指定客户端请求的最大接受主体大小,由请求标头中的Content-Length行指示。
如果大小大于给定的大小,则客户端会收到错误请求实体太大(413)。
保存并关闭文件。
重新加载Nginx Web服务器,执行:
# /usr/local/nginx/sbin/nginx -s reload
使用nginx本身重新加载它:
# /sbin/nginx -s reload
对于RHEL/CentOS/Debian/Ubuntu Linux,请尝试:
# service nginx reload
如果使用基于systemd的系统,请运行:
$ sudo systemctl reload nginx.service
PHP配置(可选)
您的php安装也限制了上传文件的大小。
编辑php.ini并设置以下指令
;This sets the maximum amount of memory in bytes that a script is allowed to allocate memory_limit = 32M ;The maximum size of an uploaded file. upload_max_filesize = 2M ;Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize post_max_size = 3M
如果您使用的是PHP-FPM,请按以下步骤重新启动它:
$ sudo systemctl restart php-fpm ## 或者 $ sudo systemctl restart php7.0-fpm.service ## 或者 $ sudo /usr/local/etc/rc.d/php-fpm restart
保存并关闭文件。
确保按照设置重新加载/重新启动后端apache或者nginx Web服务器。
有关更多信息,请参见PHP增加上传文件大小限制教程。
还要注意权限错误
除了设置Nginx和PHP外,您还需要查找文件权限错误。
通常登录到您的Web服务器error.log文件。
这是登录到我的lighttpd Web服务器的示例错误:
2016-07-18 07:09:18: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-9UMUXj Permission denied 2016-07-18 07:23:45: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-a4PNg1 Permission denied 2016-07-18 07:25:50: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-xIzdjU Permission denied 2016-07-18 07:27:30: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-2s3I9J Permission denied 2016-07-18 07:29:04: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-9KNsVa Permission denied 2016-07-18 07:30:19: (connections.c.1095) denying upload as opening to temp-file for upload failed: /var/cache/lighttpd/uploads/lighttpd-upload-myoWrl Permission denied
要解决此问题,您需要使用chmod命令或者chown命令设置正确的权限:
$ sudo chown -R lighttpd:lighttpd /var/cache/lighttpd/