Apache-2.2
如何在 Apache <Location> 指令中使用 max_post_size 和 upload_max_filesize?
我的使用者想要在 PHP Web 應用程序的 CMS 後端上傳大文件 (50-100MB)。我可以在這個虛擬主機中全域調整 PHP 的
upload_max_filesize
和post_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 的設置可能是可能的。
射線。
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 }