web-dev-qa-db-ja.com

リファラーがない場合にnginxでリクエストを拒否するにはどうすればよいですか?

Nginx access.logには、次のような多くの行があります。

1.2.3.4 - - [19/Oct/2014:22:48:11 -0400] "POST /someurl/suburl HTTP/1.1" 200 19967 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2"

それらの間で共通しているのは「-」だけです(これは、リファラーが設定されていないことを意味すると思います)。

だから私はこれらの要求を使用して拒否しようとしました:

if ($http_referer ~ ^(-))
    {  return 444;
}

ただし、上記のように、これはPOSTリクエストでは機能しません。

1
Jand

あなたが抱えている問題は、nginxが「-」のリファラーを認識しないことです。それはログでそれを使用して、リファラーを期待するログ解析アプリをチェックし続けます。これにより、URLを手動で入力したり、ブックマークしたりする人はほとんど停止します。

これを試して

 if ($http_referer = "") {  return 403; }
5
Mike