Frage

Ich habe die htpasswd-Authentifizierung auf meiner Live-Site eingerichtet und sie funktioniert hervorragend, aber ich möchte nicht nach einem Passwort gefragt werden, wenn ich an der Entwicklungsumgebung arbeite.

In meinem httpd.conf-Datei, die ich habe:

SetEnv APP_ENV "development"

In meinem .htaccess datei, die ich habe:

AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user

Ich habe mich gefragt, ob es überhaupt eine Bedingung für das htppasswd-Zeug gibt, damit wann APP_ENV is development dass ich nicht nach einem Passwort gefragt werde.

Ist das möglich?

War es hilfreich?

Lösung

Wenn Sie dazu in der Lage sind, sollten Sie über ein Upgrade auf nachdenken Apache 2.4 (oder der neueste 2.3 Beta-Build seit 2.4 ist noch nicht ganz veröffentlicht).

Eine der neuen verfügbaren Funktionen sind Berechtigungscontainer - vereinfachung der Definition von Zugriffsanforderungen mithilfe der Erfordern Richtlinie.

Sie sollten mit etwas enden wie:

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>

Andere Tipps

Eine der Möglichkeiten zum Erstellen von if bedingten Blöcken mit Umgebungsvariablen ist die Verwendung von mod_makro Modul.Ich habe vorher ein Beispiel gemacht hier.

In diesem speziellen Fall hätten Sie oben auf der VirtualHost-Datei (vor der VirtualHost-Definition):

<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>

Und im virtuellen Host:

Use ConditionalBlockMacroSecurity_${APP_ENV}

wobei der Pfad zur htpassword-Datei auch als Parameter des Makros festgelegt werden könnte.

Der Nachteil dieser Lösung ist, dass Sie mod_macro auf dem Produktionsserver installieren müssen, es ist kein häufig installiertes Modul und Sie benötigen dazu eine gewisse Kontrolle über die Produktionsumgebung.Auf der anderen Seite besteht eine einfache Lösung darin, je nach Umgebung mehrere Versionen Ihrer virtuellen Hosts zu haben und einige Kommentare zum Authentifizierungsabschnitt hinzuzufügen.Aber wenn Sie nach einer generischen Lösung suchen, bedeutet dies sicherlich, dass es sich um ein wiederkehrendes Problem handelt und Sie die manuelle Bearbeitung von Dateien vermeiden möchten. In solchen Fällen kann mod_macro eine sehr professionelle Möglichkeit sein, Ihre Apache-Erfahrungen zu nutzen, bis Ihre Apache-Konfigurationen zu einem einzelnen Makro mit Parametern werden, das viele andere Makros aufruft.

Bedingungen in der Apache-Konfiguration funktionieren nur einmal, wenn die Konfiguration [neu] geladen wird.

Ich würde einen zweiten virtuellen Host mit demselben Stammverzeichnis erstellen und den Zugriff mithilfe von Verweigern / Zulassen basierend auf der dortigen IP-Adresse steuern.

Fügen Sie Folgendes hinzu:

Require valid-user
Allow from <dev IP>
Satisfy Any

Dies erfordert, dass Require valid-user oder Allow from <dev IP> betrifft.

In Ihrem .htaccess -Datei können Sie die Blöcke innerhalb der IfDefine-Direktive verschachteln, z:

<IfDefine PROD>
  bla bla bla
</IfDefine>

Dann stellen Sie sicher, dass Sie bestehen -D PROD als Argument, wenn Sie Apache starten.Dieser Abschnitt würde nur ausgeführt, wenn PROD definiert ist.In Ubuntu können Sie dies beispielsweise tun, indem Sie Folgendes bearbeiten /etc/apache2/envvars und diese Zeile am Ende hinzufügen:

export APACHE_ARGUMENTS="-D PROD"

Sie können es "umkehren", indem Sie vielleicht etwas wie verwenden <IfDefine !DEV> nur ausgeführt werden, wenn es sich nicht um die Entwicklungsumgebung handelt, und dann -D DEV in dieser Umgebung übergeben und die Produktionsstandorte unverändert lassen, ohne die Umgebungen bearbeiten zu müssen.

Modifizieren Sie entsprechend Ihren Bedürfnissen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top