我使用自动缩放在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文件并删除自定义设置。
我该如何避免?
提前致谢
答案 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
文件中
它将在每个应用程序部署上执行到您环境中通过自动缩放创建的任何现有或新实例。