Configurazione avanzata di Apache 2 su sistemi Unix-like

In un precedente tutorial, abbiamo dato un'occhiata ad alcune delle più elementari, ma importanti, direttive di configurazione di Apache: a cosa servono e come modificarle per adattarle alle nostre esigenze. Per un sito web di base (forse uno con poche pagine HTML statiche), quelle semplici direttive potrebbero essere tutto ciò che devi sapere. È probabile, tuttavia, che sia necessario un sito Web più complesso; oggi guarderemo alcune direttive avanzate e le impostazioni di configurazione.

Il comportamento di Apache è controllato attraverso le impostazioni e le direttive applicate nei file di configurazione in testo normale che di solito terminano con l'estensione ".conf".

Il più importante .conf il file è httpd.conf, sebbene ciò dipenda dalla particolare installazione e distribuzione Linux (ad esempio, potrebbe essere chiamata) apache2.conf anziché). Questi file di configurazione generalmente si applicano al server nel suo insieme, anche se il server ospita più siti Web.

I file di configurazione per directory sono chiamati ".htaccess"file per impostazione predefinita e si trovano nella directory dei documenti pubblici del server Web. Ciò consente di applicare determinate direttive a determinate directory e alle relative sottodirectory, anziché all'intero server e a tutti i siti Web ospitati. Anche se non consigliato, è possibile modificare il nome del .htaccess file per qualcos'altro usando il AccessFileName direttiva, che può essere impostata in httpd.conf:

# # AccessFileName: il nome del file da cercare in ogni directory # per ulteriori direttive di configurazione. # AccessFileName .htaccess

Si prega di notare che htaccess non è un'estensione; è il nome del file. Sui sistemi operativi UNIX-like, il punto (.) che precede il nome di un file significa che il file è nascosto.

Considerando la loro posizione nel file system, non tutte le direttive possono essere applicate .htaccess file, in quanto alcuni potrebbero semplicemente non essere validi. Ogni riga in un file di configurazione deve iniziare con uno dei seguenti:

  • un #, indicando un commento
  • una direttiva valida
  • Uno spazio
  • una linea vuota

Se una linea non inizia con una delle opzioni di cui sopra, Apache invierà un messaggio di errore anziché avviare il servizio HTTP. Pertanto, è importante assicurarsi che la configurazione del server sia valida. Se una direttiva si estende su più righe, termina ogni riga con una barra rovesciata (\) prima di passare alla prossima direttiva.


Mantenimento della flessibilità

Il file .conf più importante è httpd.conf.

Mentre apporti le tue modifiche ai file di configurazione predefiniti, è meglio suddividere tali modifiche in file esterni (con nomi significativi, ovviamente) e includerli nel file di configurazione principale, utilizzando il includere direttiva. Se non è possibile separare le impostazioni dalle impostazioni predefinite del server, almeno abituati a commentare le vecchie impostazioni prima di introdurne di nuove. In questo modo sarà più semplice eseguire il rollback a qualsiasi versione di file, se necessario, e anche l'aggiornamento a una versione più recente del httpd.conf file con problemi minimi. Tutto quello che devi fare è copiare la nuova versione al posto del vecchio e reinserire i tuoi include alla fine del nuovo file (o almeno riapplicare le tue vecchie modifiche dopo aver commentato quelle predefinite nel nuovo file) . Per esempio:

... # Fine della configurazione predefinita di apache # Inizio della nuova configurazione e delle impostazioni # Include l'elenco delle porte Includi /etc/apache2/ports.conf # Include i frammenti di istruzioni generici Includi /etc/apache2/conf.d/ # Include la configurazione del modulo: Includi /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf

Come puoi vedere dall'esempio sopra, puoi includere un file specifico per nome, una directory (e tutti i file e le sottodirectory presenti) o più file usando i caratteri jolly.


Impostazioni avanzate

Nel mio precedente tutorial su Apache, hai imparato alcune direttive di base che controllano il comportamento di Apache. In questo tutorial, vedremo alcune direttive avanzate, a partire da .

Il Direttiva

Il direttiva consente di specificare le impostazioni e le direttive da applicare alle directory e alle sottodirectory. Questo ti dà la possibilità di fare ogni sorta di cose, come limitare l'accesso a certe directory e file, e accendere o spegnere determinate opzioni per certe directory, tra le altre cose.

Il i tag accettano un percorso e racchiudono un blocco di opzioni da applicare a quella directory e alle sue sottodirectory. Ecco un esempio:

 Opzioni Nessuna AllowOverride Nessuno Ordine Rifiuta, Consenti Rifiuta da tutti 

L'apertura tag in questo esempio specifica un percorso di /, che significa la directory radice e tutte le sue sottodirectory e file. Le impostazioni definite all'interno di i tag si applicano al / percorso (essenzialmente tutto nella radice).

Nota che htaccess non è un'estensione; è il nome del file.

Il Opzioni direttiva dichiara quali funzionalità del server sono valide per la directory specificata. In questo esempio, nessuna opzione è valida per / sentiero. Ma è possibile specificare un numero qualsiasi di opzioni, come consentire collegamenti simbolici, consentendo l'esecuzione di script CGI, consentendo l'inclusione di server e molti altri.

Il AllowOverride direttiva dice al server quali impostazioni sono state dichiarate all'interno di i tag da sovrascrivere se vengono ripristinati nel .htaccess file. Quando il server trova un .htaccess file, ha bisogno di sapere quali direttive dichiarate in quel file possono sovrascrivere le precedenti direttive di configurazione. Se AllowOverride è impostato per Nessuna, come mostrato nell'esempio sopra, quindi nessuna direttiva viene sovrascritta e nessuna ri-dichiarazione nel file .htaccess i file sono completamente ignorati.

Se la AllowOverride direttiva è impostata su Tutti, quindi qualsiasi direttiva ri-dichiarata nel .htaccess il file sovrascriverà le direttive di configurazione precedenti. AllowOverride può prendere specifici tipi di direttiva che possono essere ignorati mentre il resto verrà ignorato.

Negare e permettere controllare l'accesso alla directory specificata all'interno del tag di apertura e avere la priorità tramite il comando Ordine direttiva.

Nell'esempio sopra, Ordine Nega, Permetti significa che a tutti gli host di connessione o agli indirizzi IP viene negato l'accesso alla directory root, ad eccezione di quelli dichiarati come buoni host. Consenti ordine, Nega d'altra parte significherebbe che tutti gli host e gli IP devono essere autorizzati ad accedere alla directory radice eccetto quelli dichiarati come cattivi o in lista nera.

Il Rifiutato da tutti l'impostazione dichiara che l'accesso deve essere negato da tutti gli host. Poiché non è seguito da una whitelist, nessun host o IP ha accesso alla directory root (e questo è il modo in cui dovrebbe essere per motivi di sicurezza). A scopo dimostrativo SOLO, l'esempio seguente mostra come negare l'accesso da tutti gli host tranne www.goodhost1.com e www.goodhost2.com:

 Nega ordine, Consenti negazione da tutti Consenti da www.goodhost1.com www.goodhost2.com 

Si noti che il Ordine direttiva definisce la precedenza delle regole. Quindi, in primo luogo, neghiamo l'accesso da tutti gli host e quindi consentiamo l'accesso solo a entrambi www.goodhost1.com e www.goodhost2.com. In alternativa, puoi specificare i due host su una riga separata come questa:

 Ordine Nega, Permetti Nega da tutti Consenti da www.goodhost1.com Consenti da www.goodhost2.com 

Se si desidera consentire l'accesso a tutti i sottodomini dell'host goodhost.com (per esempio: sub1.goodhost.com, sub2.goodhost.com, e sub3.goodhost.com), è possibile specificare un nome di dominio parziale per concedere l'accesso anziché elencare tutti i sottodomini da consentire. Il seguente esempio mostra come:

 Ordine Nega, Permetti Nega da tutti Consenti da goodhost.com 

Inoltre, se si desidera negare l'accesso da tutti tranne un particolare indirizzo IP sulla rete locale, il seguente esempio illustra come si potrebbe fare ciò:

 Nega ordine, Consenti nega da tutti Consenti da 192.168.2.103 

Se si volesse consentire l'accesso a tutti gli host tranne alcuni cattivi host, si potrebbe fare qualcosa del genere:

 Ordine Consenti, Nega Consenti da tutti Deny da www.badbot1.com badbot2.com spamhost.com 

L'esempio precedente apre la directory pubblica a tutti i client di connessione ad eccezione di due bot difettosi e un host di spam. Notare l'uso di tutto il nome di dominio o del nome di dominio parziale nella lista nera dell'host.

Simile a è . Allega un gruppo di direttive che si applicano solo alla directory nominata e alle sue sottodirectory. Invece di specificare un percorso, richiede un'espressione regolare come argomento.

Indici e Direttive DirectoryIndex

Quando visiti un sito web, digiti spesso il nome del dominio senza specificare una pagina (es .: www.example.com al contrario di www.example.com/index.html). Il motivo è perché il server di solito ti dà sempre la pagina predefinita.

Questa funzionalità è governata dal DirectoryIndex direttiva sul server web; indica al server la pagina predefinita con cui rispondere se non viene specificato alcun file nell'URL.

DirectoryIndex può assumere più valori (ad esempio: più di un nome di file), in modo che quando il server incontra una richiesta che non specifica un particolare file, il server passerà attraverso i molti valori uno alla volta fino a trovare un file con lo stesso nome nella directory richiesta.

 DirectoryIndex index.php index.html 

Se un client richiede una directory che non contiene nessuno dei file predefiniti elencati da DirectoryIndex direttiva, il server risponde con elenco di directory, un elenco di tutti i file e le sottodirectory contenute in quella cartella. Ciò potrebbe essere potenzialmente un rischio per la sicurezza, dato che i file e la struttura del file system della directory richiesta sono esposti. È possibile evitare questo comportamento utilizzando il indici opzione per impedire l'elenco delle directory sul DocumentRoot livello (che è la directory principale del file htdoc o dei file pubblici del server). Se si desidera visualizzare gli elenchi di cartelle per qualsiasi sottodirectory sotto DocumentRoot, puoi accendere il indici opzione per quella particolare cartella. Il seguente elenco dimostra questo:

 Opzioni -Index   Opzioni Indexes 

L'esempio precedente disattiva gli elenchi di directory nella cartella HTML pubblica principale (in questo caso / Usr / local / apache2 / htdocs /) e tutte le sottodirectory, quindi la riattiva solo per il / Usr / local / apache2 / htdocs / sub-dir1 / sottodirectory.

Il Direttiva

Mentre il direttiva specifica le autorizzazioni o le restrizioni da applicare a una directory specifica, il direttiva controlla le restrizioni e le autorizzazioni per uno o più file (i caratteri jolly devono essere utilizzati all'interno di un nome file per specificare più file). Dai un'occhiata a questo elenco:

 Permetti l'ordine, nega Nega da tutti 

Questo esempio usa il direttiva per prevenire .htaccess file da essere visualizzati dai client web. L'immagine sotto è uno screenshot di ciò che il server risponde se si tenta di recuperare il .htaccess file richiedendo qualcosa di simile http://www.example.com/.htaccess.

Allo stesso modo, il direttiva limita l'ambito delle direttive allegate per nome di file, proprio come il direttiva fa. Tuttavia, accetta un'espressione regolare come argomento.

Il Direttiva

Il direttiva funziona in modo simile a direttiva eccetto per il fatto che accetta un URL come argomento, al contrario di un percorso verso una directory fisica locale nel file system. Ciò significa che può essere usato per controllare il contenuto al di fuori del server.

Si consiglia vivamente di non utilizzare il direttiva con percorsi di file system locali, poiché molti URL possono essere associati allo stesso file.

Il la direttiva limita anche l'ambito delle direttive allegate dall'URL. Come le altre direttive "Match", accetta un'espressione regolare come argomento.

Il e direttive

Il direttiva controlla quali metodi HTTP (es: OTTENERE, INVIARE, ecc) sono ammessi. Come si vede nell'esempio qui sotto, il direttiva nega l'uso del INVIARE, METTERE, e ELIMINA metodi a tutte le richieste dei client, ad eccezione di quelli provenienti da 50.57.77.153.

 Nega ordine, Consenti nega su tutti Consenti da 50.57.77.153 

Il direttiva fornisce la funzionalità opposta. Controlla ancora quali metodi HTTP sono consentiti, ma lo fa in maniera esclusiva. Nell'esempio qui sotto, nega l'accesso a tutte le richieste dei client utilizzando qualsiasi metodo HTTP diverso da OTTENERE e INVIARE.

 rifiutato da tutti 

Struttura della configurazione e precedenza della direttiva

Si consiglia vivamente di non utilizzare il direttiva con percorsi di file system locali.

Il potere di Apache deriva dalla possibilità di estendere le capacità del server tramite moduli scritti da altri programmatori. Pertanto, le direttive possono essere impostate nel codice di base di Apache o nei moduli installati. Per dare priorità all'effetto e all'ambito di una direttiva, Apache suddivide la sua struttura di configurazione in tre livelli:

  • Configurazione a livello di server
  • Direttive container
  • Configurazione per directory

La configurazione a livello di server include le direttive predefinite impostate per il server nel suo complesso. Queste direttive possono quindi essere sovrascritte dai file di configurazione per directory (.htaccess file) o all'interno di direttive contenitore (come ad esempio e tag).

I file per directory sono generalmente collocati all'interno (o possono essere aggiunti) alla struttura del file di directory pubblica; i cui contenuti sono disponibili per i subamministratori e gli sviluppatori e, quindi, chi ha la possibilità di fare confusione con la configurazione del server aggiungendo direttive di tutti i tipi a varie parti del server. Pertanto, l'amministratore del server ha la possibilità di controllare quali direttive possono essere applicate all'interno di tali file e quali direttive possono o non possono sovrascrivere la configurazione predefinita del server.


Conclusione

Questo articolo era destinato agli amministratori di server per fornire un riferimento per le impostazioni e le opzioni di configurazione Apache più avanzate. Come abbiamo appreso, puoi applicare queste direttive sia a livello di server che a livello di directory. A seconda di come e dove si impostano queste direttive, il server combinerà queste impostazioni in una configurazione finale unificata.