如何在AWS Elastic Beanstalk部署期间修改nginx.conf文件

问题描述 投票:0回答:1

我开发了一个 Django 应用程序并将其部署在 Elastic Beanstalk 环境中(使用 nginx 作为代理服务器)。

Linux 平台应该是第一个版本,因为如果我在 EB 管理的 EC2 实例的终端中运行命令:

cat /etc/os-release
,我会得到以下信息:

os-release file of the EC2 instance

此外,我还通过转到 EC2 控制台来双重确认它是 Linux 1 而不是 Linux 2:

Linux platform of the EC2 instance

现在,在澄清我在 EC2 实例中使用的 Linux 平台之后,让我们继续解决问题。

当我访问 EC2 实例并访问文件 etc/nginx/nginx.conf 时,我看到的是:

Content of the nginx.conf file

现在,我想做的是增加 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 服务器的配置以增加以下参数:

  • client_max_body_size 500M;
  • client_header_timeout 900;
  • client_body_timeout 900;
  • 发送超时900;
  • proxy_connect_timeout 900;
  • proxy_read_timeout 900;
  • proxy_send_timeout 900;
django amazon-web-services nginx amazon-ec2 amazon-elastic-beanstalk
1个回答
0
投票

根据我添加的评论,这基本上是因为您在 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
© www.soinside.com 2019 - 2024. All rights reserved.