我有一个 Node.Js 应用程序部署到 Amazon Elastic Beanstalk。上传文件时,出现以下错误:
2019/03/04 17:00:42 [error] 4325#0: *722 client intended to send too large body: 30877841 bytes,
client: my ip,
server: ,
request: "POST /api/files/upload HTTP/1.1",
host: "mydomain.com",
referrer: "mydomain.com/..."
因此我需要client_max_body_size XXM
补充nginx.conf
。
问题
(1)但是由于我使用亚马逊Elastic Beanstalk,我不知道如何做到这一点,而无需连接到每个 EC2 实例并手动更新文件。
(2)我还想仅增加最大尺寸一个网址。
答案1
你可以在 Linux Elastic Beanstalk 实例上自定义软件使用环境配置文件。对于您的具体情况,在本地应用程序主文件夹中,您应该有一个 .ebextensions 目录。在该文件夹中创建一个新文件,我们将其命名为“nginx.config”,并将以下内容放入该文件中:
---
files:
/etc/nginx/conf.d/00_client_max_body_size.conf:
content: "client_max_body_size 10m;"
group: root
mode: "000644"
owner: root
这将指示 Elastic Beanstalk 在 /etc/nginx/conf.d/ 中创建一个名为 00_client_max_body_size.conf 的文件,并在该文件中放置一行内容:
client_max_body_size 10m;
捆绑您的应用程序并将新版本上传到 Elastic Beanstalk。完成此操作后,您会在 Linux 实例上看到以下内容:
$ ls -al /etc/nginx/conf.d
total 20
drwxr-xr-x 2 root root 4096 Mar 8 00:34 .
drwxr-xr-x 4 root root 4096 Feb 15 22:24 ..
-rw-r--r-- 1 root root 25 Mar 8 00:34 00_client_max_body_size.conf
-rw-r--r-- 1 root root 1351 Mar 8 00:35 00_elastic_beanstalk_proxy.conf
-rw-r--r-- 1 root root 283 Dec 13 00:21 virtual.conf
这将包含在nginx.conf
所有 nodejs elastic beanstalk 环境中的主文件中,因为该文件在其 http 块末尾有一行如下:
http {
...
include /etc/nginx/conf.d/*.conf;
# End Modification
}
答案2
我在将 Docker 部署到 Elastic Beanstalk 时遇到了类似的情况。我能够通过在此处添加配置文件来解决这个问题:<app>/.ebextensions/increase_upload_size.config
使用以下代码:
container_commands:
01_reload_nginx:
command: "sudo service nginx reload"
files:
"/etc/nginx/conf.d/proxy.conf" :
mode: "000644"
owner: root
group: root
content: |
client_max_body_size 20M;
当我在 EB 中执行“上传和部署”时,更改就实现了。