2016-07-11 9 views
0

ユーザーのパブリックフォルダにファイルを表示するようにNginxを設定しようとしています。サイトには複数のユーザーがおり、各ユーザーにはNginxには不明なサブディレクトリがあります。Nginxは、サブディレクトリ名が不明な場合、サブディレクトリへのアクセスをブロックします。

例ディレクトリ構造:

/users/usernameHere/public 
/users/usernameHere/private 

私はユーザーのみ公開ディレクトリからファイルを表示し、任意の他のディレクトリへのすべてのアクセスを拒否するようにnginxのが欲しいです。

これは私がこれまで試したものです:

location ^~ /users/*/public/ { 
    allow all; 
    try_files $uri $uri/ =404; 
} 

location ^~ /users/ { 
    deny all; 
} 
+0

最初の場所の正規表現に問題がある可能性があります。 ''/users /.*/ public/''である必要があります。 – Lution

答えて

1

は、URIの前に修飾の違いを見るためにofficial docsを読む

location ~ /users/.*/public/ { 
    allow all; 
    try_files $uri $uri/ =404; 
} 

location /users/ { 
    deny all; 
} 

この設定を試してみてください、あなた最初の場所は、正規表現の場所です大文字小文字の区別や大文字と小文字を区別しない一致の場合は、~または*~を使用する必要があります。

ロケーションは、接頭辞文字列または正規表現で定義できます。正規表現は先行する "〜*"修飾子(大文字小文字を区別しない照合の場合)または "〜"修飾子(大文字小文字を区別する照合の場合)で指定します。

次に、あなたの第二の位置は、接頭文字列/users/によって定義された一般的な場所がある、あなたは手段を使用^~修飾子は正規表現のチェックをスキップして、現在の最長一致接頭辞を使用し、ここにあなたの設定となるよう、/users/一つですあなたはいつも403のリターンを得るでしょう。

最長一致するプレフィックスの位置に "^〜"修飾子がある場合、正規表現はチェックされません。

+0

ありがとうございます。 – PhearOfRayne

関連する問題