Dot-Htaccess
Apache 與 HTTP/2 和 per-directory upload_max_filesize
我剛剛在 Debian 9.13 Stretch 上升級了我的 apache2 伺服器以開始使用 HTTP/2。就我而言,這需要從 mod_php 切換到 PHP-FPM。
問題是 PHP-FPM 不遵守 .htaccess 中的某些 apache 指令。例如,我一直
php_value upload_max_filesize 900M
在上傳目錄中的 .htaccess 文件中使用,以增加文件大小和其他相關參數,例如max_execution_time
,post_max_size
比使用全域 php.ini 文件更精細。這些是我已經嘗試過的一些替代方案:
- 使用 PHP
ini_set()
方法:post_max_size
並upload_max_filesize
在我的腳本啟動之前使用。- 使用 .user.ini 覆蓋文件:不太理想,因為它需要在允許上傳內容的每個地方限制 .ini 文件的上傳(我可以使用
<Files>
過濾器禁用讀取訪問,但不能上傳)。- 將 .user.ini 文件重命名
SOME_SCRAMBLED_TEST.ini
並添加 Require all denied 到此類文件:危險,因為在錯誤位置的單個 phpscandir
可能會洩露我的安全配置。- 在 php.ini 腳本中更改它:將其作為最後一個選項;我更喜歡有一個相當大的上傳大小,而不是允許使用者上傳一個搞砸我的伺服器的 .user.ini 文件。
是否有任何其他替代方法可以使用 HTTP/2 並擁有允許上傳的安全伺服器?
經過兩天的工作,我設法讓這個執行。
首先,禁止
.user.ini
在每個目錄上讀取它的危險預設值:# an empty user_ini filename disables its usage. user_ini.filename =
然後,僅對
apache2.conf
位於文件中的所需目錄啟用它/etc/apache2
(並禁用讀取這些目錄)。我們可以通過使用SetEnv
目錄過濾器來做到這一點:<Directory /path/to/upload/directory> SetEnv PHP_VALUE "user_ini.filename = .user.ini" <Files ".user.ini"> Require all denied </Files> </Directory>
然後,在 中,使用您所需的配置
/path/to/upload/directory
創建一個文件:.user.ini
post_max_size = 2048M upload_max_filesize = 2048M max_execution_time = 10 max_input_time = 10
這樣,您可以擁有一個每個目錄
.user.ini
,而無需為整個伺服器啟用它。