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リクエストでは機能しません。
あなたが抱えている問題は、nginxが「-」のリファラーを認識しないことです。それはログでそれを使用して、リファラーを期待するログ解析アプリをチェックし続けます。これにより、URLを手動で入力したり、ブックマークしたりする人はほとんど停止します。
これを試して
if ($http_referer = "") { return 403; }