Elastic Beanstalk 中的 Apache 配置语法失败

Posted

技术标签:

【中文标题】Elastic Beanstalk 中的 Apache 配置语法失败【英文标题】:Apache config syntax failing in Elastic Beanstalk 【发布时间】:2017-02-17 06:38:38 【问题描述】:

我在 Elastic Beanstalk (Tomcat) 中部署时遇到问题。

当我部署我的 WAR 时,Apache 配置语法检查完成:

/usr/sbin/apachectl -t -f /var/elasticbeanstalk/staging/httpd/conf/httpd.conf

但它失败了,因为 httpd.conf 没有定义所需的模块:

Syntax error on line 214 of /etc/httpd/conf.d/ssl.conf
Invalid command 'SetEnvIf', perhaps misspelled or defined...

这些模块,在这种情况下,setenvif_module/etc/httpd/conf/httpd.conf中定义,这是我的httpd配置文件。

我不知道/var/elasticbeanstalk/staging/httpd/conf/httpd.conf来自哪里。

知道如何解决这个问题吗?

【问题讨论】:

您可能希望看到forums.aws.amazon.com/thread.jspa?messageID=759487。我正在使用 AWS 解决同样的问题。当您重建环境时,我似乎发现他们的脚本存在问题。一个快速的解决方法可能是包含您自己的 httpd.conf 文件,该文件是他们的副本,但添加到 setenvif.so 模块中。 【参考方案1】:

根据我的调查,这似乎只与使用 Elastic Beanstalk 的初始实例安装/构建有关。有问题的 ssl.conf 文件实际上来自初始 Apache 安装,而不是 Elastic Beanstalk 配置的一部分。

出现问题是因为 AWS 不再将 mod_setenvif.so 作为模块安装在 httpd.conf 中,因此会引发此错误。

为了从我的构建中消除这个持续存在的问题,并且由于我已经自定义了我的 Apache 配置,我从另一个实例复制了一个有效的 AWS httpd.conf 文件并添加了 mod_setenvif.so 模块。使用http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-platform.html#java-tomcat-proxy-apache 处的说明,Elastic Beanstalk 配置脚本使用新的 httpd.conf 文件并且不再抛出错误。

我认为这是一个解决方法,因为主要脚本由 AWS 控制。这可能是脚本中的缺陷,也可能不是。无论如何,我只是想快速找到解决方案。

【讨论】:

你说得对,我花了 5 个小时与 AWS 支持人员一起工作,最后我们在 .ebextensions 中使用我自己的 httpd.conf 解决了这个问题。他不鼓励使用 BeansTalk 处理这种混乱。 所以.so (mod_setenvif.so) 在/etc/httpd/modules 中但没有安装?这非常令人困惑!

以上是关于Elastic Beanstalk 中的 Apache 配置语法失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk 中的 HTTPS 配置

AWS Elastic Beanstalk 中的 Python:私有包依赖项

Elastic Beanstalk 中的 Apache 配置语法失败

VPC 中的 Elastic Beanstalk 环境变量

AWS Elastic Beanstalk 中的 mysqlclient 安装错误

如何在 Elastic Beanstalk 中增加 Docker 中的 ulimit?