Apache-2.2

如何在 Apache <Location> 指令中使用 max_post_size 和 upload_max_filesize?

  • September 30, 2015

我的使用者想要在 PHP Web 應用程序的 CMS 後端上傳大文件 (50-100MB)。我可以在這個虛擬主機中全域調整 PHP 的upload_max_filesizepost_max_size設置,但恐怕這會使拒絕服務攻擊變得比必要的更容易。

理論上,這兩個設置可以按目錄調整(在虛擬主機配置文件中,或通過 .htaccess 文件),我只需要在管理區域中設置較大的值。不幸的是,這個應用程序在 web 根目錄中只有一個 start.php(單一入口點),並且所有其他 PHP 文件都從那裡包含在內。這似乎使每個目錄的設置變得不可能。我嘗試將 CMS 中使用的路徑與 <Location> 匹配,但即使路徑正確,php_value 指令也沒有任何效果。

&lt;LocationMatch ^/admin&gt;
  php_value  upload_max_filesize  100MB
  php_value  post_max_size        100MB
&lt;/LocationMatch&gt;

(mod_rewrite 用於將路徑轉換/admin/content/bla/start.php?_p=/admin/content/bla,這就是為什麼上面的表達式中沒有出現“start.php”文件名的原因。)

有什麼辦法可以使這項工作?我也願意接受其他建議;例如,在我們的案例中,基於 IP 的設置可能是可能的。

射線。

Apache 似乎無法做到這一點。但是,您可以為 Apache 或 php-fpm 全域設置上限,並將 nginx 與 proxy_pass 或 fastcgi_pass 一起使用,並在不同的位置使用 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
}

引用自:https://serverfault.com/questions/158947