Wie kann ich die vollständige httpd-Konfiguration anzeigen?

79

Ich versuche herauszufinden, was die vollständige Konfiguration eines httpd-Setups ist.

Alle Konfigurationsdateien sind in verschiedenen Dateien verteilt (/etc/httpd/conf.d, httpd.conf, verschiedene Mod-Konfigurationen).

Gibt es eine Möglichkeit, die endgültige httpd-Konfiguration aufzulisten?
Wie die gesamte laufende Setup-Konfiguration in einer einzigen Datei?

Gnafu
quelle
12
apachectl -Szum Ausführen der Konfiguration, apachectl -Mum geladene Module
anzuzeigen
5
Abgesehen davon erhalten apachectl -SSie weder "die vollständige Konfiguration" noch "die gesamte laufende Setup-Konfiguration in einer einzigen Datei".
Frederick Nord
Stack Overflow ist eine Site für Programmier- und Entwicklungsfragen. Diese Frage scheint nicht zum Thema zu gehören, da es nicht um Programmierung oder Entwicklung geht. Weitere Informationen zu den Themen finden Sie hier in der Hilfe. Vielleicht Web - Anwendungen Stapel von Exchange , Webmaster Stapel von Exchange oder Unix & Linux - Stack Wechsel wäre ein besserer Ort zu fragen sein.
JWW
@imme Ich finde es amüsant, wie dein erster "verwandter" Link genau diese Frage ist. Ich finde es auch sehr amüsant, dass Sie auf alle Links, auf die Sie verwiesen haben, denselben Kommentar kopiert / eingefügt haben. Lustig :)
Hickory420

Antworten:

50

Wie von arco444 angegeben, können Sie apachectl -Seine Übersicht über die VirtualHosts anzeigen, die derzeit in den Konfigurationen ausgeführt werden, und apachectl -Malle aktuell geladenen Module anzeigen. Mir ist kein Tool bekannt, mit dem die ausführliche Ausgabe aller analysierten Konfigurationen (und in welcher Reihenfolge) angezeigt werden kann Sie wurden beim Start von httpd analysiert. Ich würde jedoch empfehlen, dass Sie sich mit der allgemeinen Struktur der httpd-Konfigurationsdateien vertraut machen :

Von besonderer Bedeutung für Ihre Frage: Die 'Haupt'-Apache-Konfigurationsdatei befindet sich in /etc/httpd/conf/httpd.conf(im Bereich von Zeile 221 einer Standard-httpd-Installation aus den in CentOS 6 enthaltenen Repos, die Sie vermutlich basierend auf Ihren Post-Tags verwenden). und die 'zusätzlichen' Konfigurationsdateien befinden sich in /etc/httpd/conf.dund müssen explizit in der Hauptkonfigurationsdatei enthalten sein. Wenn Sie beispielsweise in der httpd.confDatei nach dem Begriff ' Include' suchen, finden Sie die Zeile, in Include conf.d/*.confder alle Erweiterungsdateien .confim Unterverzeichnis enthalten sind conf.d- in alphabetischer Reihenfolge. Sie sollten sich daher mit der Bedeutung der Analyse von Konfigurationsdateien vertraut machen irgendwann wenn möglich.

Abgesehen davon empfehle ich, wenn Sie einen Shell-basierten Texteditor wie vim verwenden, standardmäßig die Zeilennummerierung und Syntaxhervorhebung zu aktivieren, damit sich so lange Konfigurationsdateien leichter analysieren und navigieren lassen - im Fall von vim Dazu erstellen Sie in Ihrem Home-Verzeichnis eine Datei mit dem Namen .vimrc(oder hängen sie an eine vorhandene an) und fügen die folgenden Zeilen hinzu:

set nu
syntax on
BE77Y
quelle
Wir verwenden Apache 2.2 unter CentOS. Apachectl ist jedoch nicht verfügbar.
user674669
16

Wie in der Apache HTTP Server-Dokumentation beschrieben

Wenn die Konfigurationsdefinition -DDUMP_CONFIG festgelegt ist, speichert mod_info die vorab analysierte Konfiguration während des Serverstarts auf stdout.

httpd -DDUMP_CONFIG -k start

DUMP_CONFIGerfordert mod_infoaktiviert : a2enmod info!

Gehen Sie in Ubuntu wie folgt vor

sudo apache2ctl -DDUMP_CONFIG

Wenn Sie die Zeilennummern entfernen möchten, tun Sie dies

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$"

oder in eine Datei umleiten

sudo apache2ctl -DDUMP_CONFIG | grep -vE "^[ ]*#[ ]*[0-9]+:$" > /path/to/dump.conf

Bekannte Einschränkungen

mod_info liefert seine Informationen durch Lesen der analysierten Konfiguration und nicht durch Lesen der ursprünglichen Konfigurationsdatei. Aufgrund der Art und Weise, wie der analysierte Konfigurationsbaum erstellt wird, gibt es einige Einschränkungen:

  • Anweisungen, die sofort ausgeführt werden, anstatt in der analysierten Konfiguration gespeichert zu werden, werden nicht aufgelistet. Dazu gehören ServerRoot, LoadModule und LoadFile.
  • Anweisungen, die die Konfigurationsdatei selbst steuern, z. B. Include, werden nicht aufgelistet, die enthaltenen Konfigurationsanweisungen jedoch.
  • Kommentare werden nicht aufgelistet. (Dies kann als eine Funktion angesehen werden.)
  • Konfigurationsanweisungen aus .htaccess-Dateien werden nicht aufgelistet (da sie nicht Teil der permanenten Serverkonfiguration sind).
  • Containeranweisungen, wie sie normalerweise aufgeführt sind, aber mod_info kann die Zeilennummer für das Schließen nicht ermitteln.
  • Von Modulen von Drittanbietern wie mod_perl generierte Anweisungen werden möglicherweise nicht aufgelistet.
Wolfrevo
quelle
0

Wenn ich zu viele Apache-Konfigurationen pflegen musste, hatte ich mich mit einem Skript ausgestattet, das genau das tat, was Sie gefragt hatten. Es hat mir sehr geholfen.

awk -v pc=$APCALL '

  NR == 1 {
    if (pf != "") {
      print "### End of "  pf  " ###"
    }
    print "### "  FILENAME  " ###"
    pf = FILENAME
  }
  { if (pc || ( $1 !~ "^#" && $0 != "" ) ) {
       printf "%5d %s\n", NR, $0
    }
  }
  $1 ~ /^Include(Optional)?$/ {
    $1 = ""
    system("for ACF in " $0 "; do apache_config.sh $ACF; done" )
  }
  END {
      print "### End of "  pf  " ###"
  }
' "$@"

Sie können die Umgebungsvariable APCALL festlegen, wenn Sie die Kommentare und Leerzeilen sehen möchten, was ich meistens nicht getan habe. Vorsichtsmaßnahme: Es muss von ServerRoot ausgeführt werden.

Gerard H. Pille
quelle
0

Ich habe ein Skript (leider in Perl; verzeihen Sie mir, es ist alt), das die Konfigurationsdateien glättet, Kommentare entfernt (standardmäßig) und # FILEKommentare enthält , damit Sie herausfinden können, welche Datei das Gesuchte enthält.

Ich habe es mit Apache httpd geschrieben, obwohl es auch mit Oracle OHS verwendet wird

https://github.com/cameronkerrnz/scriptorium/blob/master/httpd-dump-config

Besonders nützlich zum Vergleichen von Konfigurationen auf verschiedenen Maschinen mit SSH und diff / meld / etc.

Beispiel:

httpd-dump-config | grep -i -e '# FILE:' -e servername -e serveralias
# FILE: /etc/httpd/conf/maintenance-curtain.conf
# FILE: /etc/httpd/conf.d/proxy.conf
# FILE: /etc/httpd/otago/secure-www.alias.conf
# FILE: /etc/httpd/conf.d/proxy.conf
    ServerName www.otago.ac.nz
    ServerAlias otago.ac.nz

Hier ist ein Beispiel mit diff (CLI) und meld (GUI):

diff -Bb <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config)

meld <(httpd-dump-config) <(ssh root@revproxy2 httpd-dump-config) &

Ich habe dies im Laufe der Jahre häufig verwendet, als ich durch eine Konfiguration mit Tausenden von Konfigurationszeilen navigierte, die über viele Dateien verteilt waren.

Cameron Kerr
quelle