Questo documento illustra come sfruttare la potenza delle variabili nel server web Apache e nei file di configurazione del modulo dispatcher.
Variabili
Apache supporta le variabili e dalla versione 4.1.9 del modulo dispatcher le supporta anche!
Possiamo sfruttarli per fare una serie di cose utili come:
Utilizzo delle variabili della linea di base
Poiché i file della linea di base AMS sono di sola lettura e non modificabili, sono disponibili funzioni che possono essere disattivate e attivate e configurate modificando le variabili utilizzate.
Variabili della linea di base
Ecco un esempio del contenuto del file /etc/httpd/conf.d/variables/ams_default.vars
1 2 3 4 5 |
Define DISP_LOG_LEVEL info Define AUTHOR_WHITELIST_ENABLED 0 Define PUBLISH_WHITELIST_ENABLED 0 Define AUTHOR_FORCE_SSL 1 Define PUBLISH_FORCE_SSL 0 |
---|
Esempio 1 - Forza SSL
Variabili mostrate sopra AUTHOR_FORCE_SSLoppure PUBLISH_FORCE_SSL può essere impostato su 1 per attivare le regole di riscrittura che obbligano gli utenti finali che accedono a una richiesta http a essere reindirizzati a https
Di seguito è riportata la sintassi del file di configurazione che consente il funzionamento di questo interruttore:
1 2 3 4 5 6 7 8 |
/VirtualHost *:80 IfModule mod_rewrite.c ReWriteEngine on If "${PUBLISH_FORCE_SSL} == 1" Include /etc/httpd/conf.d/rewrites/forcessl_rewrite.rules /If /IfModule /VirtualHost |
---|
Come puoi vedere le regole di riscrittura includono ciò che ha il codice per reindirizzare il browser degli utenti finali, ma la variabile impostata su 1 è ciò che consente o meno l'utilizzo del file
Esempio 2 - Livello di registrazione
Le variabili DISP_LOG_LEVEL può essere utilizzato per impostare ciò che si desidera per il livello di log effettivamente utilizzato nella configurazione in esecuzione.
Di seguito è riportato un esempio di sintassi presente nei file di configurazione della linea di base ams:
1 2 3 4 |
IfModule disp_apache2.c DispatcherLog logs/dispatcher.log DispatcherLogLevel ${DISP_LOG_LEVEL} /IfModule |
---|
Se hai bisogno di aumentare il livello di log del dispatcher, devi solo aggiornare la variabile ams_default.vars DISP_LOG_LEVEL al livello desiderato.
I valori di esempio possono essere un numero intero o una parola:
Livello di log | Valore intero | Valore Word |
---|---|---|
Traccia | 4 | traccia |
Debug | 3 | debug |
Info | 2 | info |
Avvertenza | 1 | avvertire |
Errore | 0 | error |
Esempio 3 - Elenchi consentiti
Le variabili AUTHOR_WHITELIST_ENABLED e PUBLISH_WHITELIST_ENABLED può essere impostato su 1 per attivare regole di riscrittura che includono regole che consentono o impediscono il traffico degli utenti finali in base all’indirizzo IP. L’attivazione di questa funzione deve essere combinata con la creazione di un file di regole della whitelist da includere.
Di seguito sono riportati alcuni esempi di sintassi di come la variabile abilita gli "include" dei file della whitelist e un esempio di file della whitelist
sample.vhost:
1 2 3 4 5 6 7 |
VirtualHost *:80 Directory / If "${AUTHOR_WHITELIST_ENABLED} == 1" Include /etc/httpd/conf.d/whitelists/*_whitelist.rules /If /Directory /VirtualHost |
---|
sample_whitelist.rules:
1 2 3 |
RequireAny Require ip 10.43.0.10/24 /RequireAny |
---|
Come puoi vedere la sample_whitelist.rules applica la restrizione IP, ma l’attivazione della variabile ne consente l’inclusione nella variabile sample.vhost
Dove collocare le variabili
Argomenti di avvio del server web
AMS inserirà le variabili globali negli argomenti di avvio del processo Apache all’interno del file /etc/sysconfig/httpd
Questo file ha variabili predefinite come mostrato qui:
1 2 3 4 5 6 7 8 |
AUTHOR_IP="10.43.0.59" AUTHOR_PORT="4502" AUTHOR_DOCROOT='/mnt/var/www/author' PUBLISH_IP="10.43.0.20" PUBLISH_PORT="4503" PUBLISH_DOCROOT='/mnt/var/www/html' ENV_TYPE='dev' RUNMODE='dev' |
---|
Non si tratta di qualcosa che puoi modificare, ma è utile da sfruttare nei file di configurazione
Nota:
A causa del fatto che questo file viene incluso solo all'avvio del servizio. Per rilevare le modifiche è necessario riavviare il servizio. Ciò significa che un ricaricamento non è sufficiente, ma è necessario riavviare il sistema
File variabili (.vars)
Le variabili personalizzate fornite dal codice devono essere presenti in .vars file all’interno della directory /etc/httpd/conf.d/variables/
Questi file possono avere qualsiasi variabile personalizzata desiderata e alcuni esempi di sintassi possono essere visualizzati nei seguenti file di esempio
/etc/httpd/conf.d/variables/weretail_domains_dev.vars:
1 2 |
Define WERETAIL_DOMAIN dev.weretail.com Define WERETAIL_ALT_DOMAIN dev.weretail.net |
---|
/etc/httpd/conf.d/variables/weretail_domains_stage.vars
1 2 |
Define WERETAIL_DOMAIN stage.weretail.com Define WERETAIL_ALT_DOMAIN stage.weretail.net |
---|
/etc/httpd/conf.d/variables/weretail_domains_prod.vars:
1 2 |
Define WERETAIL_DOMAIN www.weretail.com Define WERETAIL_ALT_DOMAIN www..weretail.net |
---|
Quando crei le tue variabili, denominale in base al loro contenuto e per seguire gli standard di denominazione forniti nel manuale qui. Nell’esempio precedente puoi vedere che il file delle variabili ospita le diverse voci DNS come variabili da utilizzare nei file di configurazione.
Utilizzo delle variabili
Ora che hai definito le variabili all'interno dei file delle variabili, vuoi sapere come usarle correttamente all'interno degli altri file di configurazione.
Utilizzeremo i file .vars di esempio di cui sopra per illustrare un caso d’uso corretto.
Vogliamo includere globalmente tutte le variabili basate sull'ambiente e creeremo il file /etc/httpd/conf.d/000_load_env_vars.conf
1 2 |
Include /etc/httpd/conf.d/variables/*_${ENV_TYPE}.vars Include /etc/httpd/conf.d/variables/*_${RUNMODE}.vars |
---|
Sappiamo che all’avvio del servizio httpd estrae le variabili impostate da AMS in /etc/sysconfig/httpd e ha l'insieme di variabili ENV_TYPE e RUNMODE
Quando questo file .conf globale viene estratto, verrà estratto in anticipo perché l'ordine di inclusione dei file in conf.d è alfanumerico ordine di caricamento significa 000 nel nome del file assicurerà che venga caricato prima degli altri file nella directory.
L’istruzione include utilizza anche una variabile nel nome del file. Questo può cambiare il file che verrà effettivamente caricato in base al valore presente nelle variabili ENV_TYPE e RUNMODE.
Se la ENV_TYPE value is dev quindi il file che viene utilizzato è:
/etc/httpd/conf.d/variables/weretail_domains_dev.vars
Se la ENV_TYPE value is stadio quindi il file che viene utilizzato è:
/etc/httpd/conf.d/variables/weretail_domains_stage.vars
Se il valore RUNMODE è anteprima quindi il file che viene utilizzato è:
/etc/httpd/conf.d/variables/weretail_domains_preview.vars
Quando quel file viene incluso, ci permetterà di utilizzare i nomi delle variabili memorizzati all'interno.
Nel nostro /etc/httpd/conf.d/available_vhosts/weretail.vhost file possiamo cambiare la normale sintassi che funzionava solo per dev:
1 2 3 |
VirtualHost *:80 ServerName dev.weretail.com ServerAlias dev.weretail.net |
---|
Con una nuova sintassi che utilizza il potere delle variabili per funzionare per dev, stage e prod:
1 2 3 |
VirtualHost *:80 ServerName ${WERETAIL_DOMAIN} ServerAlias ${WERETAIL_ALT_DOMAIN} |
---|
Nel nostro /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any file possiamo cambiare la normale sintassi che funzionava solo per dev:
1 2 |
"dev.weretail.com" "dev.weretail.net" |
---|
Con la nuova sintassi che utilizza il potere delle variabili per funzionare per dev, stage e prod:
1 2 |
"${WERETAIL_DOMAIN}" "${WERETAIL_ALT_DOMAIN}" |
---|
Queste variabili hanno una grande quantità di riutilizzo per individuare le impostazioni in esecuzione senza dover disporre di file distribuiti diversi per ambiente. In sostanza puoi modellare i file di configurazione con l’uso di variabili e includere file basati su variabili.