In welcher Reihenfolge lädt Apache conf-Dateien und welche?


10

Ich betrachte einen CentOS 6.5-Server mit einem installierten Webframework, der im Laufe der Jahre von vielen hinzugefügt wurde. Es gibt ungefähr 5 aktive .conf-Dateien in / conf, einschließlich httpd.conf.

In httpd.conf lautet das Include

Include conf.d/*.conf

und das erfasst alle Dateien in diesem Verzeichnis, aber ohne eine bestimmte Reihenfolge, die mir bekannt ist, und was ist mit dem Verzeichnis / conf (no .d)?

Gibt es eine Einstellung, die die Ladereihenfolge angibt, oder werden sie nur von az übernommen?

Ich bin nicht der Serveradministrator, ich bin ein Entwickler und das Problem liegt in den Pfaden zum Hochladen von Dateien in ein / Temp-Verzeichnis, in denen ich überprüft habe, ob der angegebene Pfad für die Dateien, mit denen ich mich befasse, korrekt ist.

Die erste Frage lautet also:

Lädt Apache alles aus / conf oder ist irgendwo eine Liste angegeben?

Die 2. Frage wäre:

In welcher Reihenfolge lädt Apache die Dateien alphabetisch?

Zuletzt:

Wird eine Datei aufgenommen, die nicht auf .conf endet ? Wenn ich zum Beispiel etwas benenne, das myconfig.conf.old ist, überspringt Apache es dann?

Antworten:


14

Die Reihenfolge ist alphabetisch. Es wird nur geladen, was der Include-Pfad angibt. Im Falle von Include conf.d/*.confApache werden alle Dateien mit Namen geladen, die auf enden .conf.

Dies ist ein Auszug aus der Apache-Dokumentation :

Platzhalterzeichen im Shell-Stil (fnmatch ()) können verwendet werden, um mehrere Dateien gleichzeitig in alphabetischer Reihenfolge einzuschließen . Wenn Include auf ein Verzeichnis und nicht auf eine Datei verweist, liest Apache außerdem alle Dateien in diesem Verzeichnis und in jedem Unterverzeichnis. Das Einschließen ganzer Verzeichnisse wird jedoch nicht empfohlen, da es leicht ist, versehentlich temporäre Dateien in einem Verzeichnis zu belassen, das dazu führen kann, dass httpd fehlschlägt.


Vielen Dank, das beantwortet sicherlich die Fragen 1 und 2. Ich habe die Apache-Dokumente durchgesehen, aber keine Antwort gefunden.
Chrtp

Im Großen und Ganzen (die Reihenfolge der Konfigurationselemente überschreibt frühere Elemente) ist dies korrekt. Sicher, wenn sich die Befehle im selben Konfigurationsabschnitt befinden. Es ist jedoch beispielsweise möglich AllowOverride, Konfigurationselemente mit config in einer .htaccessDatei zu überschreiben .
Verdächtiger

Entschuldigung, ich habe meinen Kommentar bearbeitet, bevor ich Ihren gesehen habe. In diesem Fall gibt es keinen .htaccess, aber es gibt eine Datei, die mit 't' beginnt und alles andere überschreibt. Ich werde die Datei umbenennen oder verschieben.
Chrtp

1
@chrtp, und warum würde eine Datei, die mit beginnt, talles andere überschreiben?
Andrew Savinykh

1

Apache lädt eine zusätzliche Konfiguration basierend auf der Direktive "Include". Es sieht wahrscheinlich so aus:

Include conf.d/*.conf

Es enthält also offensichtlich alles in "conf.d", was wie "* .conf" aussieht.

Um es noch verrückter zu machen, können Sie eine beliebige Anzahl von Verzeichnissen mit "include" hinzufügen, die alle ungefähr die gleichen Konfigurationsdateien enthalten können, die sich beim Start gerne gegenseitig überschreiben würden ... und dann selbst überschrieben werden durch die .htaccess-Datei in verschiedenen gehosteten Verzeichnissen.

Soweit ich das beurteilen kann, ist httpd.conf zuerst, gefolgt von den Verzeichnissen in der Reihenfolge, in der sie enthalten sind, und dann alphabetisch von dort.

Gute Zeiten. Sie können apachectl -t oder apachectl configtest verwenden, um eine Vorstellung davon zu bekommen, ob Ihre Konfiguration Probleme verursachen wird oder nicht.


1
Vielen Dank, es sieht so aus, als hätte jemand eine Datei namens template.conf dort gelassen, die natürlich zuletzt geladen wird und dann alle anderen Dateien überschreibt, die den Pfad zu / Temp angeben. Ich kann nur raten, was sonst noch damit kaputt ist!
Chrtp

1
@chrtp Um die Heiterkeit zu erhöhen, können Direktiven zur Laufzeit mit -C (zum Hinzufügen vor dem Lesen von Konfigurationsdateien) und -c (zum Lesen nach Konfigurationsdateien) angegeben werden, sodass Sie eine ganz andere Konfiguration über die Befehlszeile beziehen können beim Start.
Satanicpuppy

1

Wenn Sie die Reihenfolge ändern möchten, öffnen Sie einfach die erste conf-Datei im Verzeichnis sites-available und fügen Sie vor dem ersten VirtualHost *: 80 Ihren virtuellen Hostcode hinzu.

In meinem Fall möchte ich, dass hub.xxx.com.conf vor bayxxx.com.conf steht. Also öffne ich hub.xxx.com.conf und platziere den virtuellen Host am Anfang einer Datei

Zum Beispiel:

<VirtualHost *:80>
    DocumentRoot /www/hub.xxx.com/www/root
    ServerName hub.xxx.com
    ServerAlias *.hub.xxx.com
    <Directory "/www/hub.xxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /www/bayxxx.com/www/root
    ServerName bayxxx.com
    ServerAlias www.bayxxx.com
    <Directory "/www/bayxxx.com/www/root">
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.