7

ライブ サイトで htpasswd 認証をセットアップしましたが、うまく機能しますが、開発環境で作業しているときにパスワードを求められたくありません。

私の httpd.conf ファイルには次のものがあります。

SetEnv APP_ENV "development"

私の.htaccessファイルには次のものがあります。

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

パスワードの入力を求められないようにするAPP_ENVために、htppasswdの周りに条件を配置する方法があるかどうか疑問に思っていました。development

これは可能ですか?

4

5 に答える 5

6

可能であれば、 Apache 2.4 (または 2.4 がまだ完全にリリースされていないため、最新の 2.3 ベータ ビルド)へのアップグレードを検討する必要があります。

使用可能な新機能の 1 つはAuthorization Containersです。これにより、 Requireディレクティブを使用してアクセス要件をより簡単に定義できます。

次のような結果になるはずです。

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>
于 2012-01-12T01:00:45.503 に答える
3

環境変数を持つ if 条件付きブロックを構築する方法の 1 つは、mod_macroモジュールを使用することです。ここで以前に例を作成しました。

この特定のケースでは、VirtualHost ファイルの上 (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>

そしてバーチャルホスト内:

Use ConditionalBlockMacroSecurity_${APP_ENV}

htpassword ファイルへのパスは、マクロのパラメーターとして設定することもできます。

このソリューションの欠点は、運用サーバーに mod_macro をインストールする必要があることです。これは一般的にインストールされるモジュールではなく、そのためには運用環境をある程度制御する必要があります。一方、簡単な解決策は、環境に応じて複数のバージョンの仮想ホストを用意し、Auth セクションにいくつかのコメントを追加することです。しかし、一般的な解決策を探している場合、それは確かにそれが再発する問題であり、ファイルの手動編集を避けたいことを意味します。そのような場合、mod_macro は、Apache の設定が単一のマクロになるまで、Apache の経験を活用するための非常に専門的な方法になる可能性があります。パラメータを使用して、他の多くのマクロを呼び出します。

于 2012-01-11T21:49:35.920 に答える
2

以下を追加します。

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

これには、それが必要Require valid-user または Allow from <dev IP>適用されます。

于 2012-01-10T21:00:37.793 に答える
2

Apache 構成の条件は、構成が [再] ロードされたときに一度だけ機能します。

私がすることは、同じルート ディレクトリで 2 つ目の VirtualHost を作成し、そこで IP アドレスに基づいて拒否/許可を使用してアクセスを制御することです。

于 2010-07-26T13:18:13.863 に答える
2

.htaccessファイルでは、次のように IfDefine ディレクティブ内でブロックをネストできます。

<IfDefine PROD>
  bla bla bla
</IfDefine>

-D PROD次に、 apache を起動するときに必ず引数として渡します。このセクションは、PROD が定義されている場合にのみ実行されます。Ubuntu では、たとえば、/etc/apache2/envvars次の行を編集して最後に追加することでこれを行うことができます。

export APACHE_ARGUMENTS="-D PROD"

おそらく、開発環境ではない場合にのみ実行するようなものを使用して「逆」にし<IfDefine !DEV>、その環境で -D DEV を渡し、環境変数を編集することなく本番サイトをそのままにしておくことができます。

必要に応じて適宜変更してください。

于 2012-01-12T02:08:04.797 に答える