我刚刚升级了 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
以下是我已经尝试过的一些替代方案:
- 使用 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 并拥有允许上传的安全服务器?
答案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
而无需为整个服务器启用它。