如何使用 LimitRequestBody 和 proxypass 限制上传文件的大小?

如何使用 LimitRequestBody 和 proxypass 限制上传文件的大小?

当用户在我的服务器上上传非常大的文件时,我想生成“请求实体太大”错误。使用php 修改版,这很简单:

<FilesMatch "^(upload|replace)$">
 LimitRequestBody 3000000
</FilesMatch>

php-fpm, 我试过”

<LocationMatch "^/(upload|replace)$">
 LimitRequestBody 3000000
</LocationMatch>

但是,它不起作用。接下来,我尝试在中设置代理环境变量VirtualHost

SetEnv proxy-sendchunked
ProxyPassMatch ^/([^\.]+)$ fcgi://127.0.0.1:9000${docroot}/$1

它也不起作用。有人能告诉我如何实现吗?谢谢。

答案1

根据@rjewell的建议,您需要配置mod_security在您的 apache 代理上。将以下指令添加到应受保护的 VirtualHost 中:

# Enable request processing
SecRuleEngine On
# enable inspection of request bodies
SecRequestBodyAccess On
# set actual request size limit
SecRequestBodyLimit 3000000
# actually generate an HTTP error, instead of truncating
SecRequestBodyLimitAction Reject
# Avoid big request bodies that do not try to upload files
SecRequestBodyNoFilesLimit 1048576
# tune memory usage
SecRequestBodyInMemoryLimit 131072

您可以在以下位置阅读有关指令的更多信息mod_security 的参考

根据您的使用情况,请考虑以下几点:

  • 通过更改 InMemoryLimit 为每个上传请求分配更多或更少的内存
  • 使用 NoFilesLimit 允许更大的非上传请求

相关内容