Apache 带有 HTTP/2 和每个目录 upload_max_filesize

Apache 带有 HTTP/2 和每个目录 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 文件中使用,以比使用全局 php.ini 文件更精细的方式增加文件大小和其他相关参数,例如max_execution_time和。post_max_size

以下是我已经尝试过的一些替代方案:

  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 并拥有允许上传的安全服务器?

答案1

经过两天的工作,我终于完成了这个任务。

首先,禁止.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而无需为整个服务器启用它。

相关内容