Untuk mencegah spam pengarah, nginx.conf saya berisi bagian seperti ini:
if ($http_referer ~* spamdomain1\.com) {
return 444;
}
if ($http_referer ~* spamdomain2\.com) {
return 444;
}
if ($http_referer ~* spamdomain3\.com) {
return 444;
}
Aturan ini memberi tahu nginx hanya untuk menutup koneksi jika pengguna memiliki salah satu dari rujukan ini ditetapkan. Apakah ada cara yang lebih elegan untuk melakukan ini? Bisakah saya mendefinisikan daftar domain ini dan kemudian mengatakan sesuatu seperti, "Jika pengarah ada dalam daftar ini maka kembalikan 444"?
Jawaban:
Saya akan mencoba
map
:Kemudian gunakan seperti ini:
sumber
hostnames
dan mungkininclude
dari file terpisah di mana mereka terdaftar dapat membuatnya lebih mudah untuk dipelihara.map
saya tertarik untuk melihat apakah seseorang dapat menggunakan regex untuk mencocokkan referensi tertentu karena OP melakukan pencocokan regex menggunakan~*
operator, dan memang hanya menentukan aturan peta seperti"~*spamdomain4.com" 1;
akan melakukan trik. Rapi!hostnames
opsi itu akan sederhana.spamdomain4.com 1;
Anda bisa menggunakan logika
OR
untuk membuat satu pernyataan multi-pertandingan misalnyaEDIT per komentar; menghapus
break;
dari blokirsumber
ngx_http_referer_module adalah cara lain untuk melakukannya. Contoh dari Pemblokir Spam Referer :
sumber