Warum funktioniert mein Apache nach dem Upgrade auf Ubuntu 14.04 nicht?

36
[aman@aman-Inspiron-1440:~$ apache2
[Mon Apr 21 17:36:38.019213 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined
[Mon Apr 21 17:36:38.019345 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Mon Apr 21 17:36:38.019370 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Mon Apr 21 17:36:38.019385 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Mon Apr 21 17:36:38.019414 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.028756 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029032 2014] [core:warn] [pid 4134] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
[Mon Apr 21 17:36:38.029056 2014] [core:warn] [pid 4134] 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}

Dies ist der Inhalt der /etc/apache2/apache2.confDatei.

Amandeep Singh
quelle
3
Es funktioniert nicht, da in Zeile 74 von /etc/apache2/apache2.conf ein Syntaxfehler vorliegt . Bitte laden Sie den Inhalt dieser Datei hoch, um zu sehen, was nicht stimmt.
Lucio
2
Google-Suche seit gestern,
Amandeep Singh
: die Datei auf hochgeladen pastebin.ubuntu.com/7298873
Amandeep Singh
Gefunden: askubuntu.com/questions/448944/…
Amandeep Singh
Muss ich / var / www nach / var / www / html verschieben?
Amandeep Singh

Antworten:

31

Ich hatte dieses Problem: Die Ursache ist in der Datei

/etc/apache2/sites-available/000-default.conf 

wo sich die wurzel geändert hat:

vor dem Upgrade = /var/www
nach dem Upgrade =/var/www/html

Bearbeiten Sie diese Datei, um sie zu ändern

sudo gedit /etc/apache2/sites-available/000-default.conf

Und starte Apache neu

sudo service apache2 restart
TrackGmao
quelle
Da dies ein Problem ist, mit dem der OP konfrontiert sein könnte, ist dies nicht das Problem, das er derzeit hat. In beiden Fällen empfehle ich , wie ich in dieser Antwort erklärt habe , die 000-default.confDatei nicht zu bearbeiten .
Dan
Es funktioniert nach dem Umzug nach / var / www / html
Amandeep Singh
2
+1 Ich konnte das auch nicht herausfinden. Du bist der Mann!
gion_13
2
In meinem Fall habe ich immer noch dieses Problem und der htmlUnterordner ist bereits vorhanden, was in meinem Fall eigentlich irrelevant ist, da alle meine Sites VirtualHosts verwenden
jhbsk
4
Das kann nicht die Antwort sein! Der obige Fehler hat nichts mit der DocumentRootEinstellung zu tun.
Reinier Post
50

Ich hatte dieses Problem, obwohl Apache für mich arbeitete. Ich wollte einfach nur schnell gehen

$ /usr/sbin/apache2 -V

den Wert von SERVER_CONFIG_FILE. Da dies nicht mehr der Weg ist, um Apache2 zu starten, scheitert es an den Fehlern, die das OP bekannt gibt. Eine schnelle und schmutzige Lösung besteht darin, die fehlenden Envvars zuerst festzulegen:

$ source /etc/apache2/envvars
$ /usr/sbin/apache2 -V

Dies setzt die Variable APACHE_LOCK_DIR und alles ist in Ordnung ( -D SERVER_CONFIG_FILE="apache2.conf").

Fahrbahn
quelle
1
Das hat bei mir funktioniert. Das gleiche Problem, Apache lief und lief, aber es apache2 -Sschlug fehl. Alles behoben.
Twisty
Seltsam. Das schien bei mir nicht zu funktionieren. Es ist jedoch sinnvoll, warum dies der Fall sein sollte .
Tyler Crompton
@ TylerCrompton - Wie ist es gescheitert? Was war der Fehler?
Spur
Es machte keinen Unterschied. Ich hatte immer noch das Problem, das OP hatte. apache2Als root zu laufen , behebt das Problem.
Tyler Crompton
4
Eine einfachere Alternative:apache2ctl -V
Reinier Post
14

Symptome und Lösung

In vielen Q & A-Websites oder Foren verwechseln die Menschen Symptome und tatsächliche Ursachen. Ich habe gerade einen Ubuntu-Server von 13.10 auf 14.04.1 aktualisiert und bin auf genau dieselben Symptome gestoßen, die vom OP beschrieben wurden, darunter:
1 - Apache funktioniert anscheinend nicht. 2- Apache-Konfigurationsvariable undefined. 3- der vom OP erwähnte Syntaxfehler.

Das Problem ist, dass nicht alle diese Symptome tatsächlich für das eigentliche Problem relevant sind und nur als Ablenkung für diejenigen dienen, die ihr Bestes geben, um zu helfen.

Verschiedene Root-Probleme können dazu führen, dass Administratoren zu Sites wie dieser mit ungefähr der gleichen Beschreibung kommen: "Ich habe das Betriebssystem aktualisiert und jetzt funktioniert Apache nicht mehr ..."

Eine bestimmte Ursache

Ich hatte genau die gleichen offensichtlichen Symptome wie das OP und fühlte mich von dieser Frage angezogen. Leider war die einzige Antwort, die einen gültigen Hinweis auf die eigentliche Ursache meines Problems enthielt, eine Abwertung (-1), die von user1469291 mit einer Wiederholung von 1 gesendet wurde !! Also suchte ich weiter auf anderen Websites, bis ich eine klare Erklärung des Problems (und damit der Lösung) fand.

Die folgende Lösung könnte das eigentliche Problem des OP nicht lösen, aber ich bin sicher, dass sie anderen helfen wird, die sich aus den gleichen Gründen wie ich für diese Frage interessieren.

/etc/apache2/apache2.conf enthält:

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

Dies bedeutet, dass nur Site-Konfigurationsdateien in / etc / apache2 / sites-enabled / geladen werden, die auf .conf enden. Ältere Symlinks in diesem Verzeichnis werden ignoriert.

Früher war es einfach sites-enabled / *. Aus diesem Grund funktionierten alle meine Konfigurationsdateien für virtuelle Hosts, die ich einfach ww1.example.com, ww2.example.com usw. nannte, nach dem Upgrade plötzlich und zunächst unerklärlicherweise nicht mehr.

Also ändere entweder die obige Direktive und lade Apache neu oder entferne wie ich manuell alle älteren Symlinks in sites-enabled /, benenne alle Dateien in sites-available / um, füge das Suffix .conf hinzu und aktiviere sie dann erneut Website individuell.

Außerdem sind die Standardanweisungen in der apache.conf strenger:

<Directory />
  Options FollowSymLinks
  AllowOverride None
  Require all deny
</Directory>
<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Wenn Sie also Ihre virtuellen Sites in / home / user / irgendwo hosten, müssen Sie die Direktive entsprechend überschreiben.

Augustin
quelle
1
Das ist eine gute Antwort. Am besten Sie verstehen die Änderungen, bevor Sie sich beklagen, dass die Dinge nicht richtig funktionieren.
MikeNGarrett
1
Vielen Dank, ich habe nicht bemerkt, dass das Umbenennen der Datei den Symlink nicht von Sites entfernt, die aktiviert sind.
Benno
Dies bietet keine Lösung.
Reinier Post
6

Wenn Sie sich Ihr Problem genau ansehen, rennen Sie einfach davon apache2. Führen Sie den folgenden Befehl aus, um Apache in Ubuntu zu starten:

sudo apache2ctl start

Die Apache-Konfiguration ist in mehrere Dateien aufgeteilt. Eine dieser Dateien ist eine Umgebungsvariable. Wenn Sie nur ausführen apache2, werden diese Variablen nicht festgelegt.

Das Skript apache2ctl lädt die Variablen (und erledigt bei Bedarf auch andere Aufgaben), bevor Apache mit gestartet wird apache2 -k start.

Dan
quelle
1
#sudo apache2ctl start httpd (pid 1390) läuft bereits
Amandeep Singh
Was ist das Problem, das Sie dann haben?
Dan
@ AmandeepSingh: versuchen Sie es sudo apache2ctl restartstattdessen.
Scheffield
1
@scheffield Versuchte diesen Befehl mehrmals. Das Problem war auf die Änderung des Speicherorts des Stammordners in der neuen Version von Apache von / var / www nach / var / www / html zurückzuführen. Ich habe alle Dateien in einen Unterordner / html verschoben und es hat funktioniert.
Amandeep Singh
4

Bearbeiten Sie die Konfiguration sudo leafpad /etc/apache2/apache2.conf:

# Include the virtual host configurations:

#before upgrade = 
IncludeOptional sites-enabled/*
#after upgrade = 
/IncludeOptional sites-enabled/*.conf

oder Datei entfernen.

Mauro Leites
quelle
+1. Die Antwort wurde abgelehnt, enthielt jedoch die Lösung für das Problem vieler Administratoren, die diese Frage möglicherweise besuchen.
August
2

Augustins Antwort funktionierte für mich, als alle meine virtuellen Hosts nach einem Server-Upgrade von 12.04 LTS auf 14.04 LTS verschwanden. Ich würde es befürworten, wenn ich den Ruf hätte, dies zu tun.

Der folgende Befehl fügt das .confSuffix allen Symlinks hinzu /etc/apache2/sites-enabled, die es noch nicht haben:

sudo find /etc/apache2/sites-enabled -type l ! -name '*.conf' -exec rename 's/$/.conf/' {} \;

Außerdem wurde die Verwendung der Syntax Allow from/ in das Modul mod_authz_host geändert ( hier ist der Link für die 2.2-Dokumentation).Deny fromRequire

Mit dem folgenden Befehl wird die allgemeine Verwendung von Order allow, denygefolgt von Allow from allals Require all grantedstattdessen bearbeitet :

perl -0777 -pi.bak -e 's/Order\s+allow\s*,\s*deny\s*\n\s*Allow\s+from\s+all/Require all granted/sg' /etc/apache2/sites-available/* 
TobyLL
quelle
1

Tatsächlich wechselt die Docroot zwischen präzise und vertrauenswürdig von / var / www nach / var / www / html. Es ist mangelhaft, dass das Skript do-release-upgrade die Docroot nicht rückgängig macht.

A) Entweder ist gültig, aber HTML ist konventioneller. CentOS ist in dieser Hinsicht einflussreich. Die "es funktioniert" Seite ist jetzt auch reifer.

B) Sie müssen / var / www / html nicht verwenden, aber wenn Sie ...

  • Sie müssen Ihren Inhalt oder Alias ​​migrieren (nicht empfohlen).
  • Sie müssen überall dort aktualisieren, wo auf den alten Speicherort verwiesen wird.
  • insbesondere Backup / Restore / Anpassungsskripte.

C) Und es ist möglicherweise einfacher, von Grund auf zu bauen und zu migrieren.

D) Dieses Symptom tritt auf, wenn Sie "sudo apache2 -k graceful" bei Trusty verwenden, ein Upgrade durchführen oder nicht, weil Envvars nicht im Geltungsbereich sind? Verwenden Sie stattdessen "sudo apache2ctl start / stop / restart".

mckenzm
quelle
0

In meinem Fall:

  • Der htmlUnterordner bei /var/www/existierte bereits, aber ich bekam trotzdem den Fehler:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • Ich hatte mich bereits dafür entschieden, meine Websites in meinem Benutzer root zu hosten, z. B. /home/{user}/sites/anstelle der Standardwebsite/var/www/html
  • Ich benutze Apache 2.4.7 (Sie können Ihre Version mit überprüfen apache2 -v)

Wie ich das Problem in fünf einfachen Schritten gelöst habe:

  1. In habe /etc/apache2/apache2.confich nach Zeile 169 folgendes eingefügt:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. Ich habe meine Virtual Host - Konfiguration namens sure website.confan /etc/apache2/sites-availablewurde aus dem Standard kopiert 000-default.conf, und sah aus wie:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. Ich habe meine Site ( sudo a2dissite website && sudo a2ensite website) und meinen Server neu geladen und der anfängliche Fehler war verschwunden. WOOHOO! Es gab jedoch ein neues: "AH00035: Zugriff auf / verweigert (Dateisystempfad '/ home / {user} / sites'), da für eine Komponente des Pfads Suchberechtigungen fehlen". Dies habe ich in Schritt 4 gelöst.

  4. Das neue Problem war auf Berechtigungen zurückzuführen, daher habe ich einfach jedes der Verzeichnisse, die zum websiteOrdner führen, auf festgelegt chmod 755. Jedes einzelne! Der homeOrdner, der Ordner {user}, der Site-Ordner und sogar mein Website-Ordner

  5. Nach dem Auffrischen meines Browsers wird website.devalles gut geladen!

PS Ich hatte bereits website.devin meiner /etc/hostsDatei eingerichtet.

Bonus-Tipp: Um die Berechtigungen eines bestimmten Ordners zu überprüfen, können Sie den Befehl verwenden stat -c %a /path/to/file/or/folder. Um die Berechtigungen für jeden Teil eines Verzeichnisses zu überprüfen, verwenden Sie namei -m /path/to/final/folder.

jhbsk
quelle