A variável de configuração do Apache2 não está definida

65

Eu instalei o apache2 no ubuntu 13.10. Se eu tentar reiniciá-lo usando

sudo /etc/init.d/apache2 restart

Recebo esta mensagem:

AH00558: apache2: Não foi possível determinar com segurança o nome de domínio totalmente qualificado do servidor, usando 127.0.1.1. Defina a diretiva 'ServerName' globalmente para suprimir esta mensagem

Então, li que deveria editar meu httpd.confarquivo. Mas, como não consigo encontrá-lo na /etc/apache2/pasta, tentei localizá-lo usando este comando:

/usr/sbin/apache2 -V

Mas a saída que recebo é esta:

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

A linha 74 /etc/apache2/apache2.confé a seguinte:

Mutex file:${APACHE_LOCK_DIR} default

Dei uma olhada no meu /etc/apache2/envvararquivo, mas não sei o que fazer com ele.

O que devo fazer?

Kurt Bourbaki
fonte
O que está no seu arquivo envvars?
etagenklo

Respostas:

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

Esta mensagem é exibida porque você executou diretamente o binário apache2. No Ubuntu / Debian, a configuração do apache depende do arquivo envvar, que é ativado apenas.

Se você iniciar o apache com o script init ou apachectl.

Seu problema original é que você não possui um nome de host adequado (fqdn) para sua máquina.

Se você não pode alterá-lo, altere a ServerNamevariável /etc/apache2/apache2.confpara localhostou seu FQDN preferido.

ah83
fonte
11
Você está certo sobre o script init. Então eu adicionei ServerName localhostpara apache2.conf(porque httpd.confnem sempre é usado no Ubuntu) e agora tudo funciona como deveria. Você poderia adicionar detalhes às suas respostas, para que eu possa sinalizá-lo como aceito?
Kurt Bourbaki
11
começando com apache2ctlnão funcionou para mim, eu tive que usar o serviço :sudo service apache2 restart
Édouard Lopez
Mas por que eles quebraram o apache2comando em primeiro lugar?
Reinierpost
2
Esta solução resolve apenas, AH00558: apache2: Could not reliably determine the server's fully qualified domain namemas não resolve Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac
para mim também vejo o mesmo problema.
indianwebdevil
84

Crie seus envvars executando-o assim:

source /etc/apache2/envvars

e depois

/usr/sbin/apache2 -V

Voce deveria pegar:

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"
nadavkav
fonte
/etc/apache2/envvarsnão existe
Mark Richman
6
O arquivo existe no meu sistema ubuntu, mas o shell não o reconhece como um script de shell, então eu preciso disso: source / etc / apache2 / envvars; apache2 -V
Ben Crowell
6
Só poderia usar em apachectl -Vvez de carregar manualmente as variáveis ​​de ambiente.
Sam Sehnert
Se ainda não estiver funcionando, tente fazer o source /etc/apache2/envvars && sudo -E apache2 -Vlogin roote faça conforme a resposta acima. O fornecimento do ambiente apache2 para um usuário comum que precisa usar o sudo não funcionará sem "-E". As permissões regulares do usuário não podem ler a pasta particular do certificado entre outros problemas. Você receberá um erro. Você precisa sudo -E ou executar completamente na conta root.
bshea
Isso é muito útil para executar o Apache como um cmd em primeiro plano da janela de encaixe. Por exemploCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack
7

Verifique seu /etc/apache2/envvarsAPACHE_LOCK_DIR. No meu Ubuntu 12.04, isto é /var/lock/apache2$SUFFIX, estar SUFFIX normalmente vazio.

Verifique se o diretório existe e é gravável.

Pode ser que o arquivo envvars não seja originado corretamente? Se você der uma olhada, /etc/init.d/apache2pode ver que ele é originário.

Meu (padrão) /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'

Se nada funcionar, eu tentaria reinstalar o (s) pacote (s).

Erny
fonte
2

Como dito anteriormente, você deve carregar (fonte) seu ambiente antes de executá-lo diretamente. Outra opção é usar: apache2ctlpor exemplo

sudo apache2ctl -S

despejar meus anfitriões

amd
fonte
2

TL; DR; Você deve iniciar o apache2 usando o que você já possui:

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

Detalhado:

AH00558: apache2: Não foi possível determinar com segurança o nome de domínio totalmente qualificado do servidor, usando 127.0.1.1. Defina a diretiva 'ServerName' globalmente para suprimir esta mensagem

Esta mensagem significa que você precisa definir o nome do servidor / nome de domínio. Não é essencial fazer isso para um host local / teste de produção, você não precisa se preocupar com isso.

Ao tentar executá-lo de outra maneira, usando apenas apache2, você receberá essas mensagens de erro por causa do que foi dito antes: as variáveis ​​de ambiente são definidas quando você começa a usar o script padrão init.d.

George
fonte
-1

Talvez isso resolva seu problema

sudo bash -c '. /etc/apache2/envvars ; apache2'
Eugen Konkov
fonte
11
leia primeiro, exatamente essa linha já foi fornecida e também foi explicada por que não é uma resposta correta.
asdmin 6/06/16
-2

Você precisa atualizar o DocumentRoot de /var/www/htmlpara/var/www

Edite o arquivo /etc/apache2/sites-available/000-default.conf da seguinte maneira

DocumentRoot /var/www
user219404
fonte
-2

Isso funciona para mim

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
fonte
Na pergunta, houve um problema (uma mensagem de erro sobre ServerName) e um método de depuração com falha (causado por não obter as variáveis ​​de ambiente). Sua resposta aborda o método de depuração e não a pergunta.
asdmin 6/06/16