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.