如何在 Apache 中使用 max_post_size 和 upload_max_filesize指示?

如何在 Apache 中使用 max_post_size 和 upload_max_filesize指示?

我的用户想要在 PHP Web 应用程序的 CMS 后端上传大型文件 (50-100MB)。我可以在此虚拟主机中全局调整PHP 的upload_max_filesizepost_max_size设置,但我担心这会使拒绝服务攻击变得比必要的更容易。

理论上,这两个设置可以按目录进行调整(在虚拟主机配置文件中或通过 .htaccess 文件),而我只需要管理区域中较大的值。不幸的是,此应用程序在 Web 根目录中只有一个 start.php(单一入口点),所有其他 PHP 文件都从那里包含。这似乎使得按目录进行设置变得不可能。我尝试将 CMS 中使用的路径与 <Location> 匹配,但即使路径正确,php_value 指令也没有任何效果。

<LocationMatch ^/admin>
   php_value  upload_max_filesize  100MB
   php_value  post_max_size        100MB
</LocationMatch>

(mod_rewrite 用于将类似的路径转换为/admin/content/bla/start.php?_p=/admin/content/bla这就是为什么“start.php”文件名没有出现在上面的表达式中。)

有什么方法可以实现这个功能吗?我也愿意接受其他建议;例如,在我们的案例中,基于 IP 的设置可能是可行的。

短暂性脑缺血。

答案1

Apache 似乎无法做到这一点。但是,您可以为 Apache 或 php-fpm 全局设置较高的限制,并使用带有 proxy_pass 或 fastcgi_pass 的 nginx,并在单独的位置使用 nginx client_max_body_size 指令设置每个 URL 的限制:

location / {
  client_max_body_size 1M;
  try_files NOT_EXISTS @proxy;
}
location = /upload.php {
  client_max_body_size 100M;
  try_files NOT_EXISTS @proxy;
}
location @proxy {
  proxy_pass http://localhost:9000/; #Apache listening on port 9000;
  # other proxy directives may be needed, e.g. to set Host headers
}

答案2

首先尝试使用‘/’是否可行:

<LocationMatch ^/>

如果是,请尝试以下其中之一:

<LocationMatch ^/start.php\?_p=/admin>

<LocationMatch ^/start.php?_p=/admin>

<LocationMatch _p=/admin>

另请注意:

<Location> 部分按照它们在配置文件中出现的顺序进行处理,在读取部分和 .htaccess 文件之后,以及在部分之后。

来源:http://httpd.apache.org/docs/2.0/mod/core.html#location

相关内容