검색 앞에 shim 을 두고 엔진 집합을 명시하며, 문서 읽기는 성인 사이트를 거절한다 - #32
Merged
Merged
Conversation
수백 명이 동시에 검색하면 SearXNG 프로세스가 아니라 하나의 아웃바운드 IP 로 yandex 한 곳에 몰리는 구조가 먼저 무너진다. 엔진은 총량이 아니라 순간 동시성에 밴을 걸고, CAPTCHA 한 번에 엔진이 한 시간(Cloudflare 챌린지는 15일) 정지되며 그 정지는 valkey 로 워커 넷이 공유한다. 무관한 결과의 원인도 실측하니 거의 전부 bing 이었다(k8s 질의에 TikTok 로그인, vLLM 질의에 Microsoft 고객지원). - search-shim: 게이트웨이의 /tools/search 와 deep-research 가 SearXNG 대신 이 shim 을 거친다. JSON·HTML 검색 모두 결과 있는 답을 15분 캐시하고, 동시에 들어온 같은 검색은 upstream 호출 하나로 합치며, SearXNG 로 나가는 동시 검색은 12개로 묶는다. SearXNG 가 못 답하면 6시간 이내의 옛 답을 주고, 없으면 503/502. SearXNG 의 4xx 는 그대로 통과. 30개 동일 질의 버스트가 SearXNG 에는 1번 닿았다. safesearch=2 를 강제하고 language=ko 는 ko-KR 로 보낸다(시장·국가를 받는 엔진은 지역이 있어야 한국 결과를 우선한다). 검색어는 DEBUG 에서만 남고 접근 로그는 끈다. - SearXNG: use_default_settings.engines.keep_only 로 19개만 남긴다. 이 네트워크에서 답하고 대학 구성원이 묻는 것만이다. general 은 yandex· brave·wikipedia·openlibrary, news 는 duckduckgo news·bing news·reuters, science 는 google scholar·openalex·semantic scholar·arxiv·pubmed· openaire, it 는 github·stackoverflow·mdn·docker hub·microsoft learn· huggingface. 여섯 가지 정지 시간을 모두 2~10분으로, default_lang 을 ko-KR 로, safe_search 를 2로. 실측 근거는 설정 파일 주석에. - gen-searxng-config.sh: 예시와 키에서 만든 내용과 다르면 항상 다시 쓴다(--force 는 없앰). setup.sh 는 파일이 바뀌면 searxng 를 재시작한다. 전에는 기존 노드에 새 설정이 도달하지 않았다. - crawl4ai-shim: StevenBlack/hosts porn-only 목록(커밋 고정)을 이미지에 넣고 netguard 와 같은 두 지점에서 판정한다. hosts 파일 의미 그대로 나열된 호스트만 막고 www. 만 접는다. fc2.com 이나 www.sex 같은 항목이 블로그 호스트나 최상위 도메인 전체를 막지 않도록. 페이지 주소는 DEBUG 에서만, 경고에는 호스트만. 확인: 시험 168개, ruff, compose config, CI 이미지 목록 검사 통과. 라이브 반영 후 캐시 히트 0.03초, HTML 검색도 캐시, 4xx 통과, 반복 파라미터는 SearXNG 와 같이 첫 값, 성인 호스트 거부·fc2 블로그 통과, 로그에 검색어와 주소 0건.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
수백 명이 동시에 검색할 때 먼저 무너지는 것은 SearXNG 프로세스가 아니라 하나의 아웃바운드 IP 로 yandex 한 곳에 몰리는 구조다. 엔진은 총량이 아니라 순간 동시성에 밴을 걸고, CAPTCHA 한 번에 엔진이 한 시간(Cloudflare 챌린지는 15일) 정지되며 그 정지는 valkey 로 워커 넷이 공유한다. 무관한 결과의 원인도 실측하니 거의 전부 bing 이었다(k8s 질의에 TikTok 로그인, vLLM 질의에 Microsoft 고객지원).
변경
services/search-shim(새 서비스): 게이트웨이의/tools/search와 deep-research 가 SearXNG 대신 이 shim 을 거친다. JSON·HTML 검색 모두 결과 있는 답을CACHE_TTL_S(15분) 캐시하고, 동시에 들어온 같은 검색은 upstream 호출 하나로 합치며, SearXNG 로 나가는 동시 검색은MAX_CONCURRENT_SEARCHES(12)로 묶는다. SearXNG 가 못 답하면STALE_TTL_S(6시간) 이내의 옛 답을 주고, 없으면 503/502. SearXNG 의 4xx 는 그대로 통과.safesearch=2를 강제하고language=ko는ko-KR로 보낸다. 검색어는 DEBUG 에서만 남고 접근 로그는 끈다./health에 실행·대기·합침 수와 캐시 크기.services/searxng/settings.yml.example:use_default_settings.engines.keep_only로 19개만 남긴다. general 은 yandex·brave·wikipedia·openlibrary, news 는 duckduckgo news·bing news·reuters, science 는 google scholar·openalex·semantic scholar·arxiv·pubmed·openaire, it 는 github·stackoverflow·mdn·docker hub·microsoft learn·huggingface. 여섯 가지 정지 시간을 모두 2~10분으로,default_lang을ko-KR로,safe_search를 2로, 자동완성은 끔. 실측 근거는 파일 주석에.scripts/gen-searxng-config.sh: 예시와 키에서 만든 내용과 다르면 항상 다시 쓴다(--force는 없앰).setup.sh는 파일이 바뀌면 searxng 를 재시작한다. 전에는 기존 노드에 새 설정이 도달하지 않았다.services/crawl4ai-shim: StevenBlack/hosts porn-only 목록(커밋 고정)을 이미지에 넣고(adultlist.py) netguard 와 같은 두 지점에서 판정한다. hosts 파일 의미 그대로 나열된 호스트만 막고www.만 접는다.fc2.com이나www.sex같은 항목이 블로그 호스트나 최상위 도메인 전체를 막지 않도록. 페이지 주소는 DEBUG 에서만, 경고에는 호스트만, Crawl4AI 진행 표시도 끔.docker-compose.yml,Caddyfile,build-push-images.sh, publish 워크플로 카탈로그, dependabot, CI 의 pytest 대상,docs/tools.md·env-reference.md·CONTRIBUTING.md.측정 (운영, 이 네트워크)
확인
시험 168개(search-shim 8, adultlist 5 포함), ruff, compose config, CI 이미지 목록 검사 통과. 운영에 배포해 HTML 검색 캐시, 4xx 통과, 반복 파라미터는 SearXNG 와 같이 첫 값, 성인 호스트 거부·fc2 블로그 통과, 로그에 검색어와 주소 0건을 확인했다.
같이 알아둘 것
language=ko-KR,web_search의kind레인)은 개인정보 마스킹을 가는 곳에 따라 나누고, 기관 연락처는 가리지 않는다 KloudChat#176 안에 포함돼 이미 main 에 있다.docker compose restart gateway searxng.