Bagaimana saya bisa tahu file konfigurasi mana yang digunakan Apache?

36

Saya mencoba mengatur host virtual di Mac OS X. Saya telah memodifikasi httpd.conf dan me-restart server, tetapi belum berhasil membuatnya berfungsi. Selain itu, saya perhatikan bahwa itu tidak melayani file dalam DocumentRoot yang disebutkan di httpd.conf (Libraries / WebServer / Documents), tetapi dalam direktori yang berbeda (/ usr / local / apache2 / htdocs). Saya tidak melihat folder ini disebutkan di mana pun di httpd.conf. Lebih jauh, PHP berfungsi, tetapi baris "LoadModule php5_module" dikomentari. Ini membuat saya berpikir menggunakan file .conf lain. Bagaimana saya bisa mengetahui konfigurasi mana yang sebenarnya dimuat?

Pembaruan: Saya baru saja menghapus bahwa httpd.conf dan apache berperilaku sama setelah restart, jadi pasti tidak menggunakannya!

Claudiu
sumber

Jawaban:

45

Dengan aplikasi * nix apa pun, metode termudah adalah dengan menanyakan biner itu sendiri. Dalam hal httpd, saya membayangkan prosesnya akan seperti ini:

$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V
Server version: Apache/2.2.11 (Unix)
Server built:   Jun 17 2009 14:55:13
Server's Module Magic Number: 20051115:21
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/private/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

Seperti yang Anda lihat - OS X saya mengatakan biner, jika tidak diarahkan sebaliknya, akan menggunakan file config: /private/etc/apache2/httpd.conf

Jika itu tidak membantu, mungkin saran Christopher untuk menemukan adalah langkah selanjutnya.

Zayne S Halsall
sumber
2
Ini tidak akan berfungsi jika Anda menggunakan Apache melalui Server.app Dalam hal ini, Anda akan memerlukan daftar proses dalam jawaban dari @msanford serverfault.com/a/155114/187798 yang menunjukkan bahwa Server.app mulai httpd dengan file konfigurasi yang berbeda seperti yang ditunjukkan di sini dari instalasi saya (Mavericks)/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Jason S
juga tidak berfungsi ketika menggunakan apache yang diinstal melalui macports - jawaban oleh msandord cocok untuk saya!
pgee70
15

Ada pertanyaan serverfault lain mengenai ini . Jika Anda menggunakan server berbasis debian yang dapat Anda gunakan apache2ctluntuk menentukan file config mana yang sedang digunakan:

apache2ctl -V

Lebih lanjut tentang ini:

Cara mengetahui apache httpd.conf yang digunakan saat runtime

chrisjlee
sumber
10

Mencoba

ps ax | grep httpd

dan Anda harus (mungkin) mendapatkan output seperti

1633   ??  Ss     0:00.21 /usr/sbin/httpd -f /etc/httpd.conf

Selain itu, bagaimana tepatnya Anda me-restart server? Hanya ingin tahu kalau-kalau Anda entah bagaimana sebenarnya tidak membaca ulang file konfigurasi.

msanford
sumber
hm tidak ada -fbendera di dalamnya
Claudiu
1
+1 Karena ini adalah satu-satunya jawaban yang berfungsi untuk semua kasus, yaitu jika Anda mengkonfigurasi Apache sendiri atau jika Anda menggunakan Apache melalui Server.app
Jason S
2

Karena beberapa konfigurasi menggunakan aplikasi Server, minuman atau apa pun, dan karena satu liner FTW:

$(ps ax -o comm | grep -m 1 httpd) -V | grep SERVER_CONFIG_FILE

Perintah ini melakukan hal berikut:

  • Temukan proses httpd aktif
  • Keluarkan info konfigurasi
  • Grep file konfigurasi

Diuji pada Sierra & El Capitan

Creaforge
sumber
Yang $penting (ini bukan prompt baris perintah dalam kasus ini). Jika mengubah pernyataan di parens menjadi perintah, yang kami melewati -Vbendera. Membiarkannya menghasilkan: "kesalahan sintaks dekat token tak terduga` -V '".
Tom Auger
0

Pertama, periksa yang merupakan skrip startup untuk Apache. Untuk macOS, seharusnya / Library / LaunchDaemons. Itu mungkin termasuk direktori kerja, atau informasi serupa.

Anda juga dapat men-debug proses yang berjalan itu sendiri dengan dtruss. Anda dapat terhubung ke proses yang sedang berjalan menggunakan dtruss -p <pid>. Kemudian, jika Anda HUP itu, Anda mungkin dapat meneliti output untuk melihat dari mana ia mengambil konfigurasi. Sebagai alternatif, mulai saja Apache dengan menelepon dtruss secara langsung dtruss start_apache_command.

Anda selalu bisa melakukan pencarian di seluruh sistem untuk httpd.conf find / -name httpd.conf.

Christopher Karel
sumber