Dlaczego mój Apache nie działa po aktualizacji do 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}

To jest zawartość /etc/apache2/apache2.confpliku.


3
Nie działa, ponieważ w wierszu 74 pliku /etc/apache2/apache2.conf wystąpił błąd składniowy . Prześlij zawartość tego pliku, aby zobaczyć, co jest nie tak.
Lucio

2
Wyszukiwanie w Google od wczoraj,
Amandeep Singh



Czy muszę przenieść / var / www do / var / www / html?
Amandeep Singh

Odpowiedzi:


31

Miałem ten problem: przyczyna jest w pliku

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

gdzie zmienił się root:

przed aktualizacją = /var/www
po aktualizacji =/var/www/html

Edytuj więc, aby zmodyfikować ten plik

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

I uruchom ponownie apache

sudo service apache2 restart

Ponieważ jest to problem, z którym może się spotkać OP, nie jest to problem, który ma obecnie. W obu przypadkach, jak wyjaśniłem w tej odpowiedzi , nie polecam edytowania 000-default.confpliku.
Dan


2
+1 Nie mogłem tego rozgryźć. Jesteś mężczyzną!
gion_13

2
W moim przypadku nadal mam ten problem, a htmlpodfolder już istnieje, co w moim przypadku jest właściwie nieistotne, ponieważ wszystkie moje strony używają VirtualHosts
jhbsk

4
To nie może być odpowiedź! Powyższy błąd nie jest związany z DocumentRootustawieniem.
Reinier Post

50

Miałem ten problem, mimo że apache działał dla mnie. Po prostu chciałem zrobić szybko

$ /usr/sbin/apache2 -V

znaleźć wartość SERVER_CONFIG_FILE. Ponieważ nie jest to już sposób na uruchomienie apache2, kończy się niepowodzeniem z błędami publikowanymi przez OP. Szybkim i brudnym obejściem jest po prostu ustawienie envvarów, których najpierw brakuje:

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

To ustawia zmienną APACHE_LOCK_DIR i wszystko jest w porządku ( -D SERVER_CONFIG_FILE="apache2.conf").


1
To zadziałało dla mnie. Ten sam problem, Apache działał i działał, ale apache2 -Snie działał . Wszystko naprawione.
Twisty

Dziwne. To chyba nie działało dla mnie. To ma sens, dlaczego tak powinno być .
Tyler Crompton,

@TylerCrompton - Jak to się nie udało? Jaki był błąd?
linia

To nie miało znaczenia. Nadal mam problem z OP. Uruchamianie apache2jako root naprawiło problem.
Tyler Crompton

4
Łatwiejsza alternatywa:apache2ctl -V
Reinier Post

14

Objawy i rozwiązanie

Na wielu stronach internetowych lub forach Q&A ludzie mylą objawy i rzeczywiste przyczyny. Właśnie zaktualizowałem serwer Ubuntu z 13.10 do 14.04.1 i napotkałem dokładnie te same objawy opisane przez OP, w tym:
1- apache najwyraźniej nie działa. Zmienna konfiguracji 2- apache niezdefiniowana. 3 - błąd składniowy wymieniony przez PO.

Problem polega na tym, że nie wszystkie z tych symptomów są rzeczywiście związane z rzeczywistym problemem i służą jedynie jako odwrócenie uwagi od tych, którzy starają się jak najlepiej pomóc.

Różne problemy z rootowaniem mogą powodować, że administratorzy odwiedzają takie witryny z mniej więcej tym samym opisem: „Uaktualniłem system operacyjny, a teraz apache nie działa ...”

Jedna konkretna przyczyna

Mając wszystkie dokładnie takie same objawy, jak PO, pociągało mnie to pytanie. Niestety jedyną odpowiedzią, która zawierała prawidłową wskazówkę dotyczącą prawdziwej głównej przyczyny mojego problemu, była zanegowana (-1), opublikowana przez user1469291 z powtórzeniem 1 !! Przeszukałem więc inne strony internetowe, dopóki nie znalazłem jasnego wyjaśnienia problemu (a tym samym rozwiązania).

Poniższe rozwiązanie może nie rozwiązać prawdziwego problemu PO, ale jestem pewien, że pomoże innym, którzy mogą zainteresować się tym pytaniem z tych samych powodów, co ja.

/etc/apache2/apache2.conf zawiera:

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

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

co oznacza, że ​​zostaną załadowane tylko pliki konfiguracji witryny w / etc / apache2 / sites-enabled / ending .conf. Starsze dowiązanie symboliczne w tym katalogu zostanie zignorowane.

Kiedyś był po prostu obsługiwany przez strony / *. Dlatego wszystkie moje pliki konfiguracji wirtualnego hosta, które po prostu nazwałem ww1.example.com, ww2.example.com itp., Działały, ale nagle i początkowo w niewytłumaczalny sposób przestały działać po aktualizacji.

Więc zmień powyższą dyrektywę i ponownie załaduj apache lub, tak jak ja, ręcznie usuń wszystkie starsze dowiązania symboliczne w witrynach z włączoną funkcją /, zmień nazwę wszystkich plików w witrynach dostępnych /, aby dodać przyrostek .conf, a następnie ponownie włącz każdy z nich strona indywidualnie.

Ponadto domyślne dyrektywy w apache.conf są bardziej rygorystyczne:

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

Jeśli więc hostujesz swoje wirtualne witryny w / home / user / gdzieś, pamiętaj, aby odpowiednio zastąpić dyrektywę.


1
To dobra odpowiedź. Najlepiej zrozumieć zmiany przed wbieganiem i narzekaniem, że coś nie działa dobrze.
MikeNGarrett

1
Dzięki za to, nie zdawałem sobie sprawy, że zmiana nazwy pliku nie usunęła dowiązania symbolicznego z włączonych witryn.
Benno

To nie zapewnia rozwiązania.
Reinier Post

6

Patrząc uważnie na swój problem, po prostu biegniesz apache2. Aby uruchomić apache w Ubuntu, uruchom następujące polecenie:

sudo apache2ctl start

Konfiguracja Apache jest podzielona na wiele plików, jeden z tych plików to zmienne środowiskowe. Gdy tylko uruchomisz apache2, te zmienne nie są ustawione.

Skrypt apache2ctl załaduje zmienne (i w razie potrzeby zrobi też inne rzeczy) przed uruchomieniem apache apache2 -k start.


1
#sudo apache2ctl start httpd (pid 1390) już działa
Amandeep Singh

W takim razie jaki masz problem?
Dan

@AmandeepSingh: spróbuj sudo apache2ctl restartzamiast tego.
scheffield,

1
@scheffield Wypróbowałem to polecenie kilka razy. Problem był spowodowany zmianą lokalizacji folderu głównego w nowej wersji Apache z / var / www na / var / www / html. Przeniosłem wszystkie pliki do podfolderu / HTML i działało.
Amandeep Singh

4

Edytuj konfigurację sudo leafpad /etc/apache2/apache2.conf:

# Include the virtual host configurations:

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

lub usuń plik.


+1. Odpowiedź została odrzucona, ale zawierała rozwiązanie problemu wielu administratorów, którzy mogą odwiedzić to pytanie.
Augustin

2

Odpowiedź augustina zadziałała dla mnie, gdy wszystkie moje wirtualne hosty zniknęły po aktualizacji serwera z 12.04 LTS do 14.04 LTS. Głosowałbym za tym, gdybym miał taką reputację.

Następujące polecenie doda .confsufiks do wszystkich dowiązań symbolicznych, /etc/apache2/sites-enabledktóre jeszcze go nie mają:

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

Ponadto nastąpiła zmiana z używania składni Allow from/ na moduł mod_authz_host ( tutaj jest link do dokumentacji 2.2).Deny fromRequire

Następujące polecenie edytuje typowe użycie polecenia Order allow, denyfollow Allow from allby to Require all grantedzamiast:

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

W rzeczywistości docroot zmienia się z precyzyjnego na sprawdzony z / var / www na / var / www / html. Słabe jest to, że skrypt do-release-upgrade nie regresuje docroot z powrotem.

Odp .: Albo jest poprawny, ale HTML jest bardziej konwencjonalny. CentOS ma na to wpływ. Strona „to działa” jest teraz również bardziej dojrzała.

B) Nie musisz używać / var / www / html, ale jeśli robisz ...

  • musisz przeprowadzić migrację treści lub dokonać aliasu (niezalecane).
  • musisz zaktualizować w dowolnym miejscu, do którego odwołuje się stara lokalizacja.
  • zwłaszcza skrypty tworzenia kopii zapasowych / przywracania / dostosowywania.

C) I może być łatwiej budować od podstaw i migrować.

D) Ten objaw wystąpi, jeśli „sudo apache2 -k wdzięczny” po wyjęciu z pudełka w Trusty, uaktualnisz czy nie z powodu braku envvarów? Zamiast tego użyj „sudo apache2ctl start / stop / restart”.


0

W moim przypadku:

  • htmlPodfolder co /var/www/już istnieje, ale wciąż byłem coraz błąd:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • Zdecydowałem już hostować swoje witryny w katalogu głównym użytkownika np. /home/{user}/sites/Zamiast domyślnego/var/www/html
  • Używam Apache 2.4.7 (możesz sprawdzić swoją wersję za pomocą apache2 -v)

Jak rozwiązałem problem w pięciu łatwych krokach:

  1. W /etc/apache2/apache2.confdodałem następujące po linii 169:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. Upewniłem się, że moja konfiguracja wirtualnego hosta o nazwie website.confat /etc/apache2/sites-availablezostała skopiowana z domyślnej 000-default.confi wyglądała następująco:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. Ponownie załadowałem moją witrynę ( sudo a2dissite website && sudo a2ensite website) i serwer, a początkowy błąd zniknął. WOOHOO! Pojawiło się jednak nowe: „AH00035: dostęp do / odmowa dostępu (ścieżka systemu plików„ / home / {użytkownik} / witryny ”), ponieważ brakuje uprawnień do wyszukiwania w komponencie ścieżki”. Rozwiązałem to w kroku 4.

  4. Nowy problem wynikał z uprawnień, więc po prostu ustawiłem każdy z katalogów prowadzących do websitefolderu na chmod 755. Każdy jeden! homeFolderu, {user} folderu, folder witryn, a nawet mój folder www

  5. Po odświeżeniu przeglądarki website.devwszystko ładuje się dobrze!

PS Mam już skonfigurowane website.devw moim /etc/hostspliku.

Dodatkowa wskazówka: Aby sprawdzić uprawnienia do określonego folderu, możesz użyć polecenia stat -c %a /path/to/file/or/folder. Aby sprawdzić uprawnienia do każdej części katalogu, użyj namei -m /path/to/final/folder.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.