Apache2 配置变量未定义

Kur*_*aki 78 ubuntu apache-2.2

我在 ubuntu 13.10 上安装了 apache2。如果我尝试使用重新启动它

sudo /etc/init.d/apache2 restart
Run Code Online (Sandbox Code Playgroud)

我收到这条消息:

AH00558: apache2: 无法可靠地确定服务器的完全限定域名,使用 127.0.1.1。全局设置“ServerName”指令以抑制此消息

所以我读到我应该编辑我的httpd.conf文件。但是,由于在/etc/apache2/文件夹中找不到它,我尝试使用以下命令找到它:

/usr/sbin/apache2 -V
Run Code Online (Sandbox Code Playgroud)

但我得到的输出是这样的:

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Fri Nov 29 17:35:43.942560 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Fri Nov 29 17:35:43.942602 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Fri Nov 29 17:35:43.942613 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Fri Nov 29 17:35:43.942627 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.947913 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948051 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Fri Nov 29 17:35:43.948075 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOG_DIR} is not defined

AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
Run Code Online (Sandbox Code Playgroud)

第 74 行/etc/apache2/apache2.conf是这样的:

Mutex file:${APACHE_LOCK_DIR} default
Run Code Online (Sandbox Code Playgroud)

我看了看我的/etc/apache2/envvar文件,但我不知道如何处理它。

我该怎么办?

小智 96

通过像这样运行来获取你的 envvars:

source /etc/apache2/envvars
Run Code Online (Sandbox Code Playgroud)

进而

/usr/sbin/apache2 -V
Run Code Online (Sandbox Code Playgroud)

你应该得到:

el@apollo:/home/el$ apache2 -V
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Apr  3 2014 12:20:28
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"
Run Code Online (Sandbox Code Playgroud)

  • 可以只使用 `apachectl -V` 而不是手动加载环境变量。 (7认同)
  • 该文件确实存在于我的 ubuntu 系统上,但 shell 无法将其识别为 shell 脚本,所以我需要这个: source /etc/apache2/envvars ;apache2 -V (6认同)

ah8*_*h83 68

[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
Run Code Online (Sandbox Code Playgroud)

显示此消息是因为您直接执行了 apache2 二进制文件。在 Ubuntu/Debian 中,apache 配置依赖于仅激活的 envvar 文件。

如果您使用 init 脚本或 apachectl 启动 apache。

您最初的问题是您的机器没有合适的主机名 (fqdn)。

如果您无法更改它,请将ServerName变量更改/etc/apache2/apache2.conflocalhost或您喜欢的 FQDN。

  • 该解决方案仅解决了`AH00558: apache2: 无法可靠地确定服务器的完全限定域名`,但没有解决`配置变量${APACHE_LOCK_DIR} 未定义`。 (3认同)

小智 7

检查您/etc/apache2/envvars的 APACHE_LOCK_DIR。在我的 Ubuntu 12.04 中,这是/var/lock/apache2$SUFFIXSUFFIX 通常为空。

检查目录是否存在且是否可写。

可能是 envvars 文件来源不正确吗?如果你看一看,/etc/init.d/apache2你可以看到它的来源。

我的(默认)/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'
Run Code Online (Sandbox Code Playgroud)

如果没有任何效果,我会尝试重新安装软件包。