Variabel konfigurasi Apache2 tidak didefinisikan

65

Saya menginstal apache2 di ubuntu 13.10. Jika saya mencoba me-restart menggunakan

sudo /etc/init.d/apache2 restart

Saya menerima pesan ini:

AH00558: apache2: Tidak dapat andal menentukan nama domain yang sepenuhnya memenuhi syarat server, menggunakan 127.0.1.1. Setel arahan 'ServerName' secara global untuk menekan pesan ini

Jadi saya membaca bahwa saya harus mengedit httpd.conffile saya . Tetapi, karena saya tidak dapat menemukannya di /etc/apache2/folder, saya mencoba menemukannya dengan menggunakan perintah ini:

/usr/sbin/apache2 -V

Tapi output yang saya dapatkan adalah ini:

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

Baris 74 /etc/apache2/apache2.confadalah ini:

Mutex file:${APACHE_LOCK_DIR} default

Saya melihat /etc/apache2/envvarfile saya , tetapi saya tidak tahu apa yang harus saya lakukan dengannya.

Apa yang harus saya lakukan?

Kurt Bourbaki
sumber
Apa yang ada di file envvars Anda?
etagenklo

Jawaban:

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

Pesan ini ditampilkan karena Anda langsung menjalankan binary apache2. Di Ubuntu / Debian konfigurasi apache bergantung pada file envvar yang hanya diaktifkan.

Jika Anda memulai apache dengan skrip init atau apachectl.

Masalah awal Anda adalah Anda tidak memiliki nama host yang tepat (fqdn) untuk mesin Anda.

Jika Anda tidak dapat mengubahnya, ubah ServerNamevariabel /etc/apache2/apache2.confmenjadi localhostatau FQDN pilihan Anda.

ah83
sumber
1
Anda benar tentang skrip init. Kemudian saya menambahkan ServerName localhostuntuk apache2.conf(karena httpd.conftidak selalu digunakan pada Ubuntu) dan sekarang semuanya bekerja sebagaimana mestinya. Bisakah Anda menambahkan detail pada jawaban Anda, sehingga saya dapat menandainya sebagai diterima?
Kurt Bourbaki
1
dimulai dengan apache2ctltidak bekerja untuk saya, saya harus menggunakan layanan :sudo service apache2 restart
Édouard Lopez
Tapi mengapa mereka melanggar apache2perintah?
reinierpost
2
Solusi ini hanya menyelesaikan AH00558: apache2: Could not reliably determine the server's fully qualified domain nametetapi tidak menyelesaikannya Config variable ${APACHE_LOCK_DIR} is not defined.
Vladimir Vukanac
bagi saya juga saya melihat masalah yang sama.
indianwebdevil
84

Sumber envvars Anda dengan menjalankannya seperti ini:

source /etc/apache2/envvars

lalu

/usr/sbin/apache2 -V

Anda harus mendapatkan:

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
sumber
/etc/apache2/envvarstidak ada
Mark Richman
6
File memang ada di sistem ubuntu saya, tetapi shell tidak mengenalinya sebagai skrip shell, jadi saya membutuhkan ini: source / etc / apache2 / envvars; apache2 -V
Ben Crowell
6
Bisa saja menggunakan apachectl -Valih-alih memuat dalam variabel lingkungan secara manual.
Sam Sehnert
Jika masih tidak berfungsi, coba source /etc/apache2/envvars && sudo -E apache2 -Vatau masuk sebagai rootdan lakukan per jawaban di atas. Sourcing apache2 env ke pengguna biasa yang kemudian perlu menggunakan sudo tidak akan bekerja tanpa "-E". Izin pengguna reguler tidak dapat membaca folder pribadi sertifikat di antara masalah lain. Anda akan mendapatkan kesalahan. Anda perlu sudo -E atau berjalan di bawah akun root sepenuhnya.
bshea
Ini sangat berguna untuk menjalankan Apache sebagai docker foreground cmd. MisalnyaCMD . /etc/apache2/envvars; /usr/sbin/apache2 -DFOREGROUND
Alastair McCormack
7

Periksa /etc/apache2/envvarsAPACHE_LOCK_DIR untuk Anda . Di Ubuntu 12.04 saya, ini /var/lock/apache2$SUFFIX, sedang SUFFIX biasanya kosong.

Periksa apakah direktori ada dan dapat ditulis.

Mungkinkah file envvars tidak bersumber dengan benar? Jika Anda melihat /etc/init.d/apache2Anda dapat melihat bahwa itu bersumber.

My (default) /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'

Jika tidak ada yang berhasil, saya akan mencoba menginstal ulang paket.

erny
sumber
2

Seperti kata lain, Anda harus memuat (sumber) lingkungan Anda sebelum menjalankannya secara langsung. Opsi lain adalah menggunakan: apache2ctlmisalnya

sudo apache2ctl -S

untuk membuang host saya

amd
sumber
2

TL; DR; Anda harus memulai apache2 menggunakan apa yang sudah Anda miliki:

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

Terperinci:

AH00558: apache2: Tidak dapat andal menentukan nama domain yang sepenuhnya memenuhi syarat server, menggunakan 127.0.1.1. Setel arahan 'ServerName' secara global untuk menekan pesan ini

Pesan ini berarti Anda harus menentukan nama server / nama domain Anda. Ini tidak penting untuk melakukannya untuk localhost / pengujian produksi, Anda tidak perlu khawatir tentang hal itu.

Ketika Anda mencoba menjalankannya dengan cara lain, hanya menggunakan apache2, Anda akan mendapatkan pesan-pesan kesalahan karena apa yang dikatakan sebelumnya: variabel lingkungan didefinisikan ketika Anda mulai menggunakan skrip default di init.d.

George
sumber
-1

Mungkin ini akan menyelesaikan masalah Anda

sudo bash -c '. /etc/apache2/envvars ; apache2'
Eugen Konkov
sumber
1
baca dulu, tepatnya baris ini sudah disediakan, dan itu juga dijelaskan, mengapa itu bukan jawaban yang benar.
asdmin
-2

Anda perlu memperbarui DocumentRoot dari /var/www/htmlke/var/www

Edit file /etc/apache2/sites-available/000-default.conf sebagai berikut

DocumentRoot /var/www
pengguna219404
sumber
-2

Ini bekerja untuk saya

sudo -u root bash -c "source /etc/apache2/envvars; apache2 -V"
Lihnjo
sumber
Dalam pertanyaan, ada masalah (pesan kesalahan tentang ServerName) dan metode debug gagal (yang disebabkan oleh tidak sumber variabel lingkungan). Jawaban Anda membahas metode debug, dan bukan pertanyaan.
asdmin