当用户在我的服务器上上传非常大的文件时,我想生成“请求实体太大”错误。使用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 允许更大的非上传请求