我正在寻找解决此问题的方法。我理解该问题中的设置不起作用的原因,但我尝试找到一个可以使其正常工作的解决方案。
这个想法是只允许在某些 url 上上传大文件。我可以location
为此使用一个块,但问题是:我有一个 php 前端控制器模式:
location ~ \.php {
# ...
fastcgi_pass unix:/tmp/php5-fpm.sock;
}
Run Code Online (Sandbox Code Playgroud)
我的总配置如下:
# ...
http {
# ...
client_max_body_size 512K;
server {
server_name example.com;
root /var/www/example.com/public;
location / {
try_files $uri /index.php?$query_string;
}
location /admin/upload {
client_max_body_size 256M;
}
location ~ \.php {
# ...
fastcgi_pass unix:/tmp/php5-fpm.sock;
}
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,只会应用一个位置块。因此,如果我的默认请求大小为 512K,则永远不会应用 256M,因为所有请求都通过 frontcontroller 模式匹配~ \.php
。
在这种情况下我是否正确,如果是这样,可以配置什么使访问者无法上传任何内容,除非他们上传到admin/upload
?
小智 5
如果/admin/upload
路径是虚拟的,则可以使其工作如下:
location / {
try_files $uri /index.php?$args;
}
location /admin/upload {
client_max_body_size 256M;
include inc/php.conf;
rewrite ^(.*)$ /index.php?$args break;
}
location ~ \.php$ {
include inc/php.conf;
}
Run Code Online (Sandbox Code Playgroud)
也不是最漂亮的,但有效。
定义两个php位置?
location ~ ^/admin/upload/.+\.php$
{
client_max_body_size 256M;
include /etc/nginx/conf.d/php-fpm.conf;
}
location ~ \.php
{
include /etc/nginx/conf.d/php-fpm.conf;
}
Run Code Online (Sandbox Code Playgroud)
也许不是最漂亮的...但应该是实用的..
归档时间: |
|
查看次数: |
8276 次 |
最近记录: |