apache จะไม่รีสตาร์ทหลังจากเพิ่มไฟล์ VirtualHost แล้วทำไมล่ะ?


14

ในCentOS 7เซิร์ฟเวอร์ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพิมพ์sudo apachectl restartหลังจากเพิ่มไฟล์รวมที่ด้านล่างของhttpd.conf:

Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

เมื่อฉันพิมพ์sudo systemctl status httpd.service -lผลลัพธ์คือ:

httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: exit-code) since Tue 2014-12-23 20:10:37 EST; 2min 15s ago
  Process: 2101 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 2099 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 2099 (code=exited, status=1/FAILURE)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"

Dec 23 20:10:37 ip-address httpd[2099]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message
Dec 23 20:10:37 ip-address systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Dec 23 20:10:37 ip-address systemd[1]: Failed to start The Apache HTTP Server.
Dec 23 20:10:37 ip-address systemd[1]: Unit httpd.service entered failed state.

ฉันสามารถapacheเริ่มต้นใหม่ได้หากฉันคอมเม้นต์คำสั่ง include และฉันสามารถสร้างข้อผิดพลาดอีกครั้งโดยยกเลิกการคอมเม้นท์คำสั่ง include ฉันapacheจะเริ่มต้นอย่างถูกต้องโดยใช้เนื้อหาของไฟล์ include ได้อย่างไร

บรรทัดที่ด้านล่างของhttpd.confข้อผิดพลาดคือ: IncludeOptional sites-enabled/*.conf. .confไฟล์เดียวในsites-enabledโฟลเดอร์คือmydomain.com.confซึ่งมีเนื้อหาดังต่อไปนี้:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
    ErrorLog /var/www/mydomain.com/error.log
    CustomLog /var/www/mydomain.com/requests.log combined
</VirtualHost>

httpd.confเป็นเช่นเดียวกับสิ่งที่มาติดตั้งกับhttpdยกเว้นหนึ่งบรรทัดรวมถึงคำสั่งดังกล่าวข้างต้น ฉันรู้เพราะฉันทำsudo yum remove httpd mod_sslและsudo yum install httpd mod_sslถูกต้องก่อนที่จะก่อให้เกิดข้อผิดพลาดนี้ ทั้งhttpd.confสามารถอ่านได้ที่เว็บไซต์แบ่งปันไฟล์โดยคลิกที่ลิงค์นี้

ผมพบปัญหานี้เมื่อชัดเจนต่อไปนี้ขั้นตอนในการกวดวิชานี้

เมื่อฉันคอมเม้นท์ไฟล์ include http/mydomain.comให้บริการเนื้อหาสแตติกที่อยู่/var/www/htmlซึ่งถูกDocumentRootกำหนดในhttpd.confเรียบร้อยแล้ว ปัญหาดูเหมือนว่าจะมาจากVirtualHostคำสั่งในไฟล์รวมที่แสดงด้านบน เพื่อช่วยในการวินิจฉัยฉันได้รวมไว้ใน EDIT # 3 ด้านล่างลิงก์ไปยัง.confไฟล์ทั้งหมดที่มีอยู่ในสามคำสั่งรวมถึงhttpd.confไฟล์ที่มีอยู่ในทั้งสามรวมถึงแนวทางในการ

แก้ไข # 1

เมื่อฉันลองใช้คำแนะนำของ m32 เพื่อเปลี่ยนการ/etc/hostnameกำหนดmydomain.comเป็นapacheยังจะไม่รีสตาร์ทและsystemctl status httpd.serviceผลลัพธ์ดังต่อไปนี้:

[sudo_user_account@server-ip-address ~]$ sudo systemctl status httpd.service -l
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: exit-code) since Tue 2014-12-23 14:25:35 EST; 20s ago
  Process: 31993 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 31991 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 31991 (code=exited, status=1/FAILURE)
   Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"

Dec 23 14:25:35 hostname systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Dec 23 14:25:35 hostname systemd[1]: Failed to start The Apache HTTP Server.
Dec 23 14:25:35 hostname systemd[1]: Unit httpd.service entered failed state.  

แก้ไข # 2

ฉันยังลองใช้คำแนะนำของ eyoung100 เพื่อเปลี่ยนเนื้อหาของ/etc/hostsไฟล์ตามที่กำหนดในภาพต่อไปนี้ แต่ฉันยังคงได้รับข้อผิดพลาดเดิมที่กำหนดไว้ใน EDIT # 1 ด้านบน

แก้ไข # 3

ตามคำขอของ DerekC ฉันวิ่งsudo apachectl configtestและได้:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message
Syntax OK

นอกจากนี้ข้อเสนอแนะต่อ GarethTheRed ของผมตรวจสอบรวมถึงแนวทางในhttpd.conf มีสามรวมถึงแนวทางในhttpd.conf ฉันแสดงรายการทั้งสามด้านล่างพร้อมกับไฟล์ทั้งหมดที่อยู่ในโฟลเดอร์ของคำสั่งแต่ละรายการ เหล่านี้ล้วนเป็นมาตรฐานไฟล์ที่ติดตั้งกับ.conf httpdฉันยังไม่ได้แก้ไขใด ๆ ของพวกเขาเลย คุณสามารถดู.confไฟล์แต่ละไฟล์ได้ที่เว็บไซต์แบ่งปันไฟล์โดยคลิกที่ลิงค์ด้านล่าง:

Include conf.modules.d/*.confอ้างอิงไฟล์ต่อไปนี้ในconf.modules.dไดเรกทอรี: 00-base.conf
00-dav.conf
00-lua.conf
00-mpm.conf
00-proxy.conf
00-ssl.conf
00-ssl.conf 00-systemd.conf
01-cgi.conf

IncludeOptional conf.d/*.confอ้างอิงไฟล์ต่อไปนี้ในconf.dไดเรกทอรี: autoindex.conf
ssl.conf
userdir.conf
welcome.conf
นอกจากนี้ยังมีไฟล์ README ที่ฉันไม่ได้ใช้ที่นี่

นอกจากนี้แล้ว IncludeOptional sites-enabled/*.confคำสั่งและเนื้อหาของมันถูกอธิบายอย่างละเอียดใน OP ด้านบน

ไฟล์เหล่านี้มีไฟล์ที่ขัดแย้งกับการVirtualHostตั้งค่าmydomain.com.confหรือไม่

แก้ไข # 4

ต่อข้อเสนอแนะของ garethTheRed ฉันย้ายmydomain.com.confไปที่conf.dไดเรกทอรีแล้วเริ่มแสดงความคิดเห็นออกบรรทัดในmydomain.com.confหนึ่งโดยหนึ่งจนกว่าจะhttpdสามารถรีสตาร์ท จากนั้นฉันก็เริ่มต้นการยกเลิกการคอมเม้นท์เพื่อดูว่ามีกี่บรรทัดที่เหลืออยู่และhttpdยังคงรีสตาร์ท ฉันสามารถhttpdเริ่มต้นใหม่ได้ แต่systemctl status httpd.service -lยังคงสร้างคำเตือนเดิมต่อไป:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::e23f:49ff:feb7:2a21. Set the 'ServerName' directive globally to suppress this message

VirtualHostไวยากรณ์ที่ช่วยให้httpdการเริ่มต้น (แม้ว่าอย่างต่อเนื่องเพื่อสร้างคำเตือนข้างต้น) เป็นดังนี้:

<VirtualHost *:80>
    ServerName www.mydomain.com
    ServerAlias mydomain.com
    DocumentRoot /var/www/mydomain.com/public_html
</VirtualHost>  

โปรดทราบว่าฉันต้องละเว้นบรรทัดต่อไปนี้ซึ่งการแสดงตนเพิ่มระดับคำเตือนเป็นการไม่สามารถเริ่ม http ได้อย่างสมบูรณ์:

# ErrorLog /var/www/mydomain.com/error.log
# CustomLog /var/www/mydomain.com/requests.log combined

นอกจากนี้ฉันวิ่งsudo journalctl -xelu httpdและเทอร์มินัลตอบกลับด้วยการทำซ้ำหลาย ๆ ครั้ง:

-- 
-- Unit httpd.service has finished shutting down.
Dec 24 17:48:43 server-ip-address systemd[1]: Stopped The Apache HTTP Server.
-- Subject: Unit httpd.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has finished shutting down.
Dec 24 17:48:48 server-ip-address systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has begun starting up.
Dec 24 17:48:48 server-ip-address httpd[10364]: AH00558: httpd: Could not reliably d
Dec 24 17:48:48 server-ip-address systemd[1]: Started The Apache HTTP Server.
-- Subject: Unit httpd.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit httpd.service has finished starting up.
-- 
-- The start-up result is done.
lines 887-909/909 (END)

หมายเหตุ: ผลลัพธ์ข้างต้นยังคงเหมือนเดิมไม่ว่าฉันจะใช้ไฟล์โฮสต์ของ eyoung100 หรือไฟล์โฮสต์ของ m32 เพื่อให้ตอบคำถามนี้ฉันคิดว่าฉันควรจะสามารถสร้างล็อกไฟล์และหลีกเลี่ยงคำเตือนชื่อเซิร์ฟเวอร์ มิฉะนั้นฉันกลัวว่าขั้นตอนต่อมาของการกำหนดค่า httpd จะมีแนวโน้มที่จะเกิดข้อผิดพลาด


1
เกิดข้อผิดพลาดอะไร "nebulous" ที่แน่นอนเมื่อคุณเพิ่มServerNameคำสั่ง? เพิ่มไปยังคำถามของคุณ
wurtel

1
อะไรคือผลลัพธ์ของapachectl configtest?
DerekC

มีไฟล์IncludeOptionalท้ายhttpd.confไฟล์ต้นฉบับหรือไม่? ฉันเชื่อว่ามีการติดตั้งเริ่มต้น ปัญหาอาจเป็นได้ว่าคุณกำลังเพิ่มส่วนIncludeOptionalท้ายที่บังคับapacheให้อ่านไฟล์กำหนดค่ารวมสองครั้งและทำให้เกิดความล้มเหลว
garethTheRed

สำหรับการเริ่มต้นที่คุณต้องการที่จะย้ายคุณmydomain.com.confไป/etc/httpd/conf.d(ที่ทุกคนอื่น ๆ ) และลบ/etc/httpd/sites-enabled(ที่เป็น Debian / Ubuntu สิ่ง) และคุณเพิ่มเข้าไปIncludeOptional httpd.confคุณสามารถละเว้นข้อความสำหรับตอนนี้มันไม่ได้หยุดAH00558 apacheถัดไปลบบรรทัดออกจากconfไฟล์ของคุณจนกว่าคุณจะพบผู้ร้าย (หรือมิฉะนั้นให้เริ่มด้วยบรรทัดว่างแล้วเรียกคืนทีละบรรทัด)
garethTheRed

1
@garethTheRed และทุกคนจาก google คุณไม่จำเป็นต้องลบ IncludeOptional sites-enabled / *. conf นั่นคือปลาเฮอริ่งแดง ปัญหาที่แท้จริงคือไฟล์บันทึกตามที่ระบุด้านล่างโดย garethTheRed ฉันติดตามการสอนเดียวกันกับ OP และมีปัญหาเดียวกัน การลบบรรทัดไฟล์บันทึกจากไฟล์ conf โฮสต์เสมือนแก้ไข
Louise Eggleton

คำตอบ:


19

บันทึกเป็นสาเหตุของข้อผิดพลาดเนื่องจากapacheไม่สามารถเขียนไปที่รูทของเว็บไซต์ของคุณ แม้ว่าคุณจะต้องแก้ไขการอนุญาตของไฟล์คุณก็ยังคงถูกบล็อกโดย SELinux ซึ่งอนุญาตให้apacheเขียนบันทึก/var/log/httpdได้เท่านั้น ทางออกที่ง่ายที่สุดคือเปลี่ยนเว็บไซต์ของคุณเพื่อเข้าสู่ไดเรกทอรีนี้ - อาจเป็นชื่อไฟล์ที่มีชื่อเว็บไซต์เพื่อแยกความแตกต่างจากบันทึกอื่น ๆ

ErrorLog /var/log/httpd/mydomain_com_error.log
CustomLog /var/log/httpd/mydomain_com_requests.log combined

หากต้องการตั้งชื่อโฮสต์ของเซิร์ฟเวอร์และกำจัดคำเตือน AH00558 เพียงใช้:

hostnamectl set-hostname --static <FQDN of your machine>

เช่น

hostnamectl set-hostname --static mydomain.com

ฉันพบข้อผิดพลาดอื่นขณะที่ฉันทำงานต่อไป คุณยินดีที่จะช่วยฉันด้วยหรือไม่ นี่คือลิงค์: unix.stackexchange.com/questions/176052/…
CodeMed

2

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันลืมตั้งชื่อโฮสต์สำหรับเครื่อง คุณทำเช่นนั้น?
เรียกใช้คำสั่งนี้:

echo 'example.com' >> /etc/hostname  

ยืนยันด้วย hostname

แก้ไข:
ด้วย OP ที่อัปเดตดูเหมือนว่าไฟล์โฮสต์ของคุณไม่ได้ตั้งค่าไว้อย่างถูกต้อง นี่คือสิ่งที่ฉันดูเหมือน;

127.0.0.1 localhost.localdomain localhost
# Auto-generated hostname. Please do not remove this comment.
166.66.666.66 m32.me m32
::1     ip6-localhost ip6-loopback

ลองตั้งค่าเป็นอะไรที่ง่าย แน่นอนแทนที่ข้อมูลทั้งหมดด้วยตัวคุณเอง
166.66.666.66ด้วย IP ของคุณเอง
m32.me and m32พร้อมโดเมนและโดเมนที่ไม่มี TLD


ที่ไม่สามารถแก้ไขปัญหาที่ฉันยังคงได้รับAH00558ข้อผิดพลาดเมื่อฉันใช้ไฟล์ตัวอย่างเช่นครอบครัวของคุณกับฉันและip mydomain.com mydomain
CodeMed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.