429 오류 - "너무 많은 요청" - 무언가가 짧은 시간 안에 사이트를 너무 자주 쳤을 때 쇼를합니다. 처음에는 작은 문제 나 서버가 트래픽을 관리하려는 서버처럼 보일 수 있습니다.
그러나 많은 경우에, 그것은 실제 방문객들이 문제를 일으키는 것이 아니라 봇입니다.일부는 GoogleBot처럼 도움이됩니다.스크레이퍼 나 공격적인 도구와 같은 다른 사람들은 의미없이 사이트를 과부하시킬 수 있습니다.그리고 때로는 범인이 외부에 전혀 있지 않습니다. 오류를 유발하는 소프트웨어 또는 모니터링 시스템입니다.
실제로 429 오류의 원인은 무엇입니까?
429 오류는 서버의 말 방법입니다.
"너무 많은 요청을 너무 빨리 보내고 있습니다.조금만 물러 섰다."
이 응답은 일반적으로 속도 제한, 방법 웹 사이트 및 API가 단일 클라이언트 (브라우저, 크롤러 또는 스크립트와 같은)가 일정 기간 동안 보낼 수있는 요청 수를 제어하는 데 사용됩니다.
실제 사용자의 급증으로 갑자기 트래픽이 유입 될 수 있지만 자동화 된 활동의 결과가 더 많습니다.인터넷의 많은 부분이 인간의 의견을 제외하고 반복적 인 작업을 처리하기 위해 이러한 봇과 도구가 반드시 악의적 인 것은 아닙니다.그러나 너무 많은 요청을 너무 빨리 보내면 무의식적으로 429 오류를 유발할 수 있습니다.
누가 너무 많은 요청을 보내고 있습니까?
스파이크가 트래픽 급증이나 악의적 인 활동으로 인한 것으로 가정하는 것은 쉽습니다.그러나 대부분의 경우 원인은 이러한 그룹 중 하나에 속합니다.
- 검색 엔진 크롤러 : GoogleBot, Bingbot 및 다른 사람들과 같은 봇은 웹 사이트를 스캔하여 검색 색인을 최신 상태로 유지합니다. 일반적으로 좋습니다.즉, 사이트가 자주 업데이트되거나 인터링 된 페이지가 많으면 서버에 여전히 과부하 할 수 있습니다.
- SEO 도구 : Screaming Frog, Ahrefs 및 Semrush와 같은 도구는 봇 동작을 시뮬레이션하여 웹 사이트를 감사합니다.짧은 시간 안에 수백 또는 수천 개의 요청을 보내서 모든 페이지, 링크 및 태그를 확인할 수 있습니다.적절한 스로틀 설정이 없으면 이러한 도구는 웹 서버를 압도 할 수 있습니다.
- 현장 스크레이퍼 : 이것들은 일반적으로 환영받지 않습니다.스크레이퍼는 종종 가격, 리뷰 및와 같은 데이터를 추출하는 데 사용됩니다. 제품 설명.많은 사람들이 예의 바른 봇 행동을 따르지 않으며 특정 페이지를 반복적으로 부딪 치거나 전체 사이트를 다운로드하려고 시도 할 수 있습니다.
- 가동 시간 모니터 및 스크립트 : 이것들이 너무 자주 또는 스마트 간격없이 실행되도록 설정되면 의도하지 않은 스팸 트래픽처럼 행동 할 수 있습니다.
- 내부 서비스 : CRON 작업, API 또는 통합과 같은 자체 인프라는 특히 한계를 존중하도록 설계되지 않은 경우 실수로 사이트를 압도 할 수 있습니다.
결론 : 이들은 귀하의 사이트를 탐색하는 사람들이 아니며 자동화 된 프로세스입니다.일부는 도움이되지만 일부는 그렇지 않지만 어느 쪽이든, 특히 서버가 발생하는 동안 발생하는 것과 같은 갑작스런 스파이크를 처리하도록 구축되지 않은 경우 인프라를 과부하시킬 수 있습니다. DDoS 공격.
429 오류의 소스를 추적하는 방법
사이트의 속도 제한 또는 방화벽 설정을 변경하기 전에 문제의 원인을 정확히 알 수 있습니다.
로그로 시작하십시오 :
- 서버 로그 : 이것들은 가장 먼저 확인하는 장소입니다.짧은 시간에 걸쳐 반복적으로 나타나는 IP 주소, 사용자 에이전트 또는 경로를 찾고 있습니다.공통 로그 파일에는 Access.Log 용 Apache 또는 Access.Log/Error.Log가 포함되어 있습니다.429 상태 코드를 반환하는 요청을 찾으십시오.
- 속도 제한 로그 (있는 경우) : 일부 서비스 (API 게이트웨이, 프록시 또는 콘텐츠 전달 네트워크)는 속도 제한을위한 전용 로그를 제공합니다.이들은 어떤 요청이 임계 값을 초과했는지, 어떤 IP에서 왔으며, 어떤 엔드 포인트에 액세스 할 것인지 정확히 알 수 있습니다.
- 패턴 : 명백한 자동화 징후를보십시오.요청합니다 :
- 브라우저의 전형적인 세션 쿠키 또는 헤더를 운반하지 마십시오.
- Python-Requests, Curl 또는 Custom Scrapers와 같은 일반 또는 의심스러운 사용자 에이전트 사용
- 알려진 호스팅 제공 업체 또는 데이터 센터 (AWS, Azure, Hetzner 등)에서 나옵니다.
패턴이 나면 트래픽이 양호한 지 (예 : GoogleBot) 또는 차단 또는 속도를 낮추어야하는지 결정할 수 있습니다.
요금 제한 설정이 제대로 설정되어 있습니까?
속도 제한은 사이트가 과부하되는 것을 막는 데 도움이되지만 너무 공격적이라면 유용한 트래픽도 차단할 수 있습니다. 504 게이트웨이 시간 초과 오류.올바른 구성은 합법적 인 트래픽을 차단하지 않고도 남용을 방지 할 수 있습니다.
생각할 것 :
- 제한 방법: IP 주소, API 토큰, 사용자 세션 또는 기타 요청으로 요청을 추적하고 있습니까?IP 기반 제한은 일반적이지만 여러 사용자가 동일한 IP를 공유하는 경우에는 효과적이지 않을 수 있습니다.
- 제한 유형 :
- 고정 창 : 고정 간격으로 요청을 제한합니다 (예 : 분당 100 개의 요청).구현하기 쉽지만 길들일 수 있습니다.
- 슬라이딩 윈도우 : 더 유연하고 시간이 지남에 따라 요청이 퍼집니다.
- 토큰 버킷 또는 누출 된 버킷 : 가끔 파열되지만 전체 속도를 제어합니다.
- 헤더 및 응답 : 봇과 도구가 언제 잠시 멈추고 다시 시도 해야하는지 알 수 있도록 재시 도와 같은 헤더를 반환하고 있는지 확인하십시오.이것은 잘 행동하는 크롤러와의 호환성을 향상시킵니다.
- 사용자 정의 임계 값 : 모든 트래픽을 똑같이 처리하지 마십시오.로그인 된 사용자, 검색 봇 또는 내부 도구에 대한 더 많은 요청을 허용하면서 알려지지 않았거나 무단 방문자에게 더 엄격한 가죽 끈을 유지할 수 있습니다.
하루가 끝나면 균형 행위입니다. 요금 제한이 너무 빡빡하면 합법적 인 봇을 차단하거나 사용자가 사이트에 액세스하는 것을 방지 할 수 있습니다.너무 느슨하면 나쁜 봇은 자원을 먹거나 더 나쁘게 먹을 수 있습니다.
좋은 봇을 통과 시키십시오
검색 엔진 및 신뢰할 수있는 SEO 도구는 가시성 및 성능에 필수적입니다.당신은 그들을 허용하고 싶지만 통제 된 방식으로.
다음은 도움이됩니다.
- robots.txt 및 크롤링 델리 : 크롤링 지시 지침을 사용하여 봇이 속도를 늦추도록 지시 할 수 있습니다.이것은 모든 크롤러에게 영광을 누리고 있지만, 일부, 특히 좋은 사람들은 그것을 존중합니다.
- 신뢰할 수있는 봇 : 로그에서 사용자 에이전트 문자열을 검토하여 GoogleBot, Bingbot 등을 식별하십시오.확인하십시오 역 DNS 점검 사기꾼을 피하기 위해.
- 알려진 도구의 속도 제한 조정 : 알려진 사용자 에이전트 또는 검증 된 IP 범위를 기반으로 한 속도 제한 또는 예외를 설정합니다.예를 들어, GoogleBot은 알 수없는 크롤러보다 더 높은 요청 제한 또는 더 긴 세션 시간 초과를 허용합니다.
- 별도의 요율 제한 : API 또는 콘텐츠가 많은 사이트를 실행하는 경우 인간 방문자와 자동화 된 도구에 대한 독특한 규칙을 사용하십시오.
이런 식으로 검색 봇은 인프라를 압도하지 않고 업무를 수행 할 수 있습니다.
나쁜 봇과 크롤러를 다루는 방법
일부 봇은 분명히 모욕적입니다.그들은 콘텐츠를 색인화하는 데 관심이 없습니다. 컨텐츠를 긁어 내거나 복사하거나 취약점을 찾으려고합니다.이것들은 더 적극적으로 차단되거나 관리되어야합니다.
그들을 다루는 방법 :
- 사용자 에이전트별로 차단 : 특정 사용자 에이전트를 사용하는 반복 범죄자가있는 경우 .htaccess, 서버 구성 또는 WAF (웹 응용 프로그램 방화벽).
- IP 또는 ASN으로 차단: 방화벽 규칙을 사용하여 학대가 데이터 센터에서 나오는 경우 특정 IP 또는 전체 호스팅 네트워크의 트래픽을 차단하십시오.
- WAF 사용 : 웹 애플리케이션 방화벽은 로그인 페이지 또는 검색 엔드 포인트에 대한 요청과 같이 학대 패턴을 자동으로 감지하고 차단할 수 있습니다.
- 가벼운 마찰 추가 : 민감한 페이지 (검색 또는 가격 엔드 포인트와 같은)에서 JavaScript 과제 또는 기본 캡처를 추가하십시오.이는 사용자 경험을 해치지 않고 대부분의 브라우저 도구를 중지합니다.
- 시간이 지남에 따라 남용을 추적하십시오 : 봇이 다중 속도 제한 위반을 유발할 때 자동으로 업데이트되는 블록리스트를 만듭니다.
자신의 도구를 잊지 마십시오
429 오류를 처리 할 때 외부 트래픽에 집중하기 쉽지만 최악의 범죄자 중 일부는 귀하 또는 팀이 설정 한 도구 일 수 있습니다.내부 스크립트, SEO 감사, 가동 시간 모니터 또는 대시 보드는 타사 봇만큼 쉽게 요청하여 사이트를 침수 할 수 있습니다.
차이?당신은 이것들을 완전히 제어 할 수 있습니다.
일반적인 과부하 소스
도움을주기 위해 설계된 도구조차 잘못 구성 될 때 문제를 일으킬 수 있습니다.
SEO 크롤러 (Screaming Frog, Semrush 및 Ahrefs와 같은)
이 도구는 전체 사이트를 기어 다니며 메타 데이터, 링크 및 기술 건강을 감사합니다.
높은 동시성 (예 : 10+ 스레드)을 사용하고 크롤링 지연이없는 경우, 특히 공유 또는 하부 환경에서 서버를 압도 할 수 있습니다.
맞춤형 스크립트 또는 내부 봇
데이터 분석, 테스트 또는 스테이징 목적으로 자신의 API 엔드 포인트를 쿼리하는 스크립트가있을 수 있습니다.
제한, 지연 또는 캐싱을 포함하지 않으면 의도하지 않게 응용 프로그램을 망칠 수 있습니다.
사이트 모니터링 도구
너무 자주 확인하도록 설정된 경우 Uptime, 응답 시간 또는 페이지 성능을 확인하는 도구는 시끄러울 수 있습니다.
15 초마다 홈페이지를 점검하면 무해한 것처럼 보일 수 있지만 여러 지역이나 서비스로 곱하면 빠르게 추가됩니다.
내부 도구를 확인하는 방법
좋은 소식은 내부 트래픽이 가장 쉽게 해결하기가 쉽다는 것입니다. 행동을 제어하기 때문입니다.
크롤링 속도와 동시성을 낮추십시오
비명 개구리와 같은 도구에서 :
- 스레드 수 또는 동시 연결을 줄입니다.
- 요청 사이에 몇 초의 크롤링 지연을 추가하십시오.
- 여러 사이트를 감사하는 경우 크롤링을 비틀 거리게하여 한 번에 모두 실행되지 않습니다.
10 개의 스레드에서 2로 떨어 뜨려도 기능을 잃지 않고 서버 스트레인을 크게 줄일 수 있습니다.
가능한 한 캐싱을 사용하십시오
- 실시간 데이터가 필요없는 내부 대시 보드 또는 도구에 대한 API 응답.
- 아무것도 변경되지 않는 간격에 대한 모니터링 도구의 캐시 홈페이지 확인 또는 사이트 스냅 샷.
이렇게하면 동일한 결과에 대한 응용 프로그램을 반복적으로 적용해야합니다.
교통량이 적은 시간 동안 감사 및 스캔을 실행하십시오
- 하룻밤 또는 이른 아침 시간 (서버의 시간대)에 실행되도록 크롤링 및 내부 스크립트를 예약하십시오.
- 이는 고객이나 방문자가 귀하의 사이트를 사용하는 기간과 겹치지 않습니다.
사이트가 전 세계 인 경우 지역이나 시간 창에서 감사를 분할하십시오.
스크립트로 리트리 로직을 구축하십시오
- 429 응답을 받으면 스크립트가 서버를 망치지 않도록하십시오.
- 해당 상태가 나타날 때 대기 또는 백 오프로 논리를 추가하십시오.
- 짧은 지연 또는 지수 백 오프 접근법 (각 재 시도 후 더 오래 대기)은 문제를 악화시키는 회수의 피드백 루프를 방지 할 수 있습니다.
자신의 직업을 문서화하고 검토하십시오
- 어떤 스크립트 나 도구가 웹 사이트, 얼마나 자주,시기에 전화하는 공유 기록을 유지하십시오.
- 새로운 429 문제가 나타나면 외부 소스라고 가정하기 전에보기 시작할 분명한 장소가 있습니다.
장기적으로 할 수있는 일
429 오류의 원인을 추적하고 중단 한 후에는 미리 생각하는 것이 현명합니다.현재 문제를 해결하는 것은 작업의 일부일 뿐이므로 동일한 문제가 다시 나타나지 않도록해야합니다.
다음은 장기적으로 일을 안정적으로 유지하는 데 도움이되는 몇 가지 실용적인 단계입니다.
재시험 탭 헤더를 사용하십시오
서버가 429를 반환하는 경우 응답에 리트리 탁자 헤더를 포함시키는 것이 좋습니다.이것은 봇과 자동화 된 도구에 다시 시도하기 전에 얼마나 기다려야하는지 알려줍니다.
- 예를 들어, Retry-After : 120은 클라이언트에게 120 초를 기다리라고 지시합니다.
- GoogleBot을 포함한 대부분의 잘 행동하는 봇은 이것을 존중하고 기어를 늦출 것입니다.
헤더를 무시하는 스크레이퍼 나 욕설 도구를 중단하지는 않지만 합법적 인 서비스는 추가 문제를 일으키지 않고 자동으로 백업 할 수있는 방법을 제공합니다.
적용 할 곳 :
- 웹 서버 구성 (Apache, Nginx).
- 응용 프로그램 수준 응답 (Express, Flask 등과 같은 프레임 워크를 사용하는 API 또는 웹 앱의 경우)
봇 트래픽을 정기적으로 모니터링하십시오
물건이 깨질 때까지 기다리지 마십시오.약간의 가시성은 먼 길을갑니다.
- 알려진 크롤러에서 활동을 추적하는 로그 리뷰, 대시 보드 또는 보고서를 설정하십시오.
- 사이트의 새로운 섹션을 치거나 평소보다 더 빈번한 요청을 보내는 크롤러와 같은 행동의 변화를 지켜보십시오.
- 새로운 사용자 에이전트 또는 예상치 못한 IP 블록을 주시하십시오.이것들은 긁거나 학대의 초기 징후 일 수 있습니다.
사용할 수있는 도구 :
- 액세스 로그 (Goaccess 또는 AWSTATS와 같은 분석).
- 서버 분석 도구 (예 : NetData, Grafana 또는 Prometheus).
- CloudFlare 또는 WAF의 봇 관리 기능.
성장함에 따라 속도 제한을 조정하십시오
속도 제한은 "설정하고 잊어 버리지"않습니다.트래픽이 증가하거나 콘텐츠가 변경되거나 인프라가 발전함에 따라 이전에 설정 한 임계 값이 너무 공격적이거나 너무 편안해질 수 있습니다.
금리 제한 정책을 정기적으로 검토하십시오.
- 올바른 방법 (IP 기반, 사용자 기반 등)을 사용하고 있습니까?
- 교통량이 많은 엔드 포인트가 보호됩니까?
- 합법적 인 도구가 여전히 우연히 차단되고 있습니까?
일부 경로의 한계를 높이거나 다른 경로에서 줄여야 할 수도 있습니다.갑작스런 컷오프를 피하기 위해 고정 창 대신 슬라이딩 창 알고리즘을 사용하여 실험 할 수도 있습니다.
팀 팁 : 요금 제한과 영향을 미치는 사람을 문서화하십시오.따라서 나중에 팝업 될 때 문제를 디버그하는 것이 더 쉽습니다.
봇 관리 기능과 함께 CDN을 사용하십시오
좋은 콘텐츠 배달 네트워크 캐시 컨텐츠 이상의 기능을 수행합니다. 서버에 도달하기 전에 원치 않는 트래픽을 필터링하거나 스로틀하는 데 도움이 될 수 있습니다.
대부분의 주요 CDN (CloudFlare, Fastly 또는 Akamai와 같은)은 다음과 같은 편리한 도구를 제공합니다.
- IP 또는 경로별로 요청 속도 제한
- 봇 스코어링 또는 지문 (인간과 봇의 차이점을 알리기 위해)
- 나쁜 행동을 자동으로 차단하거나 도전하는 규칙
- 비 브라우저 클라이언트를 늦추기위한 JavaScript 과제 또는 관리 도전
원산지 서버에 부딪히기 전에이 트래픽을 오프로드하면 부하를 줄이고 대역폭 비용을 줄이며 429S와 같은 문제가 처음에 발생하는 것을 방지하는 데 도움이됩니다.
이미 CDN을 사용하고 있다면 보안 또는 봇 보호 설정을 탐색하는 데 시간이 걸리십시오. 이미 필요한 도구가 있고 켜야 할 도구가있을 수 있습니다.
보너스 팁 : 오류 페이지에 컨텍스트를 추가하십시오
429 오류를 반환하는 경우 빈 화면을 제공하지 마십시오.짧은 설명과 친근한 메시지를 추가하십시오.예를 들어:
"우리는 예상보다 더 많은 요청을 받고 있습니다. 자동화 된 도구를 사용하는 경우 몇 분 안에 다시 시도하십시오."
이를 통해 개발자와 SEO 팀은 무슨 일이 있었는지 이해하고 그에 따라 조정하는 데 도움이됩니다.적용되는 경우 문서 또는 사이트의 Robots.txt에 대한 링크를 포함 할 수도 있습니다.
마무리
429 오류가 항상 귀하의 사이트가 과부하 된 것을 의미하지는 않습니다. 이것은 종종 누군가 또는 무언가가 너무 강력하다는 것을 의미합니다.
이러한 요청을 추적, 식별 및 관리하는 법을 배우면 문제를 줄이고 자원을 보호하며 실제로 제공하고자하는 사람들과 봇이 사이트를 사용할 수 있도록하십시오.