将大于10MB的文件发布到AWS Elastic Beanstalk上运行的API时,我遇到了 "413 Request Entity Too Large" 错误 .
我做了很多研究,并且相信我需要为Nginx提供 client_max_body_size ,但是我似乎无法找到有关如何使用Elastic Beanstalk执行此操作的任何文档 . 我的猜测是需要使用ebetension文件进行修改 .
任何人都有关于如何达到极限的想法? 10MB非常弱,必须有一种方法可以手动启动它 .
将大于10MB的文件发布到AWS Elastic Beanstalk上运行的API时,我遇到了 "413 Request Entity Too Large" 错误 .
我做了很多研究,并且相信我需要为Nginx提供 client_max_body_size ,但是我似乎无法找到有关如何使用Elastic Beanstalk执行此操作的任何文档 . 我的猜测是需要使用ebetension文件进行修改 .
任何人都有关于如何达到极限的想法? 10MB非常弱,必须有一种方法可以手动启动它 .
9 回答
您可以采用两种方法:
AWS文档中支持/建议
对于某些应用程序类型,例如Java SE,Go,Node.js,以及Ruby(它没有为Ruby记录,但所有其他Nginx平台似乎都支持这一点),Elasticbeanstalk对如何配置Nginx有内在的理解 .
要专门增加最大上传大小,请在
.ebextensions/nginx/conf.d/proxy.conf
创建一个文件,将最大体型设置为您希望的任何大小:直接创建Nginx配置文件
经过大量研究和数小时的精彩AWS支持团队工作,我在
.ebextensions
内创建了一个配置文件来修改nginx配置 . 这种变化允许更大的桩体尺寸 .在
.ebextensions
目录中,我创建了一个名为01_files.config
的文件,其中包含以下内容:这会在/etc/nginx/conf.d目录中生成proxy.conf文件 . proxy.conf文件只包含一个内线
client_max_body_size 20M;
,它可以解决问题 .请注意,对于某些平台,此文件将在部署期间创建,但随后会在稍后的部署阶段中删除 .
您可以指定Nginx文档中概述的其他指令 .
http://wiki.nginx.org/Configuration
希望这有助于他人!
为了安全起见修改了上面的答案(并且语法错误,请参阅YAML中的两个'owner:'条目),伙计们,请不要在ANYTHING上设置777权限 . 除非你喜欢被黑客攻击,否则将Nginx配置文件的所有者设置为root .
另请参阅below answer以在部署后使nginx获取此更改 .
编辑:在您使用Nick Parsons接受的答案中的说明部署构建之后,您可能需要重新启动nginx服务器以获取更改 .
为此,ssh到实例并做
sudo service nginx reload
要了解有关重新加载的更多信息,请参阅http://nginx.org/en/docs/beginners_guide.html .
在以前版本的Elastic Beanstalk中,我能够添加一个container_command来完成此任务,但现在我发现,就像@cdmckay一样,这会导致部署失败 . 如果重建环境,它将获取client_max_body_size设置以及配置文件中的该指令 .
接受的答案对我不起作用,因为我有一个基于JVM的应用程序,它似乎以不同的方式进行NGINX配置 . 我会看到在部署期间创建了proxy.conf文件,但之后在部署完成之前删除了该文件 . AWS文档说明了如何configure the proxy:
创建一个仅包含该行的
.ebextensions/nginx/conf.d/proxy.conf
文件:client_max_body_size 40M;
从接受的答案开始,您可能需要重新加载nginx配置文件 .
为此,请添加以下命令
这比使用ssh进入你的eb实例并使用命令手动执行更好 .
结合已接受的答案为我解决了同样的问题 . (Rails,Puma,NGINX)
接受的答案对我不起作用,所以我用自己的方式覆盖了nginx配置 .
我在
.ebextensions/nginx/
目录下创建了一个名为nginx.conf
的文件我连接到我的Beanstalk应用程序的运行实例,并使用
cat /etc/nginx/nginx.conf
复制了nginx.conf
文件的内容并从终端复制 .我将内容粘贴到我之前在
.ebextensions/nginx/
中创建的nginx.conf
文件中,并修改了http指令以包含client_max_body_size 50M;
. 我终于使用eb deploy
重新部署了我的应用程序并且它有效 . 您应该在部署期间收到以下消息:这些是我的
.ebextensions/nginx/nginx.conf
文件的内容:我没有重启nginx服务也没有重启环境 .
Note :确保您的.ebextensions是在部署期间创建并上传到Beanstalk的.zip文件的一部分(如果您正在使用它,则不会在
.gitignore
或.ebignore
中忽略) .或者你可以将代理服务器更改为Apache . 为此,请转至“配置并编辑软件配置” . 这里的第一个选项是“代理服务器”,选择“apache” .
对于没有Docker的Golang,我遵循了aws doc中的这些说明:
我在项目的根目录
.ebextensions/nginx/conf.d/
中创建了文件proxy.conf
,里面只有一行:如果仍然无效,请确保部署zip中包含
.ebextensions
文件夹和子文件夹 . 无需手动重启Nginx .For Java Platform
要创建NGINX配置代理文件,您应该添加
.ebextension/nginx/conf.d/proxy.conf
文件内容
client_max_body_size 20M;
在其中 .“proxy.conf”将部署到“/etc/nginx/conf.d/proxy.conf”并由NGINX配置自动包含 .