Wie kann ich feststellen, welche Konfigurationsdatei Apache verwendet?

36

Ich versuche, virtuelle Hosts unter Mac OS X einzurichten. Ich habe httpd.conf geändert und den Server neu gestartet, aber ich hatte kein Glück, ihn zum Laufen zu bringen. Außerdem stelle ich fest, dass keine Dateien in der in httpd.conf (Libraries / WebServer / Documents) genannten DocumentRoot bereitgestellt werden, sondern in einem anderen Verzeichnis (/ usr / local / apache2 / htdocs). Ich sehe diesen Ordner nirgends in der httpd.conf erwähnt. Außerdem funktioniert PHP, aber die Zeile "LoadModule php5_module" ist auskommentiert. Das lässt mich denken, dass es eine andere .conf-Datei verwendet. Wie kann ich herausfinden, welche Konfiguration tatsächlich geladen wird?

Update: Ich habe gerade gelöscht, dass httpd.conf und apache sich nach dem Neustart gleich verhalten, also wurde es definitiv nicht verwendet!

Claudiu
quelle

Antworten:

45

Bei jeder * nix-Anwendung besteht die einfachste Methode darin, die Binärdatei selbst abzufragen. Im Falle von httpd würde der Prozess ungefähr so ​​aussehen:

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

Wie Sie sehen können - mein OS X sagt, dass die Binärdatei, wenn nicht anders angegeben, die Konfigurationsdatei verwendet: /private/etc/apache2/httpd.conf

Wenn das nicht hilft, ist vielleicht Christophers Vorschlag, etwas zu finden, der nächste Schritt.

Zayne S. Halsall
quelle
2
Dies funktioniert nicht, wenn Sie Apache über die Server.app verwenden. In diesem Fall benötigen Sie die Prozessliste in der Antwort von @msanford serverfault.com/a/155114/187798, aus der hervorgeht, dass die Server.app httpd startet mit einer anderen Konfigurationsdatei als hier gezeigt von meiner Installation (Mavericks)/usr/sbin/httpd -D FOREGROUND -f /Library/Server/Web/Config/apache2/httpd_server_app.conf -D WEBSERVICE_ON
Jason S
funktioniert auch nicht mit über macports installiertem apache - answer by msandord funktioniert bei mir!
pgee70
10

Versuchen

ps ax | grep httpd

und du solltest (könntest) Ausgabe bekommen wie

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

Wie genau starten Sie den Server außerdem neu? Einfach nur neugierig, falls Sie irgendwie nicht wirklich neu Lesen der Konfigurationsdatei.

msanford
quelle
hm, es hat nicht die -fFlagge drin
Claudiu
1
+1 Da dies die einzige Antwort ist, die in allen Fällen funktioniert, ist dies der Fall, wenn Sie Apache selbst konfigurieren oder Apache über Server.app verwenden
Jason S
2

Weil einige Konfigurationen Server-App, Brew oder was auch immer verwenden und weil man FTW einsetzt:

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

Dieser Befehl führt Folgendes aus:

  • Suchen Sie einen aktiven httpd-Prozess
  • Konfigurationsinfo ausgeben
  • Grep die Konfigurationsdatei

Getestet auf Sierra & El Capitan

Schmiede
quelle
Das $ist wichtig (in diesem Fall ist es nicht die Befehlszeile). If konvertiert die Anweisung in parens in einen Befehl, an den wir das -VFlag übergeben. Das Auslassen führt zu: "Syntaxfehler in der Nähe des unerwarteten Tokens -V".
Tom Auger
0

Überprüfen Sie zunächst, welches das Startskript für Apache ist. Für macOS sollte es / Library / LaunchDaemons sein. Dies kann ein Arbeitsverzeichnis oder ähnliche Informationen beinhalten.

Sie können auch den laufenden Prozess selbst mit dtruss debuggen. Sie können mit eine Verbindung zum laufenden Prozess herstellen dtruss -p <pid>. Wenn Sie dann HUPEN, können Sie wahrscheinlich über die Ausgabe blättern, um zu sehen, woher sie die Konfiguration bezieht. Alternativ starten Sie Apache einfach, indem Sie dtruss direkt mit aufrufen dtruss start_apache_command.

Sie können jederzeit eine systemweite Suche nach httpd.conf durchführen find / -name httpd.conf.

Christopher Karel
quelle