You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu下Apache报AH00111错误:已定义环境变量未被识别

解决Apache启动报错AH00111: Config variable ${PORTAL_SERVER} is not defined的问题

我之前迁移Apache配置时碰到过几乎一模一样的情况,结合你的描述,核心问题是Apache启动进程的上下文没读取到你在/etc/environment里定义的PORTAL_SERVER变量——虽然你的用户shell能看到这个变量,但Apache启动时的环境和普通用户shell完全是两回事。

下面是我亲测有效的排查和解决步骤:

1. 手动在Apache的envvars文件中强制导出变量

虽然你说新旧机器的/etc/apache2/envvars完全一致,但不妨在新机器的这个文件末尾直接添加一行:

export PORTAL_SERVER="你的服务器地址"

保存后重启Apache:

service apache2 restart

这么做的原因是:Apache启动时会优先加载envvars里的变量,直接在这里定义能确保进程启动时就能拿到值,不受系统环境变量加载顺序的影响。

2. 检查Upstart启动配置(Ubuntu 14.04用的是Upstart)

Ubuntu 14.04的Apache是通过Upstart管理的,默认的/etc/init/apache2.conf不会自动读取/etc/environment里的变量。你可以对比下旧机器的这个文件,大概率是之前修改过的。

解决方法:在新机器的/etc/init/apache2.conf开头添加一行:

env PORTAL_SERVER="你的服务器地址"

或者如果想加载整个/etc/environment的内容,可以在pre-start script块里添加:

. /etc/environment

修改后重启Upstart服务:

initctl reload-configuration
service apache2 restart

3. 排查sudo的环境变量过滤问题

如果你是用sudo操作Apache的,要注意sudo默认会重置大部分环境变量。测试一下:

sudo printenv | grep PORTAL_SERVER

如果没有输出,说明sudo把这个变量过滤掉了。解决方法是编辑sudoers文件:

sudo visudo

添加一行:

Defaults env_keep += "PORTAL_SERVER"

保存后再用sudo操作Apache就能继承这个变量了。

4. 用debug模式启动Apache排查变量加载情况

如果上面的方法都不行,可以用debug模式启动Apache,查看详细的启动日志:

/usr/sbin/apache2ctl -k start -e debug

日志里会显示Apache启动时加载的所有环境变量,你可以直接搜索PORTAL_SERVER,确认它是否被正确加载。

为什么旧机器没问题?大概率是旧机器的Apache启动配置(比如Upstart文件或者sudoers)之前已经做过适配,而你只复制了/etc/apache2文件夹,漏掉了这些系统层面的配置。

内容的提问来源于stack exchange,提问作者AbVog

火山引擎 最新活动