ทำไม Apache ของฉันไม่ทำงานหลังจากอัปเกรดเป็น 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}

นี่คือเนื้อหาของ/etc/apache2/apache2.confไฟล์


3
มันไม่ได้ทำงานเพราะคุณมีข้อผิดพลาดไวยากรณ์ในบรรทัด 74 /etc/apache2/apache2.conf โปรดอัปโหลดเนื้อหาของไฟล์นั้นเพื่อดูว่ามีอะไรผิดปกติ
Lucio

2
กำลังค้นหา google ตั้งแต่เมื่อวาน
Amandeep Singh

อัปโหลดไฟล์ได้ที่: pastebin.ubuntu.com/7298873
Amandeep Singh


ฉันต้องย้าย / var / www ไปยัง / var / www / html หรือไม่
Amandeep Singh เมื่อ

คำตอบ:


31

ฉันมีปัญหานี้: สาเหตุอยู่ในไฟล์

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

ตำแหน่งที่รูตมีการเปลี่ยนแปลง:

ก่อนอัปเกรด = /var/www
หลังการอัพเกรด =/var/www/html

ดังนั้นแก้ไขเพื่อแก้ไขไฟล์นี้

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

และรีสตาร์ท apache

sudo service apache2 restart

เนื่องจากนี่เป็นปัญหาที่ OP อาจเผชิญอยู่นี่ไม่ใช่ปัญหาที่เขามีในขณะนี้ ทั้งสองกรณีดังที่ฉันอธิบายไว้ในคำตอบนี้ฉันไม่แนะนำให้แก้ไข000-default.confไฟล์
ด่าน

มันทำงานหลังจากย้ายไปที่ / var / www / html
Amandeep Singh

2
+1 ฉันไม่สามารถเข้าใจสิ่งนี้ได้เช่นกัน คุณคือผู้ชาย!
gion_13

2
ในกรณีของฉันฉันยังคงมีปัญหานี้และhtmlโฟลเดอร์ย่อยมีอยู่แล้วซึ่งในกรณีของฉันไม่เกี่ยวข้องจริง ๆ เนื่องจากไซต์ของฉันทั้งหมดใช้ VirtualHosts
jhbsk

4
นี่ไม่ใช่คำตอบ! ข้อผิดพลาดด้านบนไม่เกี่ยวข้องกับการDocumentRootตั้งค่า
Reinier โพสต์

50

ฉันมีปัญหานี้แม้ว่า apache จะทำงานให้ฉัน ฉันแค่อยากจะทำอย่างรวดเร็ว

$ /usr/sbin/apache2 -V

SERVER_CONFIG_FILEเพื่อหาค่าของ เพราะนั่นไม่ใช่วิธีการเริ่ม apache2 อีกต่อไปมันล้มเหลวด้วยข้อผิดพลาดที่โพสต์ OP วิธีแก้ปัญหาที่รวดเร็วและสกปรกคือการตั้งค่า envvars ที่หายไปก่อน:

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

ชุดนี้ตัวแปร APACHE_LOCK_DIR และทั้งหมดเป็นอย่างดี ( -D SERVER_CONFIG_FILE="apache2.conf")


1
สิ่งนี้ใช้ได้สำหรับฉัน ปัญหาเดียวกัน Apache กำลังทำงานและทำงานอยู่ แต่การทำงานapache2 -Sล้มเหลว แก้ไขทั้งหมดแล้ว
Twisty

แปลก. ดูเหมือนจะไม่เหมาะกับฉัน มันทำให้รู้สึกว่าทำไมมันควรแม้ว่า
Tyler Crompton

@TylerCrompton - มันล้มเหลวอย่างไร ข้อผิดพลาดคืออะไร
เลน

มันไม่ได้สร้างความแตกต่าง ฉันยังคงประสบปัญหาที่ OP มี การทำงานapache2ในฐานะรูทช่วยแก้ไขปัญหาได้
ไทเลอร์ครอมป์ตัน

4
ทางเลือกที่ง่ายขึ้น:apache2ctl -V
Reinier Post

14

อาการและวิธีการแก้ไข

ในเว็บไซต์หรือฟอรัมคำถามและคำตอบหลาย ๆ คนทำให้เกิดอาการสับสนและสาเหตุที่แท้จริง ฉันเพิ่งอัพเกรดเซิร์ฟเวอร์อูบุนตูจาก 13.10 เป็น 14.04.1 และพบกับอาการเดียวกันที่อธิบายโดย OP รวมถึง:
1- apache ไม่ทำงาน 2- ตัวแปรการกำหนดค่า apache ไม่ได้กำหนด 3- ข้อผิดพลาดทางไวยากรณ์ที่กล่าวถึงโดย OP

ปัญหาคือว่าอาการเหล่านี้ไม่ได้เกิดขึ้นจริงกับปัญหาที่เกิดขึ้นจริงและพวกเขาทำหน้าที่เป็นเพียงสิ่งที่ทำให้ไขว้เขวกับผู้ที่พยายามอย่างดีที่สุดเพื่อช่วย

ปัญหารากที่แตกต่างกันอาจทำให้ผู้ดูแลระบบมาที่ไซต์เช่นนี้โดยมีคำอธิบายเดียวกันโดยคร่าว ๆ : "ฉันอัพเกรดระบบปฏิบัติการและตอนนี้ apache ไม่ทำงาน ... "

สาเหตุหนึ่งที่เฉพาะเจาะจง

มีอาการที่ชัดเจนเช่นเดียวกับ OP ทั้งหมดฉันดึงดูดคำถามนี้ น่าเสียดายที่คำตอบเดียวที่มีคำใบ้ที่ถูกต้องเกี่ยวกับสาเหตุที่แท้จริงของปัญหาของฉันคือ downvote (-1) โพสต์โดยผู้ใช้ 1469291 พร้อมตัวแทน 1 !! ดังนั้นฉันจึงค้นหาเว็บไซต์อื่น ๆ เพิ่มเติมจนกระทั่งพบคำอธิบายที่ชัดเจนเกี่ยวกับปัญหา (และด้วยวิธีการแก้ปัญหา)

วิธีแก้ปัญหาที่ตามมาอาจไม่สามารถแก้ไขปัญหาที่แท้จริงของ OP ได้ แต่ฉันแน่ใจว่ามันจะช่วยคนอื่น ๆ ที่อาจถูกดึงดูดด้วยคำถามนี้ด้วยเหตุผลเดียวกับฉัน

/etc/apache2/apache2.conf ประกอบด้วย:

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

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

ซึ่งหมายความว่าเฉพาะไฟล์การกำหนดค่าไซต์ใน / etc / apache2 / sites-enabled / ลงท้ายใน. conf เท่านั้นที่จะได้รับการโหลด symlink ที่เก่ากว่าในไดเรกทอรีนั้นจะถูกละเว้น

มันเคยเป็นเพียงไซต์ที่เปิดใช้งาน / * นั่นเป็นเหตุผลที่ไฟล์คอนฟิกูเรชันโฮสต์เสมือนทั้งหมดของฉันที่ฉันตั้งชื่อ ww1.example.com, ww2.example.com และอื่น ๆ ใช้งานได้ แต่ทันใดนั้นและเริ่มหยุดทำงานอย่างลึกลับหลังจากเริ่มอัพเกรด

ดังนั้นไม่ว่าจะเป็นการเปลี่ยนคำสั่งด้านบนและรีโหลด apache หรือเช่นเดียวกับที่ฉันได้ลบ symlink เก่าทั้งหมดในเว็บไซต์ที่เปิดใช้งาน / เปลี่ยนชื่อไฟล์ทั้งหมดในเว็บไซต์ที่มีอยู่ / เพื่อเพิ่มคำต่อท้าย. เว็บไซต์เป็นรายบุคคล

นอกจากนี้คำสั่งเริ่มต้นใน apache.conf นั้นเข้มงวดกว่า:

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

ดังนั้นหากคุณโฮสต์เว็บไซต์เสมือนของคุณใน / home / user / ที่ไหนสักแห่งให้แน่ใจว่าได้แทนที่คำสั่งอย่างเหมาะสม


1
นี่เป็นคำตอบที่ดี ที่ดีที่สุดที่จะเข้าใจการเปลี่ยนแปลงก่อนที่จะวิ่งเข้ามาและบ่นว่าสิ่งที่ไม่ทำงาน
MikeNGarrett

1
ขอบคุณสำหรับสิ่งนี้ฉันไม่ได้ตระหนักถึงการเปลี่ยนชื่อไฟล์ไม่ได้ลบ symlink ออกจากเว็บไซต์ที่เปิดใช้งาน
Benno

นี่ไม่ใช่วิธีแก้ปัญหา
Reinier โพสต์

6

เมื่อมองปัญหาของคุณอย่างใกล้ชิดคุณกำลังทำงานapache2อยู่ ในการเริ่ม apache ใน Ubuntu ให้รันคำสั่งต่อไปนี้:

sudo apache2ctl start

การกำหนดค่า Apache แบ่งออกเป็นหลายไฟล์โดยหนึ่งในนั้นคือตัวแปรสภาพแวดล้อม เมื่อคุณรันเพียงapache2ตัวแปรเหล่านี้จะไม่ถูกตั้งค่า

สคริปต์ apache2ctl จะโหลดตัวแปร (และทำบางสิ่งอื่น ๆ เช่นกันเมื่อมีความจำเป็น) apache2 -k startก่อนที่จะเริ่มต้นกับอาปาเช่


1
#sudo apache2ctl เริ่ม httpd (pid 1390) ทำงานแล้ว
Amandeep Singh

แล้วคุณมีปัญหาอะไร
ด่าน

@AmandeepSingh: ลองsudo apache2ctl restartแทน
scheffield

1
@scheffield ลองคำสั่งนี้หลายครั้ง ปัญหาเกิดจากการเปลี่ยนตำแหน่งโฟลเดอร์รูทใน Apache เวอร์ชันใหม่จาก / var / www เป็น / var / www / html ฉันย้ายไฟล์ทั้งหมดไปที่โฟลเดอร์ย่อย / html และทำงานได้
Amandeep Singh

4

แก้ไขการกำหนดค่าsudo leafpad /etc/apache2/apache2.conf::

# Include the virtual host configurations:

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

หรือลบไฟล์


+1 คำตอบคือ downvote แต่มีวิธีแก้ไขปัญหาของผู้ดูแลระบบจำนวนมากที่อาจเยี่ยมชมคำถามนี้
กัส

2

คำตอบของ augustin ทำงานสำหรับฉันเมื่อโฮสต์เสมือนทั้งหมดของฉันหายไปหลังจากอัปเกรดเซิร์ฟเวอร์จาก 12.04 LTS เป็น 14.04 LTS ฉันจะลงคะแนนถ้าฉันมีชื่อเสียงที่จะทำเช่นนั้น

คำสั่งต่อไปนี้จะเพิ่ม.confคำต่อท้ายให้กับ symlink ทั้งหมด/etc/apache2/sites-enabledที่ยังไม่มี:

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

นอกจากนี้ยังมีการเปลี่ยนแปลงจากการใช้Allow from/ Deny fromไวยากรณ์เป็นRequireในโมดูลmod_authz_host ( นี่คือลิงค์สำหรับเอกสารประกอบ 2.2)

คำสั่งต่อไปนี้จะแก้ไขการใช้งานทั่วไปของที่Order allow, denyตามมาAllow from allเป็นRequire all granted:

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

อันที่จริง docroot จะเปลี่ยนระหว่างแม่นยำและเชื่อถือได้จาก / var / www เป็น / var / www / html มันแย่ที่สคริปต์ do-release-upgrade ไม่ได้ถดถอย docroot กลับ

A) ถูกต้อง แต่ html นั้นธรรมดากว่า CentOS มีอิทธิพลในเรื่องนี้ หน้า "ใช้งานได้" ก็มีความเป็นผู้ใหญ่มากขึ้นเช่นกัน

B) คุณไม่จำเป็นต้องใช้ / var / www / html แต่ถ้าคุณทำ ...

  • คุณต้องโยกย้ายเนื้อหาหรือชื่อแทน (ไม่แนะนำ)
  • คุณต้องอัปเดตทุกที่ที่มีการอ้างอิงตำแหน่งเก่า
  • โดยเฉพาะสคริปต์สำรอง / กู้คืน / ปรับแต่ง

C) และมันอาจจะง่ายกว่าที่จะสร้างจากพื้นดินขึ้นและโยกย้าย

D) อาการนี้จะเกิดขึ้นหากคุณ "sudo apache2 -k graceful" ออกจากกล่องบน Trusty อัปเกรดหรือไม่เนื่องจาก envvars ไม่ได้อยู่ในขอบเขต? ใช้ "sudo apache2ctl start / stop / restart" แทน


0

ในกรณีของฉัน:

  • htmlโฟลเดอร์ย่อยที่/var/www/มีอยู่แล้ว แต่ยังคงผมได้รับข้อผิดพลาด:AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf
  • ฉันได้ตัดสินใจที่จะโฮสต์เว็บไซต์ของฉันในรูทผู้ใช้ของฉันเช่น/home/{user}/sites/แทนที่จะเป็นค่าเริ่มต้น/var/www/html
  • ฉันใช้ Apache 2.4.7 (คุณสามารถตรวจสอบเวอร์ชั่นของคุณด้วยapache2 -v)

ฉันจะแก้ไขปัญหาได้อย่างไรในห้าขั้นตอนง่าย ๆ :

  1. ใน/etc/apache2/apache2.confฉันเพิ่มต่อไปนี้หลังจากบรรทัด 169:

    <Directory /home/{user}/sites/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
  2. ฉันทำแน่ใจว่าการกำหนดค่าโฮสต์เสมือนของฉันชื่อwebsite.confที่/etc/apache2/sites-availableได้รับการคัดลอกมาจากเริ่มต้น000-default.confและดูเหมือน:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName website.dev
        ServerAlias www.website.dev
        DocumentRoot /home/{user}/sites/website
    </VirtualHost>
    
  3. ฉันโหลดไซต์ของฉันอีกครั้ง ( sudo a2dissite website && sudo a2ensite website) และเซิร์ฟเวอร์ของฉันและข้อผิดพลาดเริ่มต้นหายไป ดีจัง! แต่มีสิ่งใหม่เกิดขึ้น: "AH00035: การเข้าถึง / ปฏิเสธ (เส้นทางของระบบแฟ้ม '/ home / {user} / sites') เนื่องจากสิทธิ์การค้นหาหายไปจากส่วนประกอบของเส้นทาง" สิ่งนี้ฉันแก้ไขได้ในขั้นตอนที่ 4

  4. ปัญหาที่เกิดขึ้นใหม่เป็นผลมาจากการอนุญาตดังนั้นฉันเพียงแค่ตั้งแต่ละไดเรกทอรีที่นำไปสู่โฟลเดอร์website chmod 755ทุกคน! homeโฟลเดอร์ที่ใช้ {} โฟลเดอร์โฟลเดอร์เว็บไซต์และแม้กระทั่งโฟลเดอร์เว็บไซต์ของฉัน

  5. หลังจากรีเฟรชเบราว์เซอร์ของฉันที่website.devทุกอย่างโหลดได้ดี!

ป.ล.ฉันมีการตั้งค่าwebsite.devใน/etc/hostsไฟล์ของฉันแล้ว

เคล็ดลับโบนัส:stat -c %a /path/to/file/or/folderการตรวจสอบสิทธิ์ของคุณโดยเฉพาะอย่างยิ่งโฟลเดอร์สามารถใช้คำสั่ง namei -m /path/to/final/folderในการตรวจสอบสิทธิ์ของทุกส่วนของการใช้งานไดเรกทอรี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.