Perayapan web pelambatan

8

Situs web saya sedang DoS'ed oleh Google webspiders. Google dipersilakan untuk mengindeks situs saya, tetapi kadang-kadang meminta tagcloud di situs saya lebih cepat daripada server web saya dapat menghasilkan hasilnya, membuat server web saya kehabisan sumber daya.

Bagaimana saya bisa membatasi akses ke server web saya sedemikian rupa sehingga pengunjung normal tidak terpengaruh?

robots.txt bukan opsi karena akan memblokir seluruh situs agar tidak diindeks.

iptables -m recent rumit, karena beberapa halaman memiliki banyak gambar atau file data lain dan pemicu 'baru' juga (biasanya agregator RSS saya, memuat gambar dan feed).

iptables -m limit memiliki kelemahan yang sama dan di atas itu, saya tidak bisa selektif per alamat sumber IP.

Bagaimana saya bisa membatasi pengunjung yang menyebabkan beban server saya naik terlalu tinggi?

Saya menjalankan apache2 di server Ubuntu di VM VirtualBox.

jippie
sumber
1
Anda dapat menggunakan alat Webmaster untuk menurunkan tingkat perayapan. Lihat support.google.com/webmasters/bin/…
derobert

Jawaban:

5

Coba modul Apache mod_qos . Versi saat ini memiliki mekanisme kontrol berikut.

  • Jumlah maksimum permintaan bersamaan ke lokasi / sumber daya (URL) atau host virtual.
  • Batasan bandwidth seperti jumlah maksimum permintaan per detik yang diizinkan untuk URL atau maksimum / minimum kbytes yang diunduh per detik.
  • Membatasi jumlah acara permintaan per detik (kondisi permintaan khusus). Itu juga dapat "mendeteksi" orang yang sangat penting (VIP) yang dapat mengakses server web tanpa atau dengan batasan lebih sedikit.
  • Baris permintaan umum dan filter header untuk menolak operasi yang tidak sah.
  • Meminta batasan dan pemfilteran data tubuh (memerlukan mod_parp).
  • Keterbatasan pada tingkat koneksi TCP, misalnya, jumlah maksimum koneksi yang diizinkan dari satu alamat sumber IP atau kontrol keep-hidup dinamis.
  • Lebih suka alamat IP yang dikenal ketika server kehabisan koneksi TCP gratis.

Contoh aturan bersyarat dari dokumentasi ini akan membuat Anda bergerak ke arah yang benar.

# set the conditional variable to spider if detecting a
# "slurp" or "googlebot" search engine:
BrowserMatch             "slurp"                  QS_Cond=spider
BrowserMatch             "googlebot"              QS_Cond=spider

# limits the number of concurrent requests to two applications
# (/app/b and /app/c) to 300 but does not allow access by a "spider"
# if the number of concurrent requests exceeds the limit of 10:
QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider
George M.
sumber
Terlihat sedikit lebih rumit daripada yang saya harapkan pada malam Jumat menikmati bir Belgia ... Harus melihatnya besok. Terlihat menjanjikan dengan browsermatch dan lainnya. Kalau dipikir-pikir ... akan lebih baik jika secara otomatis ada host / agen pengguna yang meminta robot.txt: o) Thnx Uther
jippie
Nikmati bir itu!
George M
Oke, ini terlihat sangat sederhana. Menerapkannya untuk melihat apakah server web saya akan dapat menjaga sekarang.
jippie