AWS ElasticBeanstalk更新,无需修改Django wsgi.conf

时间:2016-08-26 14:12:00

标签: python django apache amazon-web-services mod-wsgi

我使用自动缩放在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文件并删除自定义设置。

我该如何避免?

提前致谢

1 个答案:

答案 0 :(得分:3)

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

(在使用eb ssh

进行“手动”测试后对这些修改进行了测试

在这种情况下,您可以使用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'

wsgi_update.sed文件夹的.ebextensions中创建一个新文件,其中包含以下内容:

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

/<\/Virtual/ a\
WSGIPassAuthorization On

这是一个很小的sed program例如,会在mod_rewrite块中添加apache <VirtualHost>规则,并在结束标记WSGIPassAuthorization之后添加</VirtualHost>行在您的wsgi.conf文件中

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

请参阅Using the AWS Elastic Beanstalk Python Platform了解详情