Perché il mio Apache non funziona dopo l'aggiornamento a Ubuntu 14.04?


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}

Questo è il contenuto del /etc/apache2/apache2.conffile.


3
Non funziona perché si verifica un errore di sintassi nella riga 74 di /etc/apache2/apache2.conf . Per favore, carica il contenuto di quel file per vedere cosa c'è che non va.
Lucio,

2
Cercando su Google da ieri,
Amandeep Singh,



Devo spostare / var / www in / var / www / html ??
Amandeep Singh,

Risposte:


31

Ho avuto questo problema: la causa è nel file

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

dove la radice è cambiata:

prima dell'aggiornamento = /var/www
dopo l'aggiornamento =/var/www/html

Quindi modifica per modificare questo file

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

E riavvia apache

sudo service apache2 restart

Dato che questo è un problema che l'OP potrebbe affrontare, questo non è il problema che sta riscontrando in questo momento. In entrambi i casi, come ho spiegato in questa risposta , non consiglio di modificare il 000-default.conffile.
Dan,


2
+1 Non sono riuscito a capirlo neanche io. Tu sei l'uomo!
gion_13,

2
Nel mio caso sto ancora riscontrando questo problema e la htmlsottocartella esiste già, il che nel mio caso è in realtà irrilevante poiché tutti i miei siti utilizzano VirtualHosts
jhbsk,

4
Questa non può essere la risposta! L'errore sopra riportato non è correlato DocumentRootall'impostazione.
Reinier Post,

50

Ho avuto questo problema anche se Apache funzionava per me. Volevo semplicemente fare una rapida

$ /usr/sbin/apache2 -V

per trovare il valore di SERVER_CONFIG_FILE. Poiché non è più il modo di avviare apache2, non riesce più con gli errori posti dall'OP. Una soluzione rapida e sporca è semplicemente impostare gli envvar che mancano per primi:

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

Questo imposta la variabile APACHE_LOCK_DIR e tutto va bene ( -D SERVER_CONFIG_FILE="apache2.conf").


1
Questo ha funzionato per me. Lo stesso problema, Apache era in esecuzione e funzionante, ma l'esecuzione apache2 -Snon è riuscita. Tutto risolto.
Twisty,

Strano. Questo non sembra funzionare per me. Ha senso il motivo per cui dovrebbe però.
Tyler Crompton,

@TylerCrompton - Come è fallito? Qual è stato l'errore?
corsia

Non ha fatto alcuna differenza. Stavo ancora riscontrando il problema che OP aveva. L'esecuzione apache2come root ha risolto il problema.
Tyler Crompton,

4
Un'alternativa più semplice:apache2ctl -V
Reinier Post

14

Sintomi e soluzione

In molti siti Web o forum di domande e risposte, le persone confondono i sintomi e le cause reali. Ho appena aggiornato un server Ubuntu dal 13.10 al 14.04.1 e ho riscontrato gli stessi identici sintomi descritti dall'OP, tra cui:
1- Apache apparentemente non funzionante. 2- variabile di configurazione apache non definita. 3- l'errore di sintassi menzionato dall'OP.

Il problema è che non tutti questi sintomi sono in realtà germani al problema reale e servono solo come distrazione per coloro che fanno del loro meglio per aiutare.

Diversi problemi alla radice possono far sì che gli amministratori arrivino a siti come questo con approssimativamente la stessa descrizione: "Ho aggiornato il sistema operativo e ora apache non funziona ..."

Una causa specifica

Avendo esattamente gli stessi sintomi apparenti dell'OP, ero attratto da questa domanda. Sfortunatamente, l'unica risposta che conteneva un valido suggerimento per la vera causa principale del mio problema è stata il downgrade (-1), pubblicato da user1469291 con un rappresentante di 1 !! Quindi ho cercato altri siti Web fino a quando non ho trovato una chiara spiegazione del problema (e quindi della soluzione).

La soluzione che segue potrebbe non risolvere il vero problema del PO, ma sono sicuro che aiuterà gli altri che potrebbero essere attratti da questa domanda per gli stessi motivi di me.

/etc/apache2/apache2.conf contiene:

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

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

il che significa che verranno caricati solo i file di configurazione del sito in / etc / apache2 / siti abilitati / che terminano con .conf. Il vecchio symlink in quella directory verrà ignorato.

Prima era semplicemente abilitato per i siti / *. Ecco perché tutti i miei file di configurazione dell'host virtuale che ho semplicemente chiamato ww1.example.com, ww2.example.com, ecc., Funzionavano ma all'improvviso e inizialmente hanno inspiegabilmente smesso di funzionare dopo l'aggiornamento.

Quindi, modifica la direttiva sopra e ricarica apache o, come ho fatto io, rimuovi manualmente tutti i vecchi link simbolici nei siti abilitati /, rinomina tutti i file nei siti disponibili / per aggiungere il suffisso .conf e quindi riattiva ciascuno sito individualmente.

Inoltre, la direttiva predefinita in apache.conf è più rigorosa:

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

Quindi, se si ospitano i siti virtuali in / home / user / da qualche parte, assicurarsi di ignorare la direttiva in modo appropriato.


1
Questa è una buona risposta Meglio capire i cambiamenti prima di precipitarsi e lamentarsi che le cose non funzionano bene.
MikeNGarrett,

1
Grazie per questo, non mi sono reso conto che la ridenominazione del file non ha rimosso il link simbolico dai siti abilitati.
Benno,

Questo non fornisce una soluzione.
Reinier Post,

6

Osservando attentamente il tuo problema, stai solo correndo apache2. Per avviare apache in Ubuntu, eseguire il comando seguente:

sudo apache2ctl start

La configurazione di Apache è suddivisa in più file, uno di questi file sono variabili di ambiente. Quando si esegue solo apache2, queste variabili non sono impostate.

Lo script apache2ctl caricherà le variabili (e farà anche altre cose quando necessario) prima di iniziare apache con apache2 -k start.


1
#sudo apache2ctl avvia httpd (pid 1390) già in esecuzione
Amandeep Singh

Allora, qual è il problema che stai avendo allora?
Dan,

@AmandeepSingh: prova sudo apache2ctl restartinvece.
Scheffield

1
@scheffield Ho provato questo comando più volte. Il problema era dovuto alla modifica della posizione della cartella principale nella nuova versione di Apache da / var / www a / var / www / html. Ho spostato tutti i file in una sottocartella / html e ha funzionato.
Amandeep Singh,

4

Modifica la configurazione sudo leafpad /etc/apache2/apache2.conf::

# Include the virtual host configurations:

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

o rimuovi file.


+1. La risposta è stata sottovalutata ma conteneva la soluzione al problema di molti amministratori che potrebbero visitare questa domanda.
agosto

2

di Augustin risposta funzionato per me quando tutti i miei host virtuali sono scomparsi a seguito di un aggiornamento del server da 12.04 LTS a 14.04 LTS. Lo voterei se avessi la reputazione di farlo.

Il seguente comando aggiungerà il .confsuffisso a tutti i symlink /etc/apache2/sites-enabledche non lo hanno già:

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

Inoltre, si è verificato un cambiamento dall'uso della sintassi Allow from/ nel modulo mod_authz_host (Deny fromRequire ecco il link per la documentazione 2.2).

Il seguente comando modificherà l'utilizzo comune di Order allow, denyfollow by Allow from allto Require all grantedinvece:

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/* 

1

In effetti, il docroot cambia tra preciso e affidabile da / var / www a / var / www / html. È scarso che lo script do-release-upgrade non regredisca alla docroot.

A) Entrambi sono validi, ma html è più convenzionale. CentOS è influente in questo senso. Anche la pagina "Funziona" ora è più matura.

B) Non devi usare / var / www / html, ma se lo fai ...

  • devi migrare i tuoi contenuti o alias (non consigliato).
  • è necessario aggiornare ovunque si faccia riferimento alla vecchia posizione.
  • in particolare script di backup / ripristino / personalizzazione.

C) E potrebbe essere più semplice costruire da zero e migrare.

D) Questo sintomo si verificherà se "sudo apache2 -k grazioso" è pronto all'uso su Trusty, si aggiorna o no a causa di envvars che non rientrano nell'ambito?. Utilizzare invece "sudo apache2ctl start / stop / restart".


0

Nel mio caso:

  • La htmlsottocartella in/var/www/ esisteva già ma continuavo a ricevere l'errore:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • Avevo già deciso di ospitare i miei siti Web nella root del mio utente, ad es. /home/{user}/sites/Invece del valore predefinito/var/www/html
  • Sto usando Apache 2.4.7 (puoi controllare la tua versione con apache2 -v)

Come ho risolto il problema in cinque semplici passaggi:

  1. In /etc/apache2/apache2.confho aggiunto la seguente riga successiva 169:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. Mi sono assicurato che la mia configurazione dell'host virtuale denominata website.confin /etc/apache2/sites-availablefosse copiata dal valore predefinito 000-default.confe assomigliasse a:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. Ho ricaricato il mio sito ( sudo a2dissite website && sudo a2ensite website) e il mio server e l'errore iniziale era sparito. Woohoo! Ma ne è emerso uno nuovo: "AH00035: accesso a / negato (percorso del filesystem '/ home / {utente} / siti') perché mancano le autorizzazioni di ricerca su un componente del percorso". Questo ho risolto nel passaggio 4.

  4. Il nuovo problema era dovuto alle autorizzazioni, quindi ho appena impostato ciascuna delle directory che portano alla websitecartella chmod 755. Ognuno! La homecartella, la cartella {utente}, la cartella dei siti e persino la cartella del mio sito Web

  5. Dopo aver aggiornato il mio browser a website.devtutto caricato bene!

PS avevo già installato website.devnel mio /etc/hostsfile.

Suggerimento bonus: per controllare le autorizzazioni di una cartella specifica è possibile utilizzare il comando stat -c %a /path/to/file/or/folder. Per controllare le autorizzazioni di ogni parte di una directory utilizzare namei -m /path/to/final/folder.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.