SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor

SearXNG CAPTCHA Hatası Çözümü ve Engelleme Yöntemleri

SearXNG üzerinde arama motoru kaynaklı CAPTCHA hatalarını gidermek için izlenecek adımlar. VPS IP adreslerinin neden engellendiğini ve kalıcı çözüm yollarını öğrenin.

SearXNG CAPTCHA hatası ne anlama gelir

SearXNG CAPTCHA hataları, sunucunuzun sorguladığı arama motorlarından kaynaklanır. Sunucunuz bir arama motorundan sonuç talep etmiş, ancak arama motoru sonuç yerine bir doğrulama sayfası döndürmüştür. Yanıtta ayrıştırılabilecek bir veri bulunmadığı için SearXNG bu arama motoru için bir hata kaydı oluşturmuştur. Sunucunuzun durumu sağlıklıdır. Kontrolünüz dışındaki bir sistem, isteğinizin bir insan tarafından yapılmadığına karar vermiştir.

Aşağıdaki tüm çözüm yöntemleri bu gerçek üzerine kuruludur. Karar, arama motorunun kendi altyapısında verildiği için settings.yml içerisindeki hiçbir ayar bu kararı geçersiz kılamaz. Değiştirebileceğiniz unsurlar; isteğin hangi adresten çıkış yapacağı, hangi arama motorlarının sorgulanacağı ve bir arama motoru reddetmeye başladığında sunucunuzun nasıl davranacağıdır.

Birbirine benzeyen iki hata ve bunları ayırt etme yöntemleri

İlk hata, kendi tarayıcınıza kendi örneğinizin HTTP 429 (çok fazla istek) yanıtı vermesidir. Bu, arama uç noktasının önünde yer alan bot algılama katmanı olan SearXNG sınırlayıcısıdır. Kendi sunucunuzda çalışır ve yapılandırması size aittir. kendi kullanıcılarınıza 429 döndüren sınırlayıcı, farklı ayarlara sahip ayrı bir sorundur ve aşağıdaki tavsiyelerin hiçbiri bunun için geçerli değildir.

İkinci hata ise yukarı akış (upstream) kaynaklıdır. Sonuç sayfası normal şekilde yüklenir ancak bir veya daha fazla arama motoru sonuçlarda görünmez ya da bir hata bildirimi içerir. Sizin örneğinizde hiçbir şey reddedilmemiştir; bir arama motoru sunucunuzu reddetmiştir.

  • Sayfa yüklenmiyor veya arama uç noktası 429 yanıtı veriyorsa: sınırlayıcınızı kontrol edin.
  • Sayfa yükleniyor ancak sonuçlar eksikse veya bir arama motoru hata ile işaretlenmişse: yukarı akışı kontrol edin ve okumaya devam edin.

Her iki durum da aynı örnekte meydana gelebilir ve birbirlerini tetiklerler; çünkü çok gevşek ayarlanmış bir sınırlayıcı, giden sorgu hızınızı artıran trafiğin geçmesine izin verir. Bunları tek tek teşhis edin.

SearXNG motorları neden dizüstü bilgisayarımda değil de VPS üzerinde CAPTCHA hataları veriyor?

Bunun nedeni, isteğin geldiği adrestir. Ev bağlantınız, zaman içinde birçok sıradan kullanıcıyla paylaşılan bir tüketici İSS (internet servis sağlayıcısı) aralığından bir adrese sahiptir. VPS'niz ise bir veri merkezi aralığından bir adrese sahiptir ve bu aralıklar herkese açıktır: herkes hangi adreslerin bir barındırma sağlayıcısına ait olduğunu sorgulayabilir. Kazıyıcıları (scraper) uzak tutmak isteyen bir motor, barındırma aralıklarından gelen istekleri şüpheli olarak değerlendirerek işe başlar; çünkü bu aralıklarda tarayıcı kullanan gerçek bir insan olma olasılığı çok düşüktür.

Adresin üzerine eklenen birkaç faktör daha vardır. Örneğiniz, her kullanıcı araması için motor başına bir istek gönderir; bu nedenle az sayıda kullanıcı bile, tek bir kişinin asla oluşturamayacağı bir istek yoğunluğu yaratır. SearXNG, tasarımı gereği motorla herhangi bir oturum tutmaz ve uzun ömürlü çerez taşımaz; bu yüzden her istek, arkasında hiçbir geçmiş olmadan ulaşır. Ayrıca adres, sizin oluşturmadığınız bir geçmişe sahip olabilir; çünkü sağlayıcılar adresleri geri dönüştürür ve önceki kiracı aylarca o adresten veri kazımış olabilir.

Reddetme işleminin kendisi her zaman bariz bir hata değildir. Bir motor 403, 429 veya HTTP 200 koduyla birlikte gövdede bir doğrulama sayfasıyla yanıt verebilir. Son durum insanların kafasını karıştırır; çünkü durum kodu kontrolü motorun düzgün çalıştığını söylerken, SearXNG yanıt içinde sıfır sonuç bulur. İşte bu yüzden motoru curl ile sorgulayıp durum satırına bakmak yerine, kendi örneğinizin hata raporunu okumalısınız.

Herhangi bir değişiklik yapmadan önce instance raporlarını inceleyin

Aşağıdaki her çözüm, başarısız olan motorun adı ve instance tarafından kaydedilen hata gerekçesi ile başlar. SearXNG her ikisini de sunar. /stats sayfası, motorları hata sayıları ve güvenilirlikleri ile listeler; /stats/errors ise hata detaylarını JSON formatında döndürür; bu formatı saklamak ve gelecek hafta ile karşılaştırmak daha kolaydır. Bu sayfaları, instance için normalde kullandığınız tarayıcıda açın.

Container logları, olaylar gerçekleştiği anda aynı kayıtları tutar. Buradaki servis adı, container dokümantasyonu ile birlikte yayınlanan compose dosyasında kullanılan isimdir; bu nedenle eğer farklıysa kendi servis adınızı kullanın.

docker compose logs -f core

Log takibi devam ederken başarısız olan bir arama gerçekleştirin. Arama çalıştığı sırada başarısız olan motor için bir girdi görmelisiniz. Motor adını ve instance tarafından yazdırılan tam hata gerekçesini not edin. Bir blog yazısından, bu yazı da dahil olmak üzere, motor adı kopyalamayın. Veri merkezi IP adreslerine kısıtlama getiren motorlar aydan aya değişir; sizin için başarısız olan bir motor, bu yazıyı kaleme alan kişi için sorunsuz çalışıyor olabilir.

Eğer sonuç sayfası hiçbir hata göstermiyor ancak sonuçlar yetersiz kalıyorsa, o motor için display_error_messages ayarını kontrol edin. Bu ayar varsayılan olarak true değerindedir; bu özelliği kapatmış bir instance, ihtiyacınız olan tek mesajı gizliyor olabilir.

SearXNG'nin başarısız bir motoru yeniden deneme ve askıya alma yöntemi

SearXNG, kendisine yanıt vermeyen bir motoru sürekli zorlamaz. Başarısız olan motor askıya alınır ve askıda kaldığı süre boyunca tamamen devre dışı bırakılır; bu sayede bozuk bir motor, sessizce kaybolan bir motora dönüşür.

Bu süreci iki katman kontrol eder ve her ikisi de settings.yml içindeki search: altında yer alır. Herhangi bir ayarı yapıştırmadan önce bu anahtar isimlerini ve değerlerini, kullandığınız sürüm için searx/settings.yml ile doğrulayın; çünkü bu ayarlar sürümler arasında yer değiştirmiştir ve ayarlar dokümantasyon sayfasındaki örnek, SearXNG'nin gerçekte yüklediği dosyadan daha uzun askıya alma süreleri göstermektedir. 10 Ekim 2026 itibarıyla searx/settings.yml içinde sunulan varsayılan değerler şöyledir:

search:
  ban_time_on_fail: 5
  max_ban_time_on_fail: 120
  suspended_times:
    SearxEngineAccessDenied: 180
    SearxEngineCaptcha: 3600
    SearxEngineTooManyRequests: 180
    cf_SearxEngineCaptcha: 1296000
    cf_SearxEngineAccessDenied: 86400
    recaptcha_SearxEngineCaptcha: 604800

İlk katman, zaman aşımı gibi olağan hataları yönetir. Yasaklama süresi ban_time_on_fail saniyeden başlar ve her ardışık hatada artarak max_ban_time_on_fail değerine kadar çıkar. Varsayılan olarak üst sınır iki dakikadır, bu nedenle kararsız bir motor, sorun ortadan kalktıktan birkaç dakika sonra kendiliğinden düzelir.

İkinci katman, bu kılavuzun konusu olan hataları yönetir. SearXNG, yanıtı genel bir hata yerine bir doğrulama (challenge) veya reddetme olarak algıladığında, suspended_times içindeki eşleşen girdiyi uygular ve bu sayıların çoğu çok daha büyüktür. 180 saniye, basit bir reddetme veya 429 hatası için üç dakikadır. 3600, genel bir CAPTCHA için bir saattir. 86400 tam bir gündür. 604800 bir haftadır. 1296000 ise on beş gündür. cf_ ön ekine sahip anahtarlar, doğrulama Cloudflare olarak algılandığında; recaptcha_ ise reCAPTCHA olarak algılandığında geçerli olur.

Bu durum, en çok zaman kaybettiren belirtiyi açıklar. Sorunun nedenini bulup düzeltseniz bile, motor bir saat boyunca veya bir Cloudflare doğrulamasından sonra günlerce hiçbir sonuç döndürmeyebilir. Motor hala askıdadır. Askıya alma durumu çalışan süreçte tutulur, bu nedenle container'ı yeniden başlatmak bu durumu temizler ve bir sonraki aramada motor tekrar denenir. Burada basit bir yeniden başlatma iş görür; bu yüzden boş yere imajları yeniden oluşturmaya başlamadan önce ne zaman yeniden başlatmanın yeterli olduğunu ve ne zaman container'ı yeniden oluşturmanız gerektiğini bilmekte fayda vardır. Eğer motor yeniden başlatmadan hemen sonra tekrar başarısız olursa, yaptığınız düzeltme işe yaramamış demektir.

Motor başına yapılan bir ayar uyarı gerektirir. retry_on_http_error, motor listelediğiniz durum kodlarıyla yanıt verdiğinde isteği yeniden dener. Sizi engelleyen bir motora karşı yeniden deneme yapmak, sunucunuzun bot olduğuna zaten karar vermiş olan sisteme daha fazla trafik gönderilmesine neden olur. Gerçekten kesintili çalışan bir motoru aşmaya çalışmıyorsanız bu ayarı değiştirmeyin.

SSH tüneli yukarı akış belgeleri ve neleri çözmediği

10 Ekim 2026 tarihinde kontrol edildiği üzere, SearXNG yönetici belgeleri bu sorunu manuel bir tünel ile yanıtlamaktadır. Sunucunuz üzerinden bir SOCKS proxy açar, masaüstü tarayıcınızı buna yönlendirir ve arama motoru sunucunun adresini gördüğü sırada doğrulamayı manuel olarak tamamlarsınız.

ssh -q -N -D 8080 user@example.org

-D 8080, SSH bağlantısı üzerinden iletim yapan 8080 numaralı portta yerel bir SOCKS sunucusu açar. -N uzak bir komut çalıştırmaz ve -q süreci arka planda tutar; bu nedenle sağlıklı bir tünel hiçbir çıktı vermez ve komut satırına geri dönmez. Durumu ikinci bir terminalden kontrol edin:

curl -x socks://127.0.0.1:8080 http://ipecho.net/plain
curl http://ipecho.net/plain

İlk komut sunucunuzun adresini, ikincisi ise masaüstü adresinizi yazdırmalıdır. İki yanıtın aynı olması, isteğin tünel üzerinden geçmediği anlamına gelir. Ardından tarayıcınızın ağ ayarlarını 127.0.0.1 adresi ve 8080 portu üzerinden bir SOCKS5 proxy olarak yapılandırın, tarayıcıda aynı adres denetleyicisini yükleyerek sunucu adresini raporladığını doğrulayın ve sizi doğrulama ile karşılayan arama motorunu ziyaret edin. Doğrulamayı orada tamamlayın.

Şimdi işin gerçekçi kısmına gelelim. Bu yöntemi dört unsur kısıtlar. Arama motorunun verdiği çerez masaüstü tarayıcınıza kaydedilir ve SearXNG'nin tarayıcı çerezlerinize erişimi yoktur; bu nedenle örneğinize yardımcı olabilecek tek şey, arama motorunun doğrudan IP adresi üzerinde tuttuğu kayıttır. Bu kayıt, arama motorunun belirlediği ve yayınlamadığı bir zaman çizelgesine göre sona erer. İşlemin hiçbir parçası otomatik değildir, bu yüzden bir sonraki sefer tekrar klavye başına geçmeniz gerekir. Ayrıca, başkalarının da kullandığı bir örnekte, doğrulamayı tetikleyen sorgu hızı devam ettiği için doğrulama ekranı tekrar karşınıza çıkacaktır.

Bu yöntemi sadece bu öğleden sonra bir örneği çalışır hale getirmek için kullanın. Bir örneği bu yöntem üzerine inşa etmeyin.

Kalıcı çözüm: sizi engelleyen motorları devre dışı bırakın veya ağırlıklarını değiştirin

En ucuz ve kalıcı çözüm, sunucunuza yanıt vermeyen bir motora sorgu göndermeyi durdurmaktır. settings.yml dosyanız, container imajı içindeki use_default_settings: true ile başlar; bu, engines: altında eşleşen bir name girdisinin yalnızca listelediğiniz anahtarları geçersiz kıldığı ve varsayılan tanımın geri kalanını olduğu gibi bıraktığı anlamına gelir.

use_default_settings: true

engines:
  - name: <engine name from your stats page>
    disabled: true
  - name: <another engine name>
    weight: 0.3

disabled: true, motoru tercihler sayfasında tutarken varsayılan olarak kapatır; böylece motoru isteyen bir kullanıcı, kendi aramaları için tekrar açabilir. inactive: true ise motoru kullanıcı ayarlarından tamamen kaldırır; adresinizden asla çalışmayacak bir motor için yapmanız gereken budur. weight farklı bir işlev görür: SearXNG sonuçları birleştirip sıralarken o motorun sonuçlarının ne kadar etkili olacağını ölçeklendirir; 1'in altındaki bir ağırlık, marjinal bir motoru tutmanızı sağlar ancak ilk sayfayı domine etmesini engeller.

Düzenleme yaptıktan sonra container'ı yeniden başlatın, birkaç arama yapın ve ardından /stats kısmını tekrar kontrol edin. Altı çalışan motora sahip temiz bir istatistik sayfası, yirmi motorlu ve hatalarla dolu bir sayfadan daha kullanışlıdır.

Kalıcı çözüm: giden istekleri bir proxy üzerinden yönlendirme

SearXNG, giden motor isteklerini bir proxy üzerinden gönderebilir; bu işlem, motorun gördüğü adresi değiştirir. Ayarı outgoing: altında genel olarak yapabilir veya yalnızca tek bir motor sorun çıkardığında motor bazında yapılandırabilirsiniz.

outgoing:
  request_timeout: 3.0
  extra_proxy_timeout: 10
  proxies:
    all://:
      - socks5h://user:password@proxy:1080
engines:
  - name: <engine name>
    proxies:
      http: socks5h://user:password@proxy:1080
      https: socks5h://user:password@proxy:1080

Proxy'nin ana bilgisayar adını (hostname) çözümlemesini istediğinizde socks5:// yerine socks5h:// tercih edin; çünkü h, adın sunucunuzda çözümlenmek yerine doğrudan proxy'ye gönderilmesi anlamına gelir. Aynı zamanda zaman aşımı bütçesini artırın. request_timeout varsayılan olarak 3.0 saniyedir; bir proxy her isteğe fazladan bir gidiş-dönüş süresi ekler ve normalde zamanında yanıt veren motorlar zaman aşımı nedeniyle başarısız olmaya başlar. extra_proxy_timeout tam olarak bu amaçla mevcuttur ve proxy kullanıldığında süreye saniye ekler. Bunu 10 gibi bir tam sayı olarak yazın: ayar şeması bir tamsayı bekler ve 10.0 gibi bir değer geçersiz settings.yml olarak reddedilir.

Proxy kullanmanın maliyeti:

  • Proxy operatörü, örneğinizin hangi motorlara ve ne zaman sorgu gönderdiğini görür. TLS (taşıma katmanı güvenliği), arama terimlerini operatörün günlüklerinden uzak tutar çünkü sorgu şifreli isteğin içindedir; ancak trafiğinizin şekli ve zamanlaması operatör tarafından görülebilir.
  • Paylaşımlı bir çıkış adresi, aynı hizmet için ödeme yapan diğer kişilerle paylaşılır. Eğer bu kişiler veri kazıma (scraping) yaparsa, onların itibarı size geçer; bu durum bazen kaçmaya çalıştığınız engellemeden daha hızlı gerçekleşir.
  • Ucuz konut tipi (residential) proxy havuzları, genellikle sahiplerinin trafik taşıma konusunda bilerek onay vermediği tüketici cihazlarından oluşturulur. Ne satın aldığınızı bilin.
  • using_tor_proxy: true, Tor üzerinden yönlendirme yapar ancak çıkış düğümü adresleri tamamen yayınlanmıştır ve veri merkezi aralıklarını engelleyen bir motor, genellikle çıkış düğümlerini en az o kadar sert engeller.
  • Arama artık kendi sunucunuzun dışında bir hizmete bağımlıdır; bu hizmet kendi programına göre başarısız olabilir ve sonuçlarınızı da beraberinde götürebilir.

Bir proxy, engellemeyi kaldırmak yerine yerini değiştirir ve örneğinizin gizlilik hikayesi artık üçüncü bir tarafı da içerir. Eğer kısa bir gizlilik hikayesi self-host etmenizin nedeni ise, herhangi bir hizmete kaydolmadan önce bunu kendi kendine barındırılan bir örneğin gerçekten neyi gizleyip neyi gizlemediği ile karşılaştırın.

Kalıcı çözüm: bilinçli olarak daha küçük bir motor kümesi çalıştırmak

Çoğu kullanıcının göz ardı ettiği seçenek, daha az motorla yetinmektir. SearXNG'nin değeri birleştirmeden gelir; her seferinde yanıt veren altı motorun birleşimi, yarısı saatlerce veya günlerce askıda kalan yirmi motorun birleşiminden daha iyidir. /stats kısmını bir hafta boyunca izleyin ve IP adresinizden temiz bir kayıt tutan motorları koruyun.

API anahtarı ile kimlik doğruladığınız motorlar farklı davranır; çünkü motor kim olduğunuzu bilir ve sizin bir insan olup olmadığınızı tahmin etmek yerine bir kota uygular. Bunun karşılığında bir hesap, ayar dosyanızda duran bir anahtar ve genellikle bir fatura ödemeniz gerekir. Sizin için önemli olan bir veya iki motor için bu genellikle en zahmetsiz yoldur.

Bu kararı diğer araçlarınızı göz önünde bulundurarak verin. Askıya alınan bir motor, sonuçları API üzerinden okuyan herhangi bir uygulama için görünmezdir; çünkü Open WebUI ve benzeri araçların sorguladığı JSON API bir hata döndürmek yerine sadece daha az sonuç döndürür. Eğer otomatize edilmiş bir süreç örneğinizden besleniyorsa, sonuçların kötüleştiğine dair şikayet gelmesini beklemek yerine /stats/errors kısmını düzenli aralıklarla sorgulayın.

Bununla uğraşmaya değer mi?

Bunu kullanıcı sayısını hesaplayarak yanıtlayın. Tek bir kişi için kurulan bir örnek, günde birkaç arama gönderir ve bu trafik birçok arama motorunun asla kısıtlamadığı bir orandır. Bir arama motoru sizi kısıtlarsa çözüm basittir: o motoru devre dışı bırakın; yokluğunu neredeyse hiç hissetmezsiniz. Küçük bir VPS üzerinde kendi SearXNG örneğinizi çalıştırmanın olağan deneyimi budur ve bu işlem için herhangi bir tünel veya proxy gerekmez.

Halka açık veya paylaşımlı bir örnek, aynı yazılımı çalıştıran farklı bir makinedir. Sorgu oranı tetikleyicidir ve eklediğiniz her kullanıcıyla birlikte artar; bu nedenle kısıtlamalar, herhangi bir yapılandırmanın karşılayabileceğinden daha hızlı gelir. Başlangıçtan itibaren daha küçük bir motor kümesi planlayın ve şu an eklediğiniz her proxy'nin, başkalarının aramalarını sizin hesabınız üzerinden taşıdığını unutmayın.

Otomatik istemciler bu iki durumun arasında yer alır ve daha zor olan duruma yakındır. Tek bir soruyu yanıtlamak için birden fazla arama yapan bir aracı, hiçbir insanın üretmediği yoğunlukta sorgu patlamaları oluşturur; bu nedenle kodlama araçlarını ve araştırma yazılımlarını yönlendirdiğiniz bir örnek, manuel olarak kullanılan aynı örneğe göre kısıtlamalarla daha erken karşılaşır. Kullanım amacınız buysa, geniş kapsamlılık yerine güvenilirliği temel alan bir motor kümesi seçin ve aracın yalnızca gerçekten sonuç alabileceği motorlarla çalışmasına izin verin.

Geçerli olan kural şudur: Eğer bir arama motoru, kendi sunucunuzu barındırmanızın asıl nedeni ise onun için mücadele edin; değilse devre dışı bırakın.

FAQ

Sorun giderildikten sonra bir SearXNG motoru neden hala sonuç döndürmüyor?

Çünkü motor hala askıya alınmış durumdadır. SearXNG, bir motordan gelen bir doğrulama talebini veya reddi algıladığında, search.suspended_times içinde belirlenen süre boyunca o motora sorgu göndermeyi durdurur; varsayılan ayarlarda bu süre, ret türüne bağlı olarak üç dakika ile on beş gün arasında değişir. Askıya alma durumu çalışan süreçte tutulduğu için container yeniden başlatıldığında bu durum temizlenir ve bir sonraki aramada motor tekrar denenir. Eğer yeniden başlatmanın hemen ardından motor tekrar hata verirse, uyguladığınız çözüm işe yaramamış demektir.

Bir motorun CAPTCHA hatası ile instance'ımın döndürdüğü 429 hatası aynı şey midir?

Bu hatalar zıt yönlerde ilerler. Instance'ınızdan tarayıcınıza dönen 429 hatası, SearXNG'nin kendi sınırlayıcısının, isteğinizi otomatikleştirilmiş olarak algılamasıdır ve yapılandırması size aittir. CAPTCHA veya engelleme hatası ise, kontrolünüz dışındaki donanımlarda karar veren yukarı yönlü (upstream) motorun sunucunuzu reddetmesidir. Eğer sonuç sayfası yükleniyor ancak bazı motorlardan sonuç gelmiyorsa, ikinci durumla karşı karşıyasınız demektir.

Sunucumda bir VPN veya proxy kullanmak motor CAPTCHA'larını çözer mi?

Bazen işe yarar ancak bir bedeli vardır. Giden istekleri outgoing.proxies üzerinden yönlendirmek, motorun gördüğü adresi değiştirir; bu da veri merkezi IP bloğunuza bağlı bir engeli kaldırabilir. Ancak bu durumda proxy operatörü hangi motorları ne zaman sorguladığınızı görür, paylaşımlı bir çıkış adresi kullandığınız için diğer müşterilerin itibarı sizinle ilişkilendirilir ve eklenen gecikme süresi request_timeout ve extra_proxy_timeout değerlerini artırmadığınız sürece zaman aşımına (timeout) neden olur. Tor, using_tor_proxy üzerinden kullanılabilir ancak çıkış adresleri herkese açık olduğundan sıkça doğrulamaya tabi tutulur.

SearXNG'nin CAPTCHA'yı otomatik çözmesini sağlayabilir miyim?

Bunun için bir ayar bulunmamaktadır. Projenin dokümante ettiği yöntem manueldir: bir SSH SOCKS tüneli, kendi tarayıcınız ve doğrulama işlemini bizzat sizin yapmanız gerekir. Doğrulama taleplerini otomatik yanıtlamak için geliştireceğiniz her türlü yapı, motorun belirtilen politikasına aykırıdır ve doğrulama yöntemi her değiştiğinde sessizce bozulur; bu da sizi bir arama instance'ı çalıştırmak yerine bir scraper (veri kazıyıcı) bakımcısı haline getirir. Adresinizi engelleyen motorları kaldırmak, kalıcı olarak çalışan tek çözümdür.