私は次のように特定のリファラーをブロックするようにnginxを設定しています:
if ($http_referer ~* (site_name) ) {
return 403;
}
これは正常に機能しますが、ブロックされたリファラーを別のファイルに記録したいと思います。
追加してみました
access_log /path/to/server/bad_domain.log;
ifステートメント内。ただし、これは機能しません。
何か案は?
ありがとう。
編集:
私もこれを無駄に試しました。
if ($http_referer ~* (site_name) ) {
set $crawler 'yes';
return 403;
}
location ~ .* {
if ($crawler = 'yes') {
access_log /path/to/server/bad_domain.log;
}
}
編集2:
やってみる
map $http_referer $log_referer {
domain1.com 1;
default 0;
}
server { ..
if ($http_referer = "1") {
set $log_referer 1;
}
access_log /path/to/logs/bad_domain.log if=$log_referer;
...}
の出力をくれます
nginx: [emerg] unknown log format "if=$log_referer"
2回目の試行[編集2]の構文は正しいですが、古いバージョンのNGINXを使用しているためにエラーが発生すると思います。アクセスログの「if」はNGINX 1.7で導入されました。 リリースノート を参照してください。
UbuntuリポジトリからNGINXをインストールした場合は、バージョン1.4.xで出荷されます。 -Vを指定してnginxを実行し、実行しているバージョンを確認します。
$ nginx -V
nginx version: nginx/1.8.0
次のbashフィドルでNGINX構成をセットアップしました:
https://thinapps.org/fiddle/lwcorkai27030iawscqklwonderquest
見てください! NGINXの最新バージョンをプルし、条件付きロギングを操作する方法を知るため。
私は同じ問題に直面し、access_logにcombinedを追加することで解決しました
access_log /path/to/logs/bad_domain.log combined if=$log_referer;