Ave*_*han 18 apache2 environment-variables
我的 envvar 文件中有以下几行:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Run Code Online (Sandbox Code Playgroud)
我的 apache2.conf 中有以下几行:
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时,apache2 -M我得到了这个:
apache2: bad user name ${APACHE_RUN_USER}
Run Code Online (Sandbox Code Playgroud)
临时修复是将www-data我的 apache2.conf 文件硬编码到其中。有一些猜测在这里,这是因为一些配置脚本并没有取代ENV在我的apache2.conf文件正确瓦尔。不管我如何让 apache2 查阅我的 envvars 文件?
作为另一个数据点,该站点似乎表明 envvars 是在构建时生成的,但在运行时由 apache2ctl 读取,这表明该文件不仅仅是构建过程中遗留的便便。
Ave*_*han 31
在查看@Lekensteyn 给出的答案后,我尝试sudo apache2ctl -M将 apache2.conf 恢复为原始版本。这很有效,所以我深入研究了手册页。这是man apache2不得不说的:
In general, apache2 should not be invoked directly, but rather should
be invoked via /etc/init.d/apache2 or apache2ctl. The default Debian
configuration requires environment variables that are defined in
/etc/apache2/envvars and are not available if apache2 is
started directly. However, apache2ctl can be used to pass arbitrary
arguments to apache2.
Run Code Online (Sandbox Code Playgroud)
所以,这个问题的答案是:你没有apache2正确使用;使用apache2ctl来代替。
感谢@Lekensteyn 为我指明了正确的方向。
从http://httpd.apache.org/docs/2.2/configuring.html:
shell 环境变量的值可以使用语法 ${ENVVAR} 在配置文件行中使用。如果“ENVVAR”是有效环境变量的名称,则该变量的值将替换到配置文件行中的该位置,并且继续处理,就像直接在配置文件中找到该文本一样。(如果未找到 ENVVAR 变量,字符“${ENVVAR}”将保持不变,以供配置文件处理的后续阶段使用。)
因此,确实按预期从环境中检索了变量。现在哪里会发生这种情况?
在/etc/init.d/apache2,APACHE_ENVVARS设置envvars为基于 initscript 路径的文件路径。它通常会导致APACHE_ENVVARS=/etc/apache2/envvars设置。现在,由于此值等于 中设置的默认值apache2ctl,因此不会导出。
来自/usr/sbin/apache2ctl:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS="$APACHE_CONFDIR/envvars"
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
Run Code Online (Sandbox Code Playgroud)
说明:如果APACHE_ENVVARS为空,则使用默认路径/etc/apache2/envvars。如果此文件存在,则“获取”它(在当前环境中从该文件执行命令)。
确保该envvars文件不包含任何语法错误。要执行此类检查,请使用:
sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL
Run Code Online (Sandbox Code Playgroud)
如果有错误,则打印错误。
| 归档时间: |
|
| 查看次数: |
64772 次 |
| 最近记录: |