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?

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top