2.0 KiB
type, status
| type | status |
|---|---|
| howto | current |
Tuning the SearXNG instance
The client works around a fragile instance. These changes fix the cause, and
they need shell access to the host behind search.ops.io
(90.169.228.16 / ops.mywire.org), which is a different machine from
the one the agents run on.
Why it is needed
Measured on 2026-08-10 from this host:
- The default engine set for the
generalcategory is onlyduckduckgo,braveandstartpage.braveandstartpagesit inSuspended: too many requestsorSuspended: CAPTCHAalmost permanently, so in practice a single engine carries every query. - About 25 probe requests over a few minutes pushed
duckduckgointoCAPTCHAas well. The instance then answered HTTP 200 withresults: []and an emptyunresponsive_engines- indistinguishable from "nothing found" without the client-side handling we added. - Recovery took roughly six minutes.
Changes
-
Allow our egress IP through the limiter. In
limiter.toml:[botdetection.ip_lists] pass_ip = ["77.7.46.234"] -
Shorten the suspensions. In
settings.ymlthe defaults are 24 hours for a CAPTCHA and one hour for too-many-requests, which is far longer than the condition lasts:search: suspended_times: SearxEngineCaptcha: 300 SearxEngineTooManyRequests: 120 SearxEngineAccessDenied: 300 -
Give
generalmore than one working engine.googleandwikipediareportenabled: truein/configyet never appear in ageneralresponse, so they are not in the default set. Put them in it; one live engine per category is a single point of failure. -
Keep the JSON API on.
formats: [html, json]must stay, otherwise every client here breaks.
Verifying
Ten requests in a row used to suspend the instance for minutes. After the change they should all answer:
for i in $(seq 10); do
bin/web/search "test $i" -n 1 --refresh --json | jq -r .status
done
Ten lines of ok means it is fixed.