Jak rozpoznać, którego pliku konfiguracyjnego używa Apache?

36

Próbuję skonfigurować wirtualne hosty w systemie Mac OS X. Zmieniłem httpd.conf i zrestartowałem serwer, ale nie miałem szczęścia w jego uruchomieniu. Ponadto zauważam, że nie wyświetla plików w DocumentRoot wspomnianym w httpd.conf (Libraries / WebServer / Documents), ale w innym katalogu (/ usr / local / apache2 / htdocs). Nigdzie nie widzę wspomnianego folderu w httpd.conf. Co więcej, PHP działa, ale linia „LoadModule php5_module” jest skomentowana. To sprawia, że ​​myślę, że używa innego pliku .conf. Jak mogę dowiedzieć się, która konfiguracja faktycznie jest ładowana?

Aktualizacja: Właśnie usunąłem, że httpd.conf i apache zachowują się tak samo po restarcie, więc na pewno go nie użyłem!

Claudiu
źródło

Odpowiedzi:

45

W każdej aplikacji * nix najłatwiejszą metodą jest zapytanie samego pliku binarnego. W przypadku httpd wyobrażam sobie, że proces byłby mniej więcej taki:

$ 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"

Jak widać - mój OS X mówi, że plik binarny, jeśli nie zostanie inaczej skierowany, użyje pliku konfiguracyjnego: /private/etc/apache2/httpd.conf

Jeśli to nie pomoże, być może propozycja Christophera dotycząca znalezienia jest kolejnym krokiem.

Zayne S. Halsall
źródło
2
To nie zadziała, jeśli używasz Apache przez Server.app. W takim przypadku potrzebujesz listy procesów w odpowiedzi z @msanford serverfault.com/a/155114/187798, która pokazuje, że Server.app uruchamia httpd z innym plikiem konfiguracyjnym, jak pokazano tutaj z mojej instalacji (Mavericks)/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Jason S
nie działa również w przypadku używania apache zainstalowanego za pośrednictwem Macports - odpowiedź msandord działa dla mnie!
pgee70
10

Próbować

ps ax | grep httpd

i powinieneś (może) otrzymać wynik jak

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

Dodatkowo, jak dokładnie restartujesz serwer? Po prostu ciekawi w przypadku, gdy nie są jakoś faktycznie ponownego odczytu pliku konfiguracyjnego.

msanford
źródło
hm, nie ma na nim -fflagi
Claudiu
1
+1 Ponieważ jest to jedyna odpowiedź, która działa we wszystkich przypadkach, to znaczy, jeśli konfigurujesz Apache sam lub używasz Apache przez Server.app
Jason S
2

Ponieważ niektóre konfiguracje używają aplikacji Server, brew lub cokolwiek innego, i ponieważ jeden liniowiec FTW:

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

To polecenie wykonuje następujące czynności:

  • Znajdź aktywny proces httpd
  • Informacje o konfiguracji wyjściowej
  • Grep plik konfiguracyjny

Testowane na Sierra i El Capitan

Creaforge
źródło
Jest $to ważne (w tym przypadku nie jest to wiersz polecenia). Jeśli konwertuje instrukcję w parens na polecenie, do którego przekazujemy -Vflagę. Pozostawienie go powoduje: „błąd składni w pobliżu nieoczekiwanego tokena` -V '”.
Tom Auger
0

Najpierw sprawdź, który jest skrypt startowy dla Apache. W systemie macOS powinien to być / Library / LaunchDaemons. Może to obejmować katalog roboczy lub podobne informacje.

Możesz również debugować sam uruchomiony proces za pomocą narzędzia dtruss. Możesz połączyć się z uruchomionym procesem za pomocą dtruss -p <pid>. Następnie, jeśli HUP to, prawdopodobnie możesz poruszyć wyjście, aby zobaczyć, skąd pobiera swoją konfigurację. Alternatywnie, po prostu uruchom Apache, dzwoniąc bezpośrednio do dtruss dtruss start_apache_command.

Zawsze możesz po prostu przeprowadzić ogólnosystemowe wyszukiwanie httpd.conf za pomocą find / -name httpd.conf.

Christopher Karel
źródło