nginx在文件上传时返回403禁止错误

Riz*_*Riz 5 php codeigniter nginx

我有一个php网站,在codeigniter,它允许用户上传文件.上传适用于大多数文件.但是对于少数文件,nginx会抛出403 Forbidden错误.喜欢

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
Run Code Online (Sandbox Code Playgroud)

这是无法上载的示例.rb文件之一

# Sample code from Programing Ruby, page 58
string = <<END_OF_STRING
    The body of the string
    is the input lines up to
    one ending with the same
    text that followed the '<<'
END_OF_STRING
Run Code Online (Sandbox Code Playgroud)

如果我'<<'从此文件中删除,则上传有效.这种过滤在哪里发生?

我看过nginx错误日志,没有.我见过codeigniter日志,没有.事实上传请求没有到达我的Codeigniter控制器,因此必须在到达nginx之前被阻止?

这是Javascript中的上传代码

function upload(file, params) {
    var formData = new FormData();
    formData.append("Filedata", file);
    $.each(params, function(key, value) {
       formData.append(key, value); 
    });

    var xhr = new XMLHttpRequest();
    var action = "/upload/file";

    xhr.upload.onprogress = function(e){
        // show progress with e.loaded, e.total
    };

    xhr.onerror = function(e) { 
        // handle error
    };

    xhr.open("POST", action, true);
    xhr.send(formData);
}
Run Code Online (Sandbox Code Playgroud)

在服务器端,我现在有简单的代码.

if( !isset($_FILES['Filedata']) || !file_exists($_FILES['Filedata']['tmp_name']) )
{
    die('File not submitted.');
} else { 
    // Save file code is here
}
Run Code Online (Sandbox Code Playgroud)

dem*_*vil 0

尝试在你的 application/config/config.php 中进行更改

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
Run Code Online (Sandbox Code Playgroud)

经过

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-><';
Run Code Online (Sandbox Code Playgroud)

但请注意应用程序的安全性