2016-06-18 9 views
1

私のドメインの/ admin /セクションを保護するために.htpasswdを使用しようとしています。Nginxのフォルダ内のファイルを.htpasswdを使ってパスワードで保護する

私は正常にこの設定を使用して、ルートのindex.phpファイルを保護することができるよ:

location /admin/ { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

しかし、そのフォルダ内の関連ファイルはまだ表示できます。たとえば、http://domain.com/admin/whatever.php - ページが読み込まれると、Nginxのパスワード認証が表示されますが、単にキャンセルしてページを表示するだけで済みます。

調査したところ、regex wildcardsの使用に失敗しました。どのように私は、パスワードだけでなく、ルートインデックス、および任意のサブフォルダとファイルの両方を保護することができます

Doesn't work:

location "~^/admin/.$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

Doesn't work:

location "~^/admin/*\$" { 
      try_files $uri $uri/ =404; 
      auth_basic "Restricted"; 
      auth_basic_user_file /etc/nginx/.htpasswd; 
    } 

?過去の/ admin /はすべてアクセス不可能でなければなりません。

+1

あなたは '〜^/admin /.*" 'を試しましたか? – SztupY

+0

それはうまくいきました、ありがとう!あなたはその構文をどうやって知っていましたか? – some1

答えて

5

あなたの正規表現の構文はほとんど良いですが、あなたが実際にあなたが作られた2回の試行をミックスする必要があります。

location "~^/admin/.*" { 
     try_files $uri $uri/ =404; 
     auth_basic "Restricted"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 
} 

これは、正規表現の構文.は、任意の文字(単一のもの)を意味しているためである、と*はいずれをも意味します前の「何か」の量(ゼロかもしれない)。 2つを混ぜると(.*)、任意の文字数を意味します。

これは正規表現の基本の1つで、私はそれらについてもう少し詳しく学ぶことをお勧めします。 Learning Regular Expressionsには、次のステップのガイドが含まれています。また、URLには適用されませんが、改行を扱う際のワイルドカード.のいくつかの制限に関する注意事項も記載されています。

関連する問題