Apache2 (Httpd) tidak berfungsi setelah pembaruan ke High Sierra

15

Saya memiliki masalah di mana Apache tidak akan memulai setelah memperbarui ke High Sierra 10.13.1. Tidak ada yang ditampilkan di log kesalahan, tetapi ketika saya mencoba untuk apachectl starttidak terjadi apa - apa. Jika saya menjalankan apachectl configtestsaya menerima "Sintaks OK

Saya telah menggunakan perintah seperti sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plisttidak berhasil. Apache tidak akan mulai. Saya bisa berlari sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.httpd.plistdan itu juga tidak berhasil.

Saya melihat daftar layanan pembuatan dan httpd muncul dalam daftar bersama dengan proses lain (mysql) tetapi status httpd menunjukkan kuning "mulai" bukan yang hijau.

Saya telah mencoba banyak hal berbeda, dan apa yang saya temukan adalah bahwa jika saya melihat ke file system.log saya temukan com.apple.xpc.launchctl[1] (homebrew.mxcl.httpd24[11780]): Service exited with abnormal code:1

Jika saya menjalankan apachectl start, perintah itu tampaknya berfungsi, tetapi ketika saya menjalankan perintah stop saya mendapatkan "httpd (tidak ada file pid) tidak berjalan.
Saya juga menerima output dari com.; Apple.xpc.launchd [1] ( org.apache.httpd): Silakan beralih dari OnDemand ke KeepAlive.

Apakah ada sesuatu dengan High Sierra yang mencegah Apache berjalan ketika berjalan baik di Sierra?

Alcyeonnero
sumber
1
Anda sedang mencampur Apache httpd brew dan Apple httpd (yang daemon peluncurannya memulai binari yang berbeda)! Dari mana Anda mendapatkan status httpd (yaitu indikator kuning vs. hijau)? Panduan pengaturan awal manakah yang Anda gunakan?
klanomath
Saya tidak mencampurkannya, saya akan melalui langkah-langkah menggunakan mencoba minuman dan Apple apache, Ketika saya melakukan daftar brew services list' I receive a yellow indicator, I checked with all of the available users and ran layanan minuman` dan mereka semua menunjukkan indikator yang sama. Adapun panduan pengaturan, Ansible digunakan untuk mengatur apache. Ini telah dilakukan pada 5 MacBook lain, mereka masih menjalankan Sierra. MacBook yang satu ini memiliki masalah dan Apple menjalankan diagnostik dan mereset OS, sambil memperbarui OS ke High Sierra
Alcyeonnero
Dengan pencampuran yang saya maksud: Anda memiliki setidaknya dua binari apachectl dan httpd diinstal (dan dua file konfigurasi). Biasanya apachectl brew lebih disukai (karena konten default dari variabel PATH, Anda mungkin berbeda). Aplikasi buatan AFAIR tidak akan memulai httpd Apple dengan opsi mulai default (yaitu apachectl start). Sama dengan ... configtest!
klanomath
Dengan "Ansible digunakan untuk menyiapkan apache" maksud Anda panduan ini: Mac Development Ansible Playbook ? Lebih baik menambahkan tautan ke panduan how-to atau set-up. Berbagai panduan pengaturan untuk berbagai versi macOS semuanya berisi konfigurasi yang sedikit berbeda / buat env yang berbeda.
klanomath
Saya baru saja memperbarui ke High Sierra akhir pekan ini, dan saya mengalami masalah yang sama persis. Saya telah menggunakan httpdformula Homebrew , dan sekarang apache tidak merespons. Ketika saya melakukannya brew services list, saya juga mendapatkan starteduntuk httpd dengan warna kuning, dan ketika saya menjalankan sudo apachectl stop, itu memberitahu saya bahwahttpd (pid 87?) not responding.
wonder95

Jawaban:

16

Menurut pendapat saya, Anda menyembunyikan berbagai daemon peluncuran httpd / mekanisme start dengan mengeksekusi terlalu banyak perintah terkait httpd.

Dengan homebrew dan homebrew's apache-httpd diinstal dan PATH default Anda memiliki enam cara untuk memulai 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

Jika Anda telah menyalin file homebrew.mxcl.httpd.plist secara manual ke ~ / Library / LaunchAgents / atau / Library / LaunchDaemons / Anda memiliki dua opsi lagi untuk memulainya dengan memuatnya (sudo) launchctl load ....

Jika Anda tidak memodifikasi file konfigurasi httpd atau skrip apachectl, cabang Apple akan menggunakan file httpd.conf Apple di / var dan DocumentRoot di folder / Library.

Cabang homebrew menggunakan subfolder di / usr / local /.

Beberapa metode peluncuran tidak akan berfungsi jika Anda mengikat port httpd ke port yang lebih rendah dari 1024!

Jika Anda menggunakan (sudo) brew services ...untuk memulai httpd, Anda harus menggunakan (sudo) brew services listperintah yang tepat untuk memeriksa status:

Jika Anda memulainya sebagai root lalu daftarkan dengan root privs:

sudo brew services start httpd > sudo brew services list

atau dengan privasi pengguna:

brew services start httpd> brew services list.


Untuk mengatasi masalah Anda, keluarkan Apple httpd:

  • sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
  • hapus homebrew.mxcl.httpd.plist yang diinstal secara manual
  • hentikan layanan httpd homebrew dengan (sudo) brew services stop httpd
  • hentikan httpd apa pun yang dimulai oleh apachectl:

    apachectl stop
    sudo apachectl stop
    sudo /usr/sbin/apachectl stop
    
  • Buka Activity Monitor dan periksa bahwa tidak ada proses httpd yang berjalan.
  • Mulai ulang

Sekarang - dengan asumsi Anda ingin menggunakan httpd homebrew di port istimewa - masukkan:

sudo brew services start httpd

Periksa mulai sukses dengan sudo brew services list.

klanomath
sumber
Saat mencoba perbaikan yang Anda berikan, saya menerima output yang sama seperti yang saya lakukan. apachectl stopmemberikan output httpd (no pid file) not runningdan ketika saya menjalankan sudo brew services httpd start sudo brew services list menunjukkan apache2 (httpd) starteddalam warna kuning Ketika saya mencoba mengakses apa pun yang berhubungan dengan halaman web saya tidak bisa. Saya bertanya-tanya apakah pembaruan ke 10.13 mengubah sesuatu di apache yang mencegahnya dimulai.
Alcyeonnero
14

Mengenai http homebrew, satu masalah yang baru-baru ini saya temui adalah file lama httpd.pid yang mencegah httpd mulai. Gejala itu apachectl startmengatakan httpd sudah berjalan, tetapi ternyata tidak.

Karena ada file lama di sini:

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

Solusi adalah menghapus file pid ini dan kemudian httpd dimulai.

Eduard Rozenberg
sumber
Bagus! ini adalah masalah saya ketika MBP saya memutuskan bahwa itu tidak akan bangun dari tidur dan saya harus menyalakannya.
frumbert
2
Solusi ini juga berfungsi di MacOS Mojave. Brew berpikir bahwa Apache sedang berjalan tetapi tidak ada httpdmonitor aktivitas. Ini memperbaikinya.
Vahid Amiri
Ini menyelamatkan saya dari banyak masalah!
SEJU
Ini juga bekerja untuk saya. Saya tidak dapat memuat situs web apa pun, dan terus mendapatkan ERR_CONNECTION_REFUSED. Ketika saya mencoba untuk membuat daftar layanan yang berjalan dengan brew services listsaya mendapatkan status kuning 'mulai' yang berarti ada sesuatu yang salah dengan status aktif server. Menghapus pid memperbaiki ini dan sekarang daftar layanan menunjukkan status aktif sebagai hijau 'dimulai' sebagai gantinya sekarang. Terima kasih untuk ini!
Mike Kormendy
Jika mesin Anda telah melakukan boot ulang dengan keras setelah kepanikan kernel / pemadaman listrik / dll. Ini kemungkinan menjadi masalah Anda. Terima kasih!
Dom Stubbs
2

Saya menghadapi hal yang sama setelah saya meng-upgrade ke High Sierra sebelumnya hari ini. Saya menemukan bahwa file apache berikut diganti dengan versi baru. Untungnya untuk semua file ini terdapat FILE ~ file sebelumnya di folder yang sama. Saya baru saja menyalin versi ~ sebelumnya kembali ke yang asli, restart apache dan semuanya baik-baik saja.

Dalam folder /etc/apache2:

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

Contoh:

cp /etc/apache2/httpd.conf~previous /etc/apache2/httpd.conf
Batalkan unmesh
sumber
Dalam folder tersebut /etc/apache2/extra/terdapat sekitar 10 file dengan ~ yang sebelumnya ditambahkan pada mereka, jika semua ini diubah, atau hanya dua yang Anda sebutkan dalam /etc/apache2/extra/folder
Alcyeonnero
Saya akan mulai dengan file httpd.conf dan httpd-vhosts.conf. Jika Anda memiliki pengaturan SSL maka Anda perlu memperbarui httpd-ssl.conf juga. Sisanya tergantung pada apakah Anda telah mengubahnya sebelumnya. Saya akan menggunakan diff untuk melihat apakah file telah berubah mis. Diff httpd.conf httpd.conf ~ sebelumnya pada semua file lainnya
Unmesh
Saya sudah mulai dengan file-file itu, itu tidak mengubah apa pun.
Alcyeonnero
1

Saya memiliki masalah yang sama

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

Ini berarti httpd keluar secara tidak normal.

Saya kemudian secara manual mulai httpd untuk melihat apa masalahnya

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

Melihat izin itu cukup jelas

> 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

Saya pikir saya mulai httpd sebagai root yang menyebabkan masalah ini. Saya menghapus file dan setelahnya

brew services restart httpd

semuanya baik-baik saja.

Hans Pikkemaat
sumber
1

Saya mengalami ini baru-baru ini. Penyebabnya adalah homebrew menginstal apache2 / httpd di folder yang dapat diakses pengguna dan berjalan sebagai pengguna (dengan menjalankan perintah: brew services start httpd).

Tidak berjalan sebagai pengguna biasa berarti httpd tidak dapat mendengarkan pada port istimewa (1024 dan di bawah).

Jadi, bahkan jika httpd.conf dikonfigurasi untuk mendengarkan 80 dan 443, httpd tidak dapat menerima permintaan melalui port tersebut.

Keunikannya adalah ketika Anda memulai httpd dengan menjalankan perintah: sudo apachectl start. Perintah ini memulai httpd sebagai pengguna root. Pengguna root diizinkan untuk mendengarkan pada port 80 dan 443. httpd kemudian menjatuhkan hak akses kembali sebagai pengguna _www.

Jadi jawaban singkatnya adalah menjalankan http homebrew pada port 80 dan 443 adalah memulainya menggunakan: sudo apachectl start. Anda juga dapat memulainya dengan: sudo brew services start httpd. Brew akan memberi tahu Anda mengklaim folder tertentu untuk root, yang saya kira baik-baik saja tetapi tidak diperlukan karena sudo apachectl start tidak memerlukan izin file dan / atau perubahan pemilik.

CaesarS
sumber
0

Saya akan menyarankan sebaliknya apa yang dikatakan HomeBrew selalu jalankan httpd oleh sudo. Oleh karena itu jika Anda melakukan ps -aef | grep httpd Anda akan melihatnya terdaftar berjalan. Melakukan tanpa sudo tidak menghasilkan ps output yang dapat memberikan kesan salah httpd tidak berjalan.

Saya juga tidak yakin apakah ada konfigurasi yang berbeda atau sama yang dimuat dalam kedua kasus. Saya menginstal PHP dan membuat file test.php dengan phpinfo di direktori DocumentRoot. Jika Anda memulai apache dengan sudo, Anda mungkin melihat phpinfo dengan localhost / test.php saat menggunakan layanan brew, mulai httpd akan memberi Anda kesalahan jika DocumentRoot berada di area di mana akses root diperlukan.

Sebastian
sumber