Elastic Beanstalk修改环境变量清除WSGIPassAuthorization的解决方法咨询
我之前也碰到过这个糟心的问题——每次在EB控制台改完环境变量,之前通过.ebextensions里的container_commands加的WSGIPassAuthorization On就没了,非得重新部署代码才行,完全失去了环境变量灵活调整的意义。下面几个亲测有效的解决方案,你可以根据自己的情况选:
方案1:用自定义Apache配置片段(最推荐)
Elastic Beanstalk的Apache会自动加载/etc/httpd/conf.d/目录下所有.conf文件,而且这个目录里的自定义文件不会被环境变量更新操作覆盖。步骤很简单:
- 在项目根目录新建路径:
.platform/httpd/conf.d/(如果不存在的话) - 在这个目录里创建一个文件,比如
wsgi_custom.conf,内容直接写:WSGIPassAuthorization On - 把这个文件提交到代码仓库,部署一次之后,不管你怎么修改环境变量,这个配置都会一直生效——EB的配置更新不会碰这个自定义目录里的内容,完美解决问题。
方案2:用部署钩子脚本自动恢复配置
如果不想调整代码结构,或者需要更动态的处理,可以用EB的post-deploy钩子,每次环境更新(包括改环境变量触发的更新)后自动执行脚本添加配置:
- 在项目根目录新建路径:
.platform/hooks/postdeploy/ - 新建一个脚本文件,比如
01_set_wsgipass.sh,内容如下(加了判断避免重复追加):#!/bin/bash # 检查配置是否已存在,不存在则追加 grep -q "WSGIPassAuthorization On" /etc/httpd/conf.d/wsgi.conf || echo "WSGIPassAuthorization On" >> /etc/httpd/conf.d/wsgi.conf - 本地给脚本添加执行权限:
chmod +x .platform/hooks/postdeploy/01_set_wsgipass.sh,然后提交到代码仓库
这样每次环境更新完成后,这个钩子都会自动运行,确保配置不会丢失。
为什么原来的方法不行?
之前用container_commands的问题在于,container_commands只在代码部署阶段执行一次。当你修改环境变量时,EB会触发配置更新流程,这个流程会重新生成默认的wsgi.conf文件,覆盖掉之前通过container_commands追加的内容,而配置更新不会重新执行container_commands,所以配置就丢了。
内容的提问来源于stack exchange,提问作者eagle28
相关产品推荐
相关产品推荐

