我的用户希望在PHP Web应用程序的CMS后端上传大文件(50-100MB)。 我可以在这个虚拟主机上全局调整PHP的upload_max_filesize和post_max_size设置,但是恐怕会使得拒绝服务攻击变得更加容易。
理论上,这两个设置可以根据目录进行调整(无论是在虚拟主机configuration文件,还是通过.htaccess文件),我只需要pipe理区域中的较大值。 不幸的是,这个应用程序在web根目录(单点入口)中只有一个start.php文件,并且其中包含了所有其他的PHP文件。 这似乎使每个目录设置不可能。 我已经尝试将CMS中使用的path与<Location>匹配,但即使使用正确的path,php_value指令也没有任何作用。
<LocationMatch ^/admin> php_value upload_max_filesize 100MB php_value post_max_size 100MB </LocationMatch>
(mod_rewrite用于将/admin/content/bla这样的path转换为/start.php?_p=/admin/content/bla ,这就是为什么“start.php”文件名不出现在上述expression式中的原因。)
有什么办法可以做这个工作吗? 我也打开替代的build议; 例如,在我们的情况下,基于IP的设置可能是可能的。
TIA。
Apache似乎无法做到这一点。 但是,您可以在Apache或php-fpm全局范围内设置最高限制,并使用带有proxy_pass或fastcgi_pass的nginx,并在不同位置使用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, eg to set Host headers }
首先尝试一下,如果它至less使用“/”:
<LocationMatch ^/>
如果是,那么尝试其中一个:
<LocationMatch ^/start.php\?_p=/admin> <LocationMatch ^/start.php?_p=/admin> <LocationMatch _p=/admin>
Pleae还指出:
在读取部分文件和.htaccess文件之后,按照它们在configuration文件中出现的顺序处理<位置>部分。
src: http : //httpd.apache.org/docs/2.0/mod/core.html#location