In quale ordine Apache carica i file conf e quali?


10

Sto guardando un server CentOS 6.5 con un webframework installato che è stato aggiunto nel corso degli anni da molti. Esistono quelli che sembrano 5 file .conf attivi in ​​/ conf, incluso httpd.conf.

In httpd.conf la lettura include

Include conf.d/*.conf

e questo prende tutti i file in quella directory, ma senza alcun ordine specifico di cui io sia a conoscenza, e quindi che dire della directory / conf (no .d)?

Esiste un'impostazione che indica l'ordine di caricamento o sono semplicemente presi da az?

Non sono l'amministratore del server, sono uno sviluppatore e il problema risiede nei percorsi per il caricamento dei file in una directory / Temp, dove ho verificato che il percorso specificato sia corretto per i file di cui mi occupo.

Quindi, la prima domanda è:

Apache carica tutto da / conf o esiste un elenco specificato da qualche parte?

La seconda domanda sarebbe:

In quale ordine Apache carica i file, in ordine alfabetico?

Infine:

Viene incluso un file che non termina in .conf ? Ad esempio, se nominerò qualcosa myconfig.conf.old, Apache lo salterà?

Risposte:


14

L'ordine è alfabetico. Carica solo ciò che specifica il percorso Includi. Nel caso di Include conf.d/*.confapache verranno caricati tutti i file con nomi che terminano con .conf.

Questo è un estratto della documentazione di Apache :

I caratteri jolly in stile shell (fnmatch ()) possono essere utilizzati per includere più file contemporaneamente, in ordine alfabetico . Inoltre, se Includi punta a una directory, anziché a un file, Apache leggerà tutti i file in quella directory e in qualsiasi sottodirectory. Ma non è consigliabile includere intere directory, poiché è facile lasciare accidentalmente file temporanei in una directory che può causare il fallimento di httpd.


Grazie, questo risponde sicuramente alle domande 1 e 2. Ho cercato i documenti di Apache ma non sono riuscito a trovare la risposta.
chrtp,

In generale (l'ordine degli elementi di configurazione ha la precedenza su quelli precedenti) che è corretto. Certamente se i comandi sono nella stessa sezione di configurazione. Ad esempio, è possibile (usare AllowOverride) sovrascrivere gli elementi di configurazione con config in un .htaccessfile.
suspectus,

Scusa, ho modificato il mio commento prima di vedere il tuo. Non c'è .htaccess in questo caso, ma c'è un file che inizia con 't' che ha la precedenza su tutto il resto. Ho intenzione di rinominare o spostare il file.
chrtp,

1
@chrtp, e perché un file che inizia con tsovrascriverà tutto il resto?
Andrew Savinykh,

1

Apache carica una configurazione aggiuntiva basata sulla direttiva "Includi". Probabilmente si presenta così:

Include conf.d/*.conf

Quindi, ovviamente, include tutto in "conf.d" che assomiglia a "* .conf".

Per renderlo ancora più folle, è possibile aggiungere un numero arbitrario di directory con "include" che potrebbero contenere all'incirca gli stessi file di configurazione, che tutti si sarebbero felicemente sovrascritti all'avvio ... E poi si sarebbero sopraffatti dal file .htaccess in varie directory ospitate.

Per quanto ne so, httpd.conf è prima, seguito dalle directory nell'ordine in cui sono incluse e poi in ordine alfabetico da lì.

Bei tempi. Puoi usare apachectl -t o apachectl configtest per avere un'idea del fatto che la tua configurazione possa causare problemi.


1
Grazie, sembra che qualcuno abbia lasciato lì un file chiamato template.conf che ovviamente carica per ultimo e quindi sovrascrive tutti gli altri file che specificano il percorso di / Temp. Posso solo immaginare cos'altro si sta rompendo con quello lì!
chrtp,

1
@chrtp Per aggiungere all'ilarità, le direttive possono essere specificate in fase di esecuzione usando -C (per aggiungerle prima di leggere i file di configurazione) e -c (per leggerle dopo i file di configurazione), in modo da poter generare una configurazione completamente diversa dalla riga di comando all'avvio.
Satanicpuppy,

1

Voglio cambiare l'ordine basta aprire il primo file di configurazione nella directory dei siti disponibili e prima di VirtualHost *: 80 aggiungere il tuo codice host virtuale.

Nel mio caso voglio hub.xxx.com.conf prima di bayxxx.com.conf. Quindi apro hub.xxx.com.conf e posiziono l'host virtuale all'inizio di un file

Per esempio:

<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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.