Nginx:413请求实体太大错误和解决方案

时间:2020-01-09 10:42:08  来源:igfitidea点击:

我运行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/