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 coreLog 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 nasıl yeniden denediği ve askıya aldığı
SearXNG, kendisini reddeden bir motoru sürekli zorlamaz. Başarısız olan bir motor askıya alınır ve askıda olduğu süre boyunca tamamen atlanır; bozuk bir motorun sessizce kaybolan bir motora dönüşme süreci bu şekilde işler.
Bunu 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, kullandığınız sürümün ayar dokümantasyonu ile bu anahtar isimlerini doğrulayın; çünkü bu ayarlar sürümler arasında yer değiştirmiştir. 2 Eylül 2026 itibarıyla belgelendiği üzere varsayılan değerler şöyledir:
search:
ban_time_on_fail: 5
max_ban_time_on_fail: 120
suspended_times:
SearxEngineAccessDenied: 86400
SearxEngineCaptcha: 86400
SearxEngineTooManyRequests: 3600
cf_SearxEngineCaptcha: 1296000
cf_SearxEngineAccessDenied: 86400
recaptcha_SearxEngineCaptcha: 604800İlk katman, zaman aşımı gibi olağan hataları yönetir. Yasaklama ban_time_on_fail saniyede başlar ve her ardışık hatada max_ban_time_on_fail değerine kadar artar. Varsayılan olarak üst sınır iki dakikadır; bu sayede kararsız bir motor, sorun ortadan kalktıktan birkaç dakika sonra kendiliğinden düzelir.
İkinci katman, bu rehberin konusu olan hataları yönetir. SearXNG, gelen 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 değerler çok daha büyüktür. 86400 saniye bir tam 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 bulur ve düzeltirsiniz, ancak motor saatlerce hiçbir sonuç döndürmez. Motor hala askıdadır. Askıya alma işlemi çalışan süreçte tutulduğundan, 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 nedenle 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 bilmek faydalıdır. Eğer motor yeniden başlatmanın hemen ardından 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 denemeler 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 ayara dokunmayın.
SSH tüneli yukarı akış belgeleri ve çözümlemedikleri
2 Eylül 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 yönlendirme yapan 8080 numaralı portta yerel bir SOCKS sunucusu açar. -N uzak bir komut çalıştırmaz ve -q işlemi 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ü bilgisayarınızın adresini 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 adresinde 8080 numaralı portu kullanacak şekilde bir SOCKS5 proxy olarak yapılandırın, sunucu adresini raporladığını doğrulamak için tarayıcıda aynı adres denetleyicisini yükleyin 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 manuel işlem yapmanız 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.3disabled: 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 veya yalnızca tek bir motorun sorun yarattığı durumlarda motor bazında yapılandırın.
outgoing:
request_timeout: 2.0
extra_proxy_timeout: 10.0
proxies:
all://:
- socks5h://user:password@proxy:1080engines:
- name: <engine name>
proxies:
http: socks5h://user:password@proxy:1080
https: socks5h://user:password@proxy:1080Proxy'nin ana makine adını çözümlemesini istediğinizde socks5:// yerine socks5h:// tercih edin; çünkü h, adın sunucunuzda çözümlenmek yerine doğrudan proxy'ye gönderildiği anlamına gelir. Aynı zamanda zaman aşımı bütçesini artırın. request_timeout varsayılan olarak 2.0 saniyedir; bir proxy her isteğe ek bir gidiş-dönüş süresi ekler ve daha önce 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.
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 trafiği taşıma konusunda bilerek onay vermediği tüketici cihazlarından oluşturulur. Ne satın aldığınızı bildiğinizden emin olun.
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, çıkış düğümlerini genellikle en az o kadar sert engeller.- Arama artık sunucunuzun dışında bir hizmete bağımlıdır; bu hizmet kendi takvimine göre başarısız olabilir ve sonuçlarınızı da beraberinde götürebilir.
Proxy, engellemeyi kaldırmak yerine başka bir yere taşır 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 self-hosted bir örneğin gerçekten neyi gizleyip neyi gizlemediği ile karşılaştırarak tartın.
Kalıcı çözüm: bilinçli olarak daha küçük bir motor kümesi çalıştırmak
Çoğu kişinin göz ardı ettiği seçenek, daha az motor kullanmayı kabul etmektir. SearXNG'nin değeri birleştirmeden gelir; her seferinde yanıt veren altı motorun birleşimi, yarısı günlerce askıda kalan yirmi motordan daha iyidir. /stats adresini bir hafta boyunca izleyin ve IP adresiniz üzerinden temiz bir kayıt tutan motorları koruyun.
API anahtarı ile kimlik doğruladığınız motorlar farklı davranır; çünkü motor sizin kim olduğunuzu bilir ve 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. Otomatik bir sistem örneğinize bağlıysa, sonuçların kötüleştiğine dair şikayet gelmesini beklemek yerine /stats/errors adresini düzenli bir programla 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
Sorunu çözmeme rağmen bir SearXNG motoru neden hala sonuç döndürmüyor?
Çünkü motor hala askıya alınmış durumdadır. SearXNG, bir motordan gelen bir sınama (challenge) veya reddetme yanıtı aldığında, o motoru search.suspended_times içinde belirlenen süre boyunca sorgulamayı durdurur; bu süreler reddedilme türüne bağlı olarak bir saat ile on beş gün arasında değişir. Askıya alma durumu çalışan süreç belleğinde 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, yaptığınız düzeltme işe yaramamış demektir.
Bir motorun CAPTCHA hatası ile instance'ımın döndürdüğü 429 hatası aynı şey mi?
Bu hatalar zıt yönlerde gerçekleşir. Instance'ınızdan tarayıcınıza gelen bir 429 hatası, SearXNG'nin kendi sınırlayıcısının isteğinizi otomatik bir işlem olarak algılamasıdır ve yapılandırması size aittir. Bir CAPTCHA veya engelleme hatası ise, kontrolünüz dışındaki bir donanım üzerinde, yukarı akış (upstream) motorunun 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 çözer, ancak bir maliyeti vardır. Giden istekleri outgoing.proxies üzerinden yönlendirmek, motorun gördüğü IP adresini değiştirir ve veri merkezi IP bloğunuza bağlı olan engellemeleri kaldırabilir. Bu durumda proxy sağlayıcısı 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ı sizin trafiğinizi etkiler 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 sınanır.
SearXNG'nin CAPTCHA'yı otomatik çözmesini sağlayabilir miyim?
Bunun için bir ayar bulunmamaktadır. Projenin önerdiği yöntem manueldir: bir SSH SOCKS tüneli, kendi tarayıcınız ve sınamayı bizzat sizin çözmeniz. Sınamaları otomatik yanıtlamak için geliştirdiğiniz her türlü çözüm, motorun açıkça belirttiği politikalara aykırıdır ve sınama 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.