不修改 Django 的 AWS ElasticBeanstalk 更新 wsgi.conf

AWS ElasticBeanstalk update without modifing Django wsgi.conf

我使用自动缩放在 AWS EB 中部署了一个 django 应用程序。 此应用程序使用带有令牌身份验证的 Django Rest。 为了让它工作,我必须在 etc/httpd/conf.d/wsgi.conf 文件中添加以下行:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

WSGIPassAuthorization On

问题是:当 AWS 进行自动缩放或 ElasticBeanstalk 环境升级时,wsgi.conf 文件被更新并且自定义设置被删除。

我怎样才能避免这种情况?

提前致谢

为避免 ElasticBeanstalk 在自动缩放或重新初始化环境中的任何实例时擦除您的自定义设置,您应该使用 .ebextensions 脚本对 ec2 实例的 config 文件进行任何持久修改。

(在使用 eb ssh 测试这些修改后 'manually')

在这种情况下,您可以使用 sed command 来编辑您的 wsgi.conf 文件。

将以下 container_command 添加到您的 yaml Elastic Beanstalk 配置文件中(即:.ebextension/yourapp.config):

03_wsgipass: command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'

它应该看起来像这样:

container_commands:
  01_migrate:
    command: "django-admin.py migrate --noinput"
    leader_only: true
  02_collectstatic:
    command: "django-admin.py collectstatic --noinput"
  03_wsgipass:
    command: 'sed -i -f .ebextensions/wsgi_update.sed ../wsgi.conf'

.ebextensions 文件夹的 wsgi_update.sed 中创建一个新文件,内容如下:

/<Virtual/ a\
RewriteEngine On\
RewriteCond %{HTTP:Authorization} ^(.*)\
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

/<\/Virtual/ a\
WSGIPassAuthorization On

这是一个小的 sed program 示例,它将在您的 <VirtualHost> 块中添加 apache mod_rewrite 规则,并在结束标记 [=24] 之后添加 WSGIPassAuthorization 行=] 在您的 wsgi.conf 文件中

它将在每个应用程序部署到您的环境中通过自动缩放创建的任何现有或新实例时执行。

有关详细信息,请参阅 Using the AWS Elastic Beanstalk Python Platform

这是行不通的我已经尝试了所有选项,但似乎对 ebs 不起作用。我真的不知道还能尝试什么。