Nic*_*ons 105 nginx amazon-ec2 amazon-web-services amazon-elastic-beanstalk
将大于10MB的文件发布到AWS Elastic Beanstalk上运行的API时,我遇到"413 Request Entity Too Large"错误.
我做了很多研究,并且相信我需要为Nginx 启动client_max_body_size,但是我似乎无法找到有关如何使用Elastic Beanstalk执行此操作的任何文档.我的猜测是需要使用ebetension文件进行修改.
任何人都有关于如何达到极限的想法?10MB非常弱,必须有一种方法可以手动启动它.
Nic*_*ons 203
您可以采用两种方法:
对于某些应用程序类型,如Java SE,Go,Node.js和Ruby(它没有为Ruby记录,但所有其他Nginx平台似乎都支持这一点),Elasticbeanstalk对如何配置Nginx有内在的理解.
要扩展Elastic Beanstalk的默认nginx配置,请将.conf配置文件添加到
.ebextensions/nginx/conf.d/应用程序源包中指定的文件夹中.Elastic Beanstalk的nginx配置自动包含此文件夹中的.conf文件.Run Code Online (Sandbox Code Playgroud)~/workspace/my-app/ |-- .ebextensions | `-- nginx | `-- conf.d | `-- myconf.conf `-- web.jar
要专门增加最大上传大小,请在.ebextensions/nginx/conf.d/proxy.conf将最大体型设置为您希望的任何大小时创建一个文件:
client_max_body_size 50M;
Run Code Online (Sandbox Code Playgroud)
经过大量研究和数小时的精彩AWS支持团队工作,我在其中创建了一个配置文件.ebextensions来修改nginx配置.这种变化允许更大的桩体尺寸.
在.ebextensions目录内部,我创建了一个名为01_files.config以下内容的文件:
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
Run Code Online (Sandbox Code Playgroud)
这会在/etc/nginx/conf.d目录中生成proxy.conf文件.proxy.conf文件只包含一个client_max_body_size 20M;执行技巧的内核.
请注意,对于某些平台,此文件将在部署期间创建,但随后会在稍后的部署阶段中删除.
您可以指定Nginx文档中概述的其他指令.
http://wiki.nginx.org/Configuration
希望这有助于他人!
Jij*_*tus 98
我已经尝试了所有.ebextensions添加实现级别配置的方法,但它在最新的 Amazon Linux AMI 中没有帮助我。我做了很多研究,在查看日志后,我可以发现部署任务运行器正在检查一个名为.platformeverytime的文件夹,我想添加一个就像 .ebextensions 一样。以下是我在项目的根文件夹中所做的设置。
在项目文件夹的根级别添加以下文件夹设置。
文件夹结构(.platform/nginx/conf.d/proxy.conf)
.platform/
nginx/
conf.d/
proxy.conf
00_myconf.config
Run Code Online (Sandbox Code Playgroud)
文件 1 的内容 - proxy.conf(内部.platform/nginx/conf.d/文件夹)
client_max_body_size 50M;
Run Code Online (Sandbox Code Playgroud)
文件 2 的内容 - 00_myconf.config(内部.platform/文件夹)
container_commands:
01_reload_nginx:
command: "service nginx reload"
Run Code Online (Sandbox Code Playgroud)
充分注意扩展。第一个文件是.conf,第二个文件是.config。
现在将您的项目重新部署到 Amazon Elastic Beanstalk,您将看到神奇之处。此配置将添加到您的所有 EC2 实例中,作为自动扩展的一部分创建。
详细文件夹结构如下。
小智 32
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
client_max_body_size 20M;
Run Code Online (Sandbox Code Playgroud)
为了安全起见修改了上面的答案(并且语法错误,请参阅YAML中的两个'owner:'条目),伙计们,请不要在ANYTHING上设置777权限.除非你喜欢被黑客攻击,否则将Nginx配置文件的所有者设置为root.
另请参阅以下答案,以便在部署后使nginx获取此更改.
Wil*_*ill 21
编辑:在您使用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设置以及配置文件中的该指令.
小智 15
当您使用 Amazon Linux AMI 使用较旧的 Elastic Beanstalk 环境时,接受的答案是正确的。较新的 Elastic Beanstalk 环境使用 Amazon Linux 2 AMI。
使用 Amazon Linux 2 时,您需要在.platform/目录中指定自定义 Nginx 配置而不是.ebextensions/.
这意味着您需要.platform/nginx/conf.d/proxy.conf使用内容创建文件client_max_body_size 50M;。
另一个答案中.platform/也提到了该目录,但仍然需要重新加载 Ngix 配置,不再需要重新加载 Amazon Linux 2。
您可以在扩展 Elastic Beanstalk Linux 平台文档中找到更多关于此的选项。
从接受的答案开始,您可能需要重新加载nginx配置文件.
为此,请添加以下命令
container_commands:
01_reload_nginx:
command: "service nginx reload"
Run Code Online (Sandbox Code Playgroud)
这比使用ssh进入你的eb实例并使用命令手动执行更好.
结合已接受的答案为我解决了同样的问题.(Rails,Puma,NGINX)
接受的答案对我不起作用,所以我用自己的配置覆盖了 nginx 配置。
我在nginx.conf目录下创建了一个文件.ebextensions/nginx/
我通过 SSH 连接到 Beanstalk 应用程序的一个正在运行的实例,并复制nginx.conf文件的内容,使用cat /etc/nginx/nginx.conf并从终端复制。
我将内容粘贴到nginx.conf我之前在 中创建的文件中.ebextensions/nginx/,并将 http 指令修改为包含client_max_body_size 50M;. 我终于使用重新部署了我的应用程序eb deploy并且它起作用了。您应该在部署期间收到以下消息:
信息:在“.ebextensions/nginx”目录中检测到 Nginx 配置。AWS Elastic Beanstalk 将不再管理此环境的 Nginx 配置。
这些是我的.ebextensions/nginx/nginx.conf文件的内容:
# Elastic Beanstalk Nginx Configuration File
user nginx;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 33193;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include conf.d/*.conf;
map $http_upgrade $connection_upgrade {
default "upgrade";
}
server {
listen 80 default_server;
access_log /var/log/nginx/access.log main;
client_header_timeout 60;
client_body_timeout 60;
keepalive_timeout 60;
gzip off;
gzip_comp_level 4;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# Include the Elastic Beanstalk generated locations
include conf.d/elasticbeanstalk/*.conf;
}
client_max_body_size 50M;
}
Run Code Online (Sandbox Code Playgroud)
我不必重新启动 nginx 服务和环境。
注:请确保您的.ebextensions是创建和部署过程中(它不是在忽视上传到魔豆的.zip文件的一部分,.gitignore或者.ebignore如果你使用它)。
唯一对我有用的是在 .ebextensions 中创建一个“.config”文件,如下所示:
.ebextensions/
proxy.config
Run Code Online (Sandbox Code Playgroud)
在 .config 文件中只有这个内容:
files:
"/etc/nginx/conf.d/proxy.conf":
content: |
client_max_body_size 50M;
Run Code Online (Sandbox Code Playgroud)
不需要子文件夹,不需要重新启动应用程序服务器,注意 .ebextensions 中是“.config”而不是“.conf”文件,并且使用适当的缩进避免在 aws 控制台中出现错误,其余相同与文件名无关,
感谢:http : //kroltech.com/2014/09/14/quick-tip-increase-upload-size-in-aws-elastic-beanstalk-node-js-env/
这是AWS 提供的解决方案,它有效(根据您的需要调整大小)
files:
"/opt/elasticbeanstalk/hooks/appdeploy/enact/12_add_nginx_configuration.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
/bin/echo "client_max_body_size 50M;" > /etc/nginx/conf.d/proxy.conf
/sbin/service nginx reload
Run Code Online (Sandbox Code Playgroud)
对于那些在这里绊倒的人:
我按照Jijo Cleetus 的回答但没有成功,但绝对指出了正确的方向。
但我之所以这么说是因为如果我看到nginx.conf文件,它确实包含include conf.d/*.conf,所以它应该包含代理文件作为提到的答案。
另外,默认服务器监听 80 并标记为default_server,include conf.d/elasticbeanstalk/*.conf
但这个答案确实解决了问题,要点是,.conf文件目录必须.platform/nginx/conf.d/elasticbeanstalk而不是.platform/nginx/conf.d/.
所以:
.platform/nginx/conf.d/elasticbeanstalk/01-request-body.conf
.platform/nginx/conf.d/elasticbeanstalk/02-timeouts.conf
是一些例子
我还通过登录 ec2 实例并运行来确认这一点,nginx -T该命令会打印正在运行的配置以验证是否包含我的自定义配置。
我还看到,默认的应用程序代理配置已命名,00_application.conf并且 nginx 按字母顺序包含文件,因此通过前缀数字来命名。
为通过 CodePipeline 进行部署的人员添加了注释:
确保包含.platform/**/*在buildspec.yaml->artifacts部分中
小智 5
适用于 Amazon Linux 2 的超级简单解决方案:
这是基于AWS NGINX“反向代理配置”文档。
(这适用于在 64 位 Amazon Linux 2/3.2.0 上运行的 Django 3.1.4 + Python 3.7)
| 归档时间: |
|
| 查看次数: |
38403 次 |
| 最近记录: |