当nginx被用作wordpress等网络应用的后端服务器时(这些应用通常是基于php和mysql数据库的),很多用户会遇到这样的错误:”Request Entity Too Large”。当用户试图上传一个大于配置的最大上传文件大小的文件时,就会发生这个错误。nginx配置中对文件上传大小的默认限制是1MB。
通常情况下,wordpress管理员在第一次尝试安装插件时就会遇到这个错误。例如,我试图在我的本地WP设置上安装 “下载管理器 “wordpress插件,它给了我同样的错误提示。
在nginx中更改上传文件大小限制
在Vim或您选择的任何文本编辑器中打开nginx配置文件。
$ sudo vim /etc/nginx/nginx.conf
添加指令’ client_max_body_size ‘。该指令定义了客户端请求主体的最大大小。默认情况下,此指令的值为1MB。增大此值将使您能够上载随请求发送的较大文件。
在“ http”块下添加以下行:
client_max_body_size 16M;
如果需要的话,你可以设置更大的数字。现在,保存并关闭文件。
$ sudo systemctl restart nginx
现在你的nginx设置将允许你上传一个大小为16MB的文件。让我们再次尝试安装插件。
即使配置了nginx文件大小后,php文件的上传限制仍然阻止上传。让我们看看如何更改它。
更改php上传大小限制
nginx与基于php的Web应用程序结合使用,并且由于php文件上传大小的限制,可能会出现上述问题。
$ sudo vim /etc/php/7.4/fpm/php.ini
或者
$ sudo vim /etc/php.ini
转到变量upload_file_maxsize(即允许上传的文件的最大大小),以及post_maxsize(即发布请求的最大尺寸)。
在上传文件作为发布请求的一部分时,post_maxsize应始终大于upload_file_maxsize。
根据需要更改值。
upload_max_filesize = 16M
post_max_size = 20M
保存并退出文件。
$ sudo systemctl restart php7.4-fpm
$ sudo systemctl restart nginx
您应该将上述命令中的php7.4替换为您的php版本,或者,如果您的服务器中的php服务名称就是php,那就替换为“php ”。
现在允许新指定的文件大小在Web应用程序中上传文件,并且插件成功进行安装。
我们已经看到了如何处理基于nginx的Web应用程序中请求实体太大的问题。请注意,不仅是php,而且如果其他CGI与nginx一起使用,也会出现此问题。在这种情况下,用户可以增加特定CGI在配置文件中的限制。