conditionals tistaccess.
-
29-09-2020 - |
Domanda
Ho installato l'autenticazione HTPassassWD sul mio sito live e funziona alla grande, ma non voglio essere chiesto una password quando sto lavorando all'ambiente di sviluppo.
nel mio file httpd.conf ho:
SetEnv APP_ENV "development"
.
Nel mio file .htaccess
ho:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
.
Mi stavo chiedendo se ci fosse comunque comunque di mettere un condizionale attorno alla roba htppasswd in modo che quando APP_ENV
sia development
che non viene richiesto una password.
è possibile?
Soluzione
Se sei in grado di farlo, dovresti pensare di aggiornare a Apache 2.4 (o più recente 2.3Beta Build Dal momento che 2.4 non è ancora stato rilasciato).
Una delle nuove funzionalità disponibili sono contenitori di autorizzazione - rendendolo molto più semplice aDefinire i requisiti di accesso utilizzando Richiedi Direttiva.
Dovresti finire con qualcosa come:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /path/to/file/groups
SetEnv APP_ENV "development"
<RequireAll>
<RequireAny>
<RequireAll>
#main requirements
Require group user
#other conditions if needed for non-dev/non-local
</RequireAll>
<RequireAll>
#allow direct if development
Require env APP_ENV development
</RequireAll>
<RequireAll>
<RequireAny>
#allow loopback and local network
Require ip 127.0.0.1
Require ip 10.2
</RequireAny>
</RequireAll>
<RequireAny>
#other conditions if needed for everyone
<RequireNone>
#blacklist
</RequireNone>
</RequireAll>
. Altri suggerimenti
Uno del modo di costruire se i blocchi condizionali con le variabili ENV utilizzano il modulo Mod_Macro . Ho fatto un esempio in precedenza qui .
In questo caso particolare avresti in cima al file VirtualHost (prima della definizione VirtualHost):
<Macro ConditionalBlockMacroSecurity_production>
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
</Macro>
<Macro ConditionalBlockMacroSecurity_development >
<IfModule mod_headers.c>
Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
</IfModule>
</Macro>
.
E all'interno del VirtualHost:
Use ConditionalBlockMacroSecurity_${APP_ENV}
.
Dove il percorso verso il file HTPassword potrebbe anche essere impostato come parametro della macro.
Il lato negativo di questa soluzione è che è necessario installare Mod_Macro sul server di produzione, non è un modulo comunemente installato e avrai bisogno di un po 'di controllo del ENV di produzione per farlo. Dall'altro lato, una soluzione semplice è avere diverse versioni dei tuoi virtualhost a seconda dell'ambiente e di aggiungere alcuni commenti sulla sezione Auth. Ma se stai cercando una soluzione generica, certamente è un problema di ricurazione e si desidera evitare la modifica manuale dei file, in tali casi Mod_Macro può diventare un modo molto professionale per capitalizzare le tue esperienze di Apache, finché le configurazioni Apache non diventano una singola macro Con i parametri, chiamando un sacco di altre macro.
Conditionals in Apache Config funziona solo una volta, quando la configurazione è [RE] caricata.
Cosa farei è creare un secondo virtualhost con la stessa directory principale e controllare l'accesso utilizzando Deny / Consenti in base all'indirizzo IP.
Aggiungi quanto segue:
Require valid-user
Allow from <dev IP>
Satisfy Any
.
Questo richiederà che Require valid-user
o si applica Allow from <dev IP>
.
Nel tuo file .htaccess
è possibile nidificare i blocchi all'interno della Direttiva IfDefine, come:
<IfDefine PROD>
bla bla bla
</IfDefine>
.
Quindi assicurati di passare -D PROD
come argomento quando si avvia Apache.Questa sezione eseguirebbe solo se il prodotto è definito.In Ubuntu puoi farlo, ad esempio, modificare /etc/apache2/envvars
e aggiungere questa linea alla fine:
export APACHE_ARGUMENTS="-D PROD"
.
è possibile "inverso", magari usando qualcosa come <IfDefine !DEV>
per funzionare solo quando non è l'ambiente di sviluppo, e quindi passare -D dev in quell'ambiente e lasciare i siti di produzione come non dover modificare l'avvar.
Modifica di conseguenza in base alle tue esigenze!