Dot-Htaccess

Apache 與 HTTP/2 和 per-directory upload_max_filesize

  • July 9, 2021

我剛剛在 Debian 9.13 Stretch 上升級了我的 apache2 伺服器以開始使用 HTTP/2。就我而言,這需要從 mod_php 切換到 PHP-FPM。

問題是 PHP-FPM 不遵守 .htaccess 中的某些 apache 指令。例如,我一直php_value upload_max_filesize 900M在上傳目錄中的 .htaccess 文件中使用,以增加文件大小和其他相關參數,例如max_execution_timepost_max_size比使用全域 php.ini 文件更精細。

這些是我已經嘗試過的一些替代方案:

  1. 使用 PHPini_set()方法:post_max_sizeupload_max_filesize在我的腳本啟動之前使用。
  2. 使用 .user.ini 覆蓋文件:不太理想,因為它需要在允許上傳內容的每個地方限制 .ini 文件的上傳(我可以使用<Files>過濾器禁用讀取訪問,但不能上傳)。
  3. 將 .user.ini 文件重命名SOME_SCRAMBLED_TEST.ini並添加 Require all denied 到此類文件:危險,因為在錯誤位置的單個 phpscandir可能會洩露我的安全配置。
  4. 在 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,而無需為整個伺服器啟用它。

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