Apache2 (Httpd) ไม่ทำงานหลังจากอัปเดตเป็น High Sierra


15

ฉันมีปัญหาที่ Apache จะไม่เริ่มทำงานหลังจากอัปเดตเป็น High Sierra 10.13.1 ไม่มีสิ่งใดปรากฏในบันทึกข้อผิดพลาด แต่เมื่อฉันพยายามทำapachectl startอะไร ถ้าฉันวิ่งapachectl configtestฉันจะได้รับ "ไวยากรณ์ตกลง

ฉันเคยใช้คำสั่งsudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plistที่ไม่มีประโยชน์ Apache จะไม่เริ่มทำงาน ฉันสามารถเรียกใช้sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plistและไม่ทำงานเช่นกัน

ฉันดูที่รายการบริการการชงและ httpd แสดงในรายการพร้อมกับกระบวนการอื่น (mysql) แต่สถานะของ httpd แสดงเป็นสีเหลือง "เริ่มต้น" แทนที่จะเป็นสีเขียว

ฉันได้ลองทำหลายสิ่งหลายอย่างแล้วและสิ่งที่ฉันค้นหาคือถ้าฉันค้นหาไฟล์ system.log ที่ฉันค้นหา com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

หากฉันเรียกใช้ apachectl start คำสั่งนั้นดูเหมือนว่าจะทำงาน แต่เมื่อฉันรันคำสั่งหยุดฉันจะได้รับ "httpd (ไม่มีไฟล์ pid) ไม่ได้ใช้งาน"
ฉันยังได้รับเอาต์พุตของ com.; apple.xpc.launchd [1] ( org.apache.httpd): โปรดเปลี่ยนจาก OnDemand เป็น KeepAlive

มีบางสิ่งใน High Sierra ที่ป้องกันไม่ให้ Apache ทำงานเมื่อมันทำงานได้ดีใน Sierra หรือไม่?


1
คุณกำลังผสม Apache httpd ของเบียร์และ Apache httpd ของ Apple (ซึ่ง daemons เรียกใช้เริ่มต้นไบนารีต่างกัน)! คุณได้รับสถานะ httpd จากที่ใด (เช่นตัวบ่งชี้สีเหลืองกับสีเขียว) คู่มือการตั้งค่าเริ่มต้นใดที่คุณใช้
klanomath

ฉันไม่ได้ผสมพวกเขาฉันจะทำตามขั้นตอนของการพยายามชงและ apache ของ Apple เมื่อฉันทำรายการbrew services list' I receive a yellow indicator, I checked with all of the available users and ran บริการชง 'และพวกเขาทั้งหมดแสดงตัวบ่งชี้เดียวกัน สำหรับคู่มือการติดตั้ง Ansible ถูกใช้เพื่อตั้งค่า apache สิ่งนี้ทำกับ MacBooks อื่น ๆ 5 เครื่องพวกเขายังคงใช้ Sierra อยู่ MacBook ตัวนี้มีปัญหาและ Apple ทำการวินิจฉัยและรีเซ็ตระบบปฏิบัติการในขณะที่อัปเดต OS เป็น High Sierra
Alcyeonnero

ด้วยการมิกซ์ฉันหมายความว่า: คุณติดตั้ง apachectl และ httpd ไบนารีอย่างน้อยสองไฟล์ (และไฟล์ config สองไฟล์) โดยปกติแล้วจะต้องการ apachectl ของการต้มเบียร์ (เนื่องจากเนื้อหาเริ่มต้นของตัวแปร PATH คุณอาจแตกต่างกัน) apachectl ของ AFAIR Brew จะไม่เริ่ม httpd ของ Apple ด้วยตัวเลือกเริ่มต้นเริ่มต้น (เช่นapachectl start) เหมือนกันกับ... configtest!
klanomath

ด้วย "Ansible ถูกใช้เพื่อตั้งค่า Apache" คุณหมายถึงคำแนะนำนี้: Mac Play Ansible Playbookหรือไม่? เป็นการดีกว่าที่จะเพิ่มลิงก์ไปยัง / คำแนะนำหรือวิธีการตั้งค่า คู่มือการตั้งค่าต่างๆสำหรับ macOS เวอร์ชันต่างๆทั้งหมดมีการตั้งค่า / การสร้าง env ที่แตกต่างกันเล็กน้อย
klanomath

ฉันเพิ่งอัปเดตเป็น High Sierra ในสุดสัปดาห์นี้และฉันมีปัญหาเดียวกันนี้ ฉันใช้httpdสูตรHomebrew และตอนนี้ Apache ไม่ตอบสนอง เมื่อฉันทำbrew services listฉันยังได้รับstartedhttpd เป็นสีเหลืองและเมื่อฉันเรียกใช้sudo apachectl stopมันจะบอกฉันว่าhttpd (pid 87?) not responding.
wonder95

คำตอบ:


16

ในความคิดของฉันคุณได้ซ่อนกลไกการเปิดตัว httpd ของ daemons / start ไว้หลายตัวโดยเรียกใช้คำสั่งที่เกี่ยวข้องกับ httpd มากเกินไป

เมื่อติดตั้ง apache-httpd ของ homebrew และ homebrew และ PATH เริ่มต้นคุณมีหกวิธีในการเริ่มต้น httpd

Apache ของ Apple:

  • sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • sudo /usr/sbin/apachectl start

Apache ของ Homebrew:

  • sudo apachectl start
  • apachectl start
  • sudo brew services start httpd
  • brew services start httpd

หากคุณได้คัดลอกไฟล์homebrew.mxcl.httpd.plistตนเองทั้ง ~ / Library / LaunchAgents / หรือ / Library / LaunchDaemons / (sudo) launchctl load ...คุณมีสองตัวเลือกที่จะเริ่มต้นโดยการโหลดพวกเขาด้วย

หากคุณไม่ได้แก้ไขไฟล์ httpd config หรือสคริปต์ apachectl อย่างหนักสาขา Apple จะใช้ไฟล์ httpd.conf ของ Apple ใน / var และ DocumentRoot ในโฟลเดอร์ / Library

สาขา homebrew ใช้โฟลเดอร์ย่อยใน / usr / local /

วิธีการเรียกใช้งานบางวิธีจะไม่ทำงานหากคุณเชื่อมโยงพอร์ต httpd กับพอร์ตที่ต่ำกว่า 1024!

หากคุณใช้(sudo) brew services ...เพื่อเริ่ม httpd คุณต้องใช้(sudo) brew services listคำสั่งที่เหมาะสมเพื่อตรวจสอบสถานะ:

หากคุณเริ่มต้นเป็นรูทให้ลิสต์ด้วย privs รูต:

sudo brew services start httpd > sudo brew services list

หรือกับผู้ใช้ส่วนตัว:

brew services start httpd> brew services list.


หากต้องการแก้ปัญหาของคุณให้ยกเลิกการโหลด httpd ของ Apple:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • ลบhomebrew.mxcl.httpd.plistใด ๆ ที่ติดตั้งด้วยตนเอง
  • หยุดบริการ httpd homebrew ใด ๆ ด้วย (sudo) brew services stop httpd
  • หยุด httpd ใด ๆ ที่เริ่มต้นโดย apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • เปิดการตรวจสอบกิจกรรมและตรวจสอบว่าไม่มีกระบวนการ httpd ทำงานอยู่
  • Reboot

ตอนนี้ - สมมติว่าคุณต้องการใช้ httpd ของ homebrew บนพอร์ตที่มีสิทธิ์ - ป้อน:

sudo brew services start httpd

sudo brew services listตรวจสอบการเริ่มต้นที่ประสบความสำเร็จกับ


เมื่อพยายามแก้ไขที่คุณให้ฉันได้รับผลลัพธ์เช่นเดียวกับที่ฉันทำ apachectl stopแสดงผลลัพธ์httpd (no pid file) not runningและเมื่อฉันเรียกใช้sudo brew services httpd start sudo brew services list ระบุ apache2 (httpd) startedเป็นสีเหลืองเมื่อฉันพยายามเข้าถึงหน้าเว็บใด ๆ ที่เกี่ยวข้องที่ฉันไม่สามารถทำได้ ฉันสงสัยว่าการอัปเดตเป็น 10.13 มีการเปลี่ยนแปลงบางอย่างใน apache ทำให้ไม่สามารถเริ่มทำงานได้
Alcyeonnero

14

เกี่ยวกับ homebrew httpd หนึ่งปัญหาที่ฉันพบเมื่อเร็ว ๆ นี้คือไฟล์ httpd.pid ที่เหลือเก่าซึ่งป้องกัน httpd ไม่ให้เริ่มทำงาน อาการถูกapachectl startกล่าวว่า httpd กำลังทำงานอยู่ แต่ไม่ได้เป็นเช่นนั้น

สาเหตุเป็นไฟล์เก่าที่นี่:

/usr/local/var/run/httpd/httpd.pid

ทางออกคือการลบไฟล์ pid นี้แล้ว httpd เริ่มต้น


ที่ดี! นี่เป็นปัญหาของฉันเมื่อ MBP ตัดสินใจว่าจะไม่ปลุกจากโหมดสลีปและฉันต้องจ่ายไฟให้เอง
frumbert

2
วิธีการแก้ปัญหานี้ยังทำงานใน MacOS Mojave Brew คิดว่า Apache กำลังทำงาน แต่ไม่มีhttpdในการตรวจสอบกิจกรรม มันคงที่
Vahid Amiri

สิ่งนี้ช่วยฉันลำบากมาก!
SEJU

สิ่งนี้ใช้ได้สำหรับฉันเช่นกัน ฉันไม่สามารถโหลดเว็บไซต์ใด ๆ และได้รับ ERR_CONNECTION_REFUSED ต่อไป เมื่อฉันพยายามที่จะแสดงรายการบริการที่ทำงานด้วยbrew services listฉันได้รับสถานะ 'เริ่มต้น' สีเหลืองซึ่งหมายความว่ามีสิ่งผิดปกติกับสถานะการใช้งานของเซิร์ฟเวอร์ การลบ pid นี้ได้รับการแก้ไขและตอนนี้รายการบริการจะแสดงสถานะที่ใช้งานเป็นสีเขียว 'เริ่ม' แทนตอนนี้ ขอบคุณสำหรับสิ่งนี้!
Mike Kormendy

หากเครื่องของคุณรีบูตอย่างหนักหลังจากเคอร์เนลตกใจ / ไฟตัด / ฯลฯ นี่น่าจะเป็นปัญหาของคุณ ขอบคุณ!
Dom Stubbs

2

ฉันเผชิญกับสิ่งเดียวกันหลังจากอัพเกรดเป็น High Sierra เมื่อวันนี้ ฉันพบว่าไฟล์ apache ต่อไปนี้ถูกแทนที่ด้วยเวอร์ชันใหม่เอี่ยม โชคดีสำหรับไฟล์เหล่านี้ทั้งหมดที่มีไฟล์ก่อนหน้า FILE ~ ในโฟลเดอร์เดียวกัน ฉันเพิ่งคัดลอก ~ เวอร์ชั่นก่อนหน้ากลับไปเป็นต้นฉบับเริ่มใหม่ apache และทุกอย่างเรียบร้อยดี

ในโฟลเดอร์/etc/apache2:

./httpd.conf
./extra/httpd-vhosts.conf
./extra/httpd-ssl.conf

ตัวอย่าง:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf

ในโฟลเดอร์/etc/apache2/extra/มีประมาณ 10 ไฟล์ที่มีก่อนหน้านี้ ~ ผนวกเข้ากับพวกเขาควรทั้งหมดเหล่านี้จะมีการเปลี่ยนแปลงหรือเพียงแค่สองคุณพูดถึงใน/etc/apache2/extra/โฟลเดอร์
Alcyeonnero

ฉันจะเริ่มต้นด้วยไฟล์ httpd.conf และ httpd-vhosts.conf หากคุณมีการตั้งค่า SSL คุณจะต้องอัปเดต httpd-ssl.conf เช่นกัน ส่วนที่เหลือขึ้นอยู่กับว่าคุณเคยเปลี่ยนแปลงไปก่อนหน้านี้ ฉันจะใช้ diff เพื่อดูว่าไฟล์มีการเปลี่ยนแปลงหรือไม่เช่น diff httpd.conf httpd.conf ~ ก่อนหน้านี้กับไฟล์อื่น ๆ ทั้งหมด
Unmesh

ฉันเริ่มต้นด้วยไฟล์เหล่านั้นซึ่งไม่ได้เปลี่ยนแปลงอะไรเลย
Alcyeonnero

1

ผมมีปัญหาเดียวกัน

com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

นี่หมายความว่า httpd ออกอย่างผิดปกติ

ฉันเริ่ม httpd ด้วยตนเองเพื่อดูว่าปัญหาคืออะไร

> httpd
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/var/log/httpd/error_log.

มองไปที่การอนุญาตมันค่อนข้างชัดเจน

> ll /usr/local/var/log/httpd/
total 96
-rw-r--r--  1 root  admin    242 15 apr 12:38 access_log
-rw-r--r--  1 root  admin  42062 20 jun 11:01 error_log

ฉันคิดว่าฉันเริ่ม httpd เป็น root ซึ่งทำให้เกิดปัญหานี้ ฉันลบไฟล์และหลังจากนั้น

brew services restart httpd

ทั้งหมดเป็นเรื่องปกติ


1

ฉันวิ่งเข้าไปในนี้เมื่อเร็ว ๆ นี้ สาเหตุคือ homebrew ติดตั้ง apache2 / httpd ในโฟลเดอร์ที่ผู้ใช้สามารถเข้าถึงได้และเรียกใช้ในฐานะผู้ใช้ (โดยเรียกใช้คำสั่ง: Brew services start httpd)

ไม่ทำงานในฐานะผู้ใช้ทั่วไปหมายความว่า httpd ไม่สามารถรับฟังพอร์ตที่มีสิทธิ์พิเศษ (1024 และด้านล่าง)

ดังนั้นแม้ว่า httpd.conf จะถูกกำหนดค่าให้ฟัง 80 และ 443 แต่ httpd ไม่สามารถรับคำขอผ่านพอร์ตเหล่านั้นได้

ลักษณะเฉพาะคือเมื่อคุณเริ่มต้น httpd โดยการเรียกใช้คำสั่ง: sudo apachectl start คำสั่งนี้เริ่มต้น httpd ในฐานะผู้ใช้รูท ผู้ใช้รูทได้รับอนุญาตให้ฟังบนพอร์ต 80 และ 443 httpd จากนั้นให้ลบสิทธิ์กลับไปใช้ในฐานะผู้ใช้ _www

ดังนั้นคำตอบสั้น ๆ คือการเรียกใช้ homebrew httpd บนพอร์ต 80 และ 443 คือเริ่มโดยใช้: sudo apachectl start คุณสามารถเริ่มด้วย: sudo brew services เริ่ม httpd Brew จะบอกคุณว่ามันอ้างสิทธิ์บางโฟลเดอร์สำหรับรูทซึ่งฉันคิดว่าใช้ได้ แต่ไม่จำเป็นเนื่องจาก sudo apachectl start ไม่ต้องใช้สิทธิ์ไฟล์และ / หรือเปลี่ยนแปลงเจ้าของ


0

ฉันอยากจะแนะนำสิ่งที่ HomeBrew บอกว่าใช้ httpd โดย sudo เสมอ ที่นั่นหากคุณทำ ps -aef | grep httpd คุณจะเห็นรายการทำงานอยู่ การทำโดยไม่ใช้ sudo จะไม่สร้างเอาต์พุต ps ที่อาจทำให้ httpd แสดงผลไม่ถูกต้องไม่ทำงาน

นอกจากนี้ฉันไม่แน่ใจว่ามีการกำหนดค่าที่แตกต่างกันหรือเหมือนกันในทั้งสองกรณี ฉันติดตั้ง PHP และสร้างไฟล์ test.php ด้วย phpinfo ในไดเรกทอรี DocumentRoot หากคุณเริ่ม apache ด้วย sudo คุณอาจเห็น phpinfo กับ localhost / test.php ในขณะที่ใช้บริการ Brew เริ่ม httpd จะทำให้คุณมีข้อผิดพลาดถ้า DocumentRoot อยู่ในพื้นที่ที่จำเป็นต้องเข้าถึงราก

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