我在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}


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

Mutex file:${APACHE_LOCK_DIR} default


我看过我的/etc/apache2/envvar文件,但我没有不知道该怎么办。

我该怎么办?

评论

您的envvars文件中有什么?

#1 楼

[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文件。

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

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

如果不能进行更改,将ServerName中的/etc/apache2/apache2.conf变量更改为localhost或您喜欢的FQDN。

评论


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

–库尔特·布尔巴基(Kurt Bourbaki)
2013年11月30日17:57

以apache2ctl开头对我不起作用,我不得不使用该服务:sudo服务apache2 restart

–爱德华·洛佩兹(ÉdouardLopez)
2014年8月6日下午13:29

但是为什么他们首先要破坏apache2命令呢?

– reinierpost
16年6月16日在19:24

该解决方案仅解决AH00558:apache2:无法可靠地确定服务器的标准域名,但不能解决未定义配置变量$ {APACHE_LOCK_DIR}的问题。

–弗拉基米尔(Vladimir Vukanac)
16年7月13日在20:36



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

– Indianwebdevil
16-10-14在13:09

#2 楼

通过像这样运行它来获取环境变量: br />
source /etc/apache2/envvars


评论


/ etc / apache2 / envvars不存在

–马克·里奇曼
2014年7月10日在18:20

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

– Ben Crowell
2014年7月10日在18:59

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

–山姆·塞纳特(Sam Sehnert)
17年1月24日在22:58

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

– bshea
17年8月11日14:36



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

–阿拉斯泰尔·麦考马克(Alastair McCormack)
17年9月14日在10:49

#3 楼

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

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

可能是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'


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

#4 楼

就像其他人所说的那样,您必须在直接运行环境之前先加载(源)您的环境
另一种方法是使用:
apache2ctl例如

sudo apache2ctl -S

转储我的主机

#5 楼

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

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



详细:




此消息表示您需要定义服务器名称/域名。在本地主机/生产测试中执行此操作不是必需的,您无需担心。

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

#6 楼

也许这可以解决您的问题

sudo bash -c '. /etc/apache2/envvars ; apache2'


评论


首先阅读,正是已经提供了此行,并且还解释了为什么这不是正确答案。

– asdmin
16年6月6日在11:08

#7 楼

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

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

DocumentRoot /var/www


#8 楼

这对我有用

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


评论


在问题中,出现问题(有关ServerName的错误消息)和调试方法失败(这是由于未获取环境变量而引起的)。您的答案是调试方法,而不是问题。

– asdmin
16 Jun 6'在9:28