未定义Apache2配置变量


65

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

sudo /etc/init.d/apache2 restart

我收到此消息:

AH00558:apache2:无法使用127.0.1.1可靠地确定服务器的标准域名。全局设置“ ServerName”指令以禁止显示此消息

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

/usr/sbin/apache2 -V

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

[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}

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

Mutex file:${APACHE_LOCK_DIR} default

我看了一下我的/etc/apache2/envvar文件,但不知道该怎么做。

我该怎么办?


您的envvars文件中有什么?
etagenklo

Answers:


60
[Fri Nov 29 17:35:43.942472 2013] [core:warn] [pid 14655] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined

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

如果您使用初始化脚本或apachectl启动apache。

最初的问题是您的计算机没有正确的主机名(fqdn)。

如果无法更改,请将ServerName变量更改/etc/apache2/apache2.conflocalhost或将其更改为首选的FQDN。


1
您对init脚本是正确的。然后,我添加ServerName localhostapache2.conf(因为httpd.conf并非总是在Ubuntu上使用),现在一切正常。您能否在答案中添加详细信息,以便我将其标记为已接受?
Kurt Bourbaki

1
开始apache2ctl我没有工作,我不得不使用的服务sudo service apache2 restart
爱德华·洛佩兹

但是为什么他们首先破坏了apache2命令?
reinierpost

2
此解决方案只能解决,AH00558: apache2: Could not reliably determine the server's fully qualified domain name但不能解决Config variable ${APACHE_LOCK_DIR} is not defined
弗拉基米尔·武卡纳克(Fladimir Vukanac)

对我来说,我也遇到同样的问题。
indianwebdevil

84

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

source /etc/apache2/envvars

接着

/usr/sbin/apache2 -V

您应该得到:

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"

/etc/apache2/envvars不存在
Mark Richman 2014年

6
该文件确实存在于我的ubuntu系统上,但是shell无法将其识别为shell脚本,因此我需要这样做:source / etc / apache2 / envvars; apache2 -V
Ben Crowell 2014年

6
可以使用apachectl -V而不是手动加载环境变量。
Sam Sehnert

如果仍然无法使用,请尝试source /etc/apache2/envvars && sudo -E apache2 -V或登录root并按照上述答案进行操作。向需要使用sudo的普通用户提供apache2 env,将无法使用“ -E”。常规用户权限无法读取证书专用文件夹以及其他问题。您会得到一个错误。您需要sudo -E或完全在root帐户下运行。
bshea

这对于将Apache作为docker front cmd运行非常有用。例如CMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack

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'

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


2

至于其他的说,你运行它直接另一种选择是使用之前加载(源)环境: apache2ctl

sudo apache2ctl -S

抛弃我的主人


2

TL; DR; 您应该使用已有的资源启动apache2:

sudo /etc/init.d/apache2 {start|stop|restart}

详细:

AH00558:apache2:无法使用127.0.1.1可靠地确定服务器的标准域名。全局设置“ ServerName”指令以禁止显示此消息

此消息表示您需要定义服务器名称/域名。对于本地主机/生产测试而言,这样做不是必需的,您不必担心它。

当尝试以另一种方式(仅使用)运行它时apache2,您将收到这些错误消息,原因是之前所说的:在开始使用中的默认脚本时定义了环境变量init.d



-2

您需要将DocumentRoot从更新/var/www/html/var/www

如下编辑文件/etc/apache2/sites-available/000-default.conf

DocumentRoot /var/www

-2

这对我有用

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"

在问题中,出现问题(有关ServerName的错误消息)和调试方法失败(这是由于未获取环境变量引起的)。您的答案是针对调试方法的,而不是问题。
asdmin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.