我开发了一个 Django 应用程序并将其部署在 Elastic Beanstalk 环境中(使用 nginx 作为代理服务器)。
Linux 平台应该是第一个版本,因为如果我在 EB 管理的 EC2 实例的终端中运行命令:
cat /etc/os-release
,我会得到以下信息:
此外,我还通过转到 EC2 控制台来双重确认它是 Linux 1 而不是 Linux 2:
现在,在澄清我在 EC2 实例中使用的 Linux 平台之后,让我们继续解决问题。
当我访问 EC2 实例并访问文件 etc/nginx/nginx.conf 时,我看到的是:
现在,我想做的是增加 nginx.conf 文件的“server”部分下的超时设置。 我也想以某种方式增加
client_max_body_size
。
我从一些在线文档中读到,我必须在 Django 项目的根目录中创建一个 .ebextensions 文件夹,其中包含一些 .config 文件以及项目根文件夹中的 buildspec.yml 文件。
这就是我放置文件的位置:
my_project
|- .ebextensions
| |- django.config
| |- instances.config
| |- nginx.config
|- buildspec.yml
|- manage.py
|...
这里是每个文件的内容:
django.config:
container_commands:
01_makemigrations:
command: "source /var/app/venv/*/bin/activate && python3 manage.py makemigrations --noinput"
leader_only: true
02_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate --noinput"
leader_only: true
03_collectstatic:
command: "source /var/app/venv/*/bin/activate && python3 manage.py collectstatic --noinput"
leader_only: true
实例配置:
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: "my_project.wsgi:application"
aws:elbv2:listener:443:
ListenerEnabled: 'true'
Protocol: HTTPS
SSLCertificateArns: arn:aws:acm:<region>:<user_id>:certificate/<certificate_id>
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: staticfiles
aws:elbv2:loadbalancer:
IdleTimeout: 900
nginx.config:
files:
"/etc/nginx/conf.d/nginx.custom.conf":
mode: "644"
owner: "root"
group: "root"
content: |
client_header_timeout 900;
client_body_timeout 900;
send_timeout 900;
proxy_connect_timeout 900;
proxy_read_timeout 900;
proxy_send_timeout 900;
client_max_body_size 500M;
container_commands:
01_restart_nginx:
command: "sudo service nginx reload"
buildspec.yml:
version: 0.2
phases:
install:
runtime-versions:
python: 3.11
commands:
- echo Installing dependencies...
- pip install -r requirements.txt
pre_build:
commands:
- echo Running migrations...
- python manage.py migrate --noinput
build:
commands:
- echo Build completed on `date`
artifacts:
files:
- '**/*'
但是在 Elastic Beanstalk 环境上部署应用程序后,我总是看到默认的 nginx 配置。
所以我的问题是,如何在部署期间更改 nginx 服务器的配置以增加以下参数:
根据我添加的评论,这基本上是因为您在 elasticbeanstalk 环境中使用的 Amazon Linux 版本。
在本例中,您使用的是 Amazon Linux 2 或 Amazon Linux 2023。因此您需要使用 .platform 而不是
.ebextensions
。如果您使用的是 Amazon linux 1,那么 .ebextensions
就可以工作。
如果您使用的是 Amazon Linux 1,则应如下所示。
~/workspace/my-app/.ebextensions/nginx/conf.d/nginx.config
如果您使用的是 Amazon Linux 2 或 Amazon Linux 2023。
~/workspace/my-app/.platform/nginx/conf.d/elasticbeanstalk/nginx.config