4mb图像文件上传在上传到生产服务器时出现HTTP 413错误

问题描述:

我试图从客户机上传图像到服务器进行处理,然后上传到S3 AWS存储桶。它在本地服务器上运行良好,但不在活动服务器上运行。4mb图像文件上传在上传到生产服务器时出现HTTP 413错误

XMLHttpRequest cannot load https://api.parthenon-click.com/img_upload/cover. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.parthenon-click.com' is therefore not allowed access. The response had HTTP status code 413. 

我使用PHP ElasticBeanstalk V5.4客户端服务器和节点V7.0与后端快递V4服务器。客户端是简单的html/css/jQuery。我抓住从用户库中的照片,并通过它来使用后端:

$.ajax({ 
     url: api_url, 
     type: 'POST', 
     data: form, 
     processData: false, 
     contentType: false, 
     success: function(data){ 
      console.log('upload successful!'); 
     }, 
     error: function(err){ 
      console.log(err); 
     } 
}); 

这工作只要文件小于1MB保存图像。虽然我仍然收到504 HTTP错误。只要我运行本地服务器,无论文件大小如何,它都能正常工作。

,所以我尝试正在增加body-parserhtaccessmulter限制:

身体的解析器:

app.use(bodyParser.json({limit: '50mb'})); 
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit:50000 })); 
app.use(bodyParser.raw({ limit: '10mb'})); 

Multer:

var upload = multer({ 
    storage: storage, 
    limits: { 
     fileSize: 10000000 
    } 
}) 

的.htaccess:

php_value upload_max_filesize 30M 

我的头文件适合其他类型的api请求。我将它们设置为:

router.use(function(req, res, next) { 
    // do logging 
     //set CORS policy to 'allow' 
    res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET"); 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 

    next(); 
}); 

最后但并非最不重要的是,在所有域版本上都启用了SSL。

这一切都没有解决问题。我在这里错过了什么?

+0

在Node和PHP之前使用Apache或Nginx吗? – CreasolDev

+0

@CreasolDev Nginx –

+0

在这种情况下,我可能已经得到了你的答案,给我一秒钟。 – CreasolDev

在Node之前使用像Nginx这样的网络服务器时,所有请求都会经过Nginx,并且在达到Node.js之前由nginx验证。

Nginx的默认配置文件位于/etc/nginx/nginx.conf。该文件对所有请求都有很多默认属性,其中之一是client_max_body_size。该属性的默认值是1m,就像您的1MB文件一样。

这也是你的.htaccess文件没有做任何事情(Node.js的本身做任何事都要有.htaccess,除非你想让它)

您可以手动将其更改为一个不同的号码和”的原因将成为nginx新的最大主体大小(在重新加载nginx之后),但是如果您想要“完全”控制并让应用程序检查主体大小,则还可以将其设置为0,以禁用检查客户机请求主体大小。
Setting size to 0 disables checking of client request body size.

请注意,更改该属性也会更改PHP请求的最大上载大小。

+0

感谢Creasol。这将是几天才能回到这个问题。尽管如此,这将是我的选择。 –

+0

好的!让我知道它是否工作,我不介意我的答案左边的绿色复选标记;)另外,我在我自己的一个项目中遇到了(至少我认为)完全相同的问题,这让我抓了我的以同样的方式。 – CreasolDev

+1

工作。什么兔子洞。对于需要这个的下一个人,这就是你如何设置配置文件你的实例... http://stackoverflow.com/questions/18908426/increasing-client-max-body-size-in-nginx-conf-在-AWS-弹性魔豆/ 18951706#18951706 –