2011-12-15 13 views
0

紹介に基づいてウェブサイトの特定のセクションへのアクセスを拒否する方法はありますか?特定の紹介(nginx)からの特定のページリクエストを制限する

基本的に、2つの参照元ドメインから2つのディレクトリへのアクセスをブロックしようとしています。ここで

は、私が使用していますコードです:

if (($http_referer ~* (badomain1.com|badomain2.com)) && 
    ($request_uri ~* (directory1/|directory2/)) 
    ) { 
    return 403; 
} 

しかし、nginxのはエラーで失敗します。

[EMERG]:無効な条件 "($ HTTP_REFERER" は/ usr/local/nginxの/ confに中/ nginx.conf:。。88 コンフィギュレーションファイル/usr/local/nginx/conf/nginx.confテストはすべてのヘルプをいただければ幸いです

失敗

おかげ

答えて

0

このようにドットをエスケープする必要があると考えます。

次に444を返します。それは全く答えないためにnginx内部です。

if ($http_referer ~* (babes|click|diamond|forsale|girl|jewelry|love|nudit|organic|poker|porn|poweroversoftware|sex|teen|video|webcam|zippo)) { 
    return 444; 
} 
0

Nginxの "if"文は、PHPなどのスクリプト言語では "if"と同じではありません。これは単なる書き換え命令です。

あなたは

if *expression1* then 
    *Rewrite Directive Only* 
end 
if *expression2* then 
    *Rewrite Directive Only* 
end 

あなたは

if *expression1* then 
    set $myVar X; 
end 
if *expression2* then 
    set $myVar $myVarX; 
end 
if $myVar = XX then 
    *Rewrite Directive Only* 
end 
を行う必要があり

if *expression1* AND *expression2* then 
    *code* 
end 

行うにはあなたがする必要がある

if *expression1* OR *expression2* then 
    *code* 
end 

のようなものを持つことはできません

Nginxの "if"は単にリライトディレクティブであり、これは他のリライトディレクティブのみが*code*に入ることに注意してください。 "Return"と "Set"は有効なリライトディレクティブです。

私は同様の設定を使ってリクエストをフィルタリングし、実際にはLuaを使ってLuaモジュールを使って評価することで1レベル上げました。

if (*expression1* OR *expression2*) AND (*expression3* OR *expression4*) then 
    *Complex Code* 
end 
+0

しかし、この場合両方の式は一致しませんか? ORのようになりますか? –

+0

これに応じて回答を拡大しました – Dayo

関連する問題