2016-04-15 2 views
0

nginxで特定のディレクトリをブロックする方法を理解しようとしているが、そのディレクトリのリソース(サブディレクトリを含む)たとえば、nginx:ブロックディレクトリだがサブディレクトリへのアクセスを許可する

/staticはブロックする必要がありますが、 /static/whatever.cssにアクセスする必要があります。

私はこのような何かを試してみましたが、それはうまくいきませんでした:

location ^~ /static/ { 
     deny all; 
     return 404; 
    } 

    location ^~ /static/* { 
     allow all; 
    } 

はこれを行う方法はありますか?

答えて

0

これは誤った構文です。おそらく、書くためのもの:deny allは、それがデフォルトのアクションであるとして403 allow allが冗長で戻りますよう

location = /static/ { 
    deny all; 
} 

location /static/ { 
} 

return 404は冗長です。私は修飾子を削除しました。これは、locationが潜在的な正規表現の場所によって上書きされないようにするために追加する必要があります。場所の構文については、this documentを参照してください。

しかし、あなたが拒否したい唯一のURIは、おそらく継承されたindexディレクティブを無効にするためのディレクトリそのものだと思われます。これも(または^~修飾語なし - 上記参照)が動作してもよい:

location /static/ { 
    try_files $uri =404; 
} 
try_files

を指示から$uri/要素(/後続音符)を省略することにより、index指令は無視されます。詳細については、this documentを参照してください。

+0

リチャードに感謝します。あなたが提供した例( '$ uri'と' $ uri/')を試しましたが、' '/ static/whatever.css'に' 404'エラーが戻ってきました。すべてのサブディレクトリやリソースへのアクセスを許可しながら、ディレクトリ自体へのアクセスのみを拒否したいという仮定は正しいです。 – cookandy

+0

@ cookandyもっと多くの設定を表示する必要があるかもしれません。 404レスポンスは、誤って設定された 'ルート'または競合する 'location'ブロックによって引き起こされる可能性があります。 –

関連する問題