W jakiej kolejności Apache ładuje pliki conf, a które?

10

Patrzę na serwer CentOS 6.5 z zainstalowanym webframework, który został dodany przez wiele lat. W / conf wygląda 5 aktywnych plików .conf, w tym httpd.conf.

W httpd.conf włączone są odczyty

Include conf.d/*.conf

i to pobiera wszystkie pliki w tym katalogu, ale bez określonej kolejności, o której wiem, a co z katalogiem / conf (no .d)?

Czy istnieje ustawienie określające kolejność ładowania, czy są one pobierane z az?

Nie jestem administratorem serwera, jestem programistą, a problem leży w ścieżkach przesyłania plików do katalogu / Temp, gdzie sprawdziłem, czy podana ścieżka jest prawidłowa dla plików, którymi się zajmuję.

Pierwsze pytanie brzmi:

Czy Apache ładuje wszystko z / conf lub czy jest gdzieś określona lista?

Drugie pytanie brzmiałoby:

W jakiej kolejności Apache ładuje pliki alfabetycznie?

W końcu:

Czy dołączony jest plik, który nie kończy się na .conf ? Na przykład, jeśli podam nazwę myconfig.conf.old, czy Apache to pominie?

chrtp
źródło

Odpowiedzi:

14

Kolejność jest alfabetyczna. Ładuje tylko to, co określa ścieżka Uwzględnij. W przypadku Include conf.d/*.confapache załaduje wszystkie pliki o nazwach kończących się na .conf.

Oto fragment dokumentacji Apache :

Znaki wieloznaczne w stylu powłoki (fnmatch ()) mogą być używane do dołączania kilku plików jednocześnie, w kolejności alfabetycznej . Ponadto, jeśli opcja Dołącz wskazuje na katalog, a nie plik, Apache odczyta wszystkie pliki w tym katalogu i dowolnym podkatalogu. Jednak nie zaleca się dołączania całych katalogów, ponieważ łatwo jest przypadkowo zostawić pliki tymczasowe w katalogu, który może spowodować awarię httpd.

podejrzenie
źródło
Dziękuję, to z pewnością odpowiada na pytania 1 i 2. Przeglądałem dokumenty Apache, ale nie mogłem znaleźć odpowiedzi.
chrtp
Zasadniczo (kolejność elementów konfiguracji zastępuje wcześniejsze elementy), która jest poprawna. Z pewnością, jeśli polecenia znajdują się w tej samej sekcji konfiguracji. Ale na przykład można (za pomocą AllowOverride) zastąpić elementy konfiguracji za pomocą config w .htaccesspliku.
podejrzany
Przepraszam, edytowałem swój komentarz, zanim go zobaczyłem. W tym przypadku nie ma pliku .htaccess, ale istnieje plik zaczynający się od „t”, który przesłania wszystko inne. Mam zamiar zmienić nazwę lub przenieść plik.
chrtp
1
@chrtp i dlaczego plik zaczynający się od tzastępuje wszystko inne?
Andrew Savinykh
1

Apache ładuje dodatkową konfigurację na podstawie dyrektywy „Include”. Prawdopodobnie wygląda to tak:

Include conf.d/*.conf

Oczywiście zawiera wszystko w „conf.d”, które wygląda jak „* .conf”.

Aby uczynić to jeszcze bardziej szalonym, możesz dodać dowolną liczbę katalogów z „włącz”, z których wszystkie mogą zawierać w przybliżeniu te same pliki konfiguracyjne, które wszystkie chętnie zastąpiłyby się przy uruchamianiu ... A potem same zostałyby nadpisane przez plik .htaccess w różnych hostowanych katalogach.

O ile wiem, najpierw httpd.conf, a następnie katalogi w kolejności, w jakiej są uwzględnione, a następnie stamtąd alfabetycznie.

Dobre czasy. Możesz użyć apachectl -t lub apachectl configtest, aby dowiedzieć się, czy twoja konfiguracja spowoduje problemy.

Satanicpuppy
źródło
1
Dziękuję, wygląda na to, że ktoś zostawił tam plik o nazwie template.conf, który oczywiście ładuje się ostatni, a następnie zastępuje inne pliki, które określają ścieżkę do / Temp. Mogę tylko zgadywać, co jeszcze tam zostało zerwane!
chrtp
1
@chrtp Aby dodać do wesołości, dyrektywy można określić w środowisku wykonawczym za pomocą -C (do dodania ich przed odczytem plików konfiguracyjnych) i -c (do odczytania ich po plikach konfiguracyjnych), aby można było pobrać całą inną konfigurację z wiersza poleceń na starcie.
Satanicpuppy
1

Chcę zmienić kolejność, po prostu otwórz pierwszy plik conf w katalogu witryn dostępnych i przed pierwszym VirtualHost *: 80 dodaj kod wirtualnego hosta.

W moim przypadku chcę, aby hub.xxx.com.conf był przed bayxxx.com.conf. Więc otwieram hub.xxx.com.conf i umieszczam wirtualny host na początku pliku

Na przykład:

<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>
Pavel
źródło