nginx: 검색 엔진 봇(특히 Bingbot)에 대한 연결 제한을 설정하는 방법

nginx: 검색 엔진 봇(특히 Bingbot)에 대한 연결 제한을 설정하는 방법

2022-10-19 last update

7 minutes reading nginx web server
서버 관리자는 이 문제를 알고 있을 것입니다. 서버를 최적화하기 위해 모든 작업을 수행했으며 정말 잘 작동하고 있으며 Bingbot과 같은 어리석은 검색 엔진 봇이 등장하여 수백 개의 연결로 모든 가상 호스트를 동시에 공격합니다. , 서버 부하를 증가시킵니다. 물론 봇을 완전히 차단하고 싶지는 않습니다(특정 검색 엔진에 관심이 없는 경우 제외). 따라서 robots.txt 및/또는 nginx를 사용하여 서버에 대한 검색 엔진 봇의 연결을 제어할 수 있습니다.

1 서문


이 봇은 웹 사이트를 방문할 때마다 과도한 양의 연결을 생성하기 때문에 이 튜토리얼에서 Bingbot에 초점을 맞추고 있습니다(다른 검색 엔진 봇에서는 이를 눈치채지 못했습니다). 물론 가장 먼저 해야 할 일은 Bing 웹마스터 도구에서 크롤링 속도를 제한하는 것입니다. 그래도 도움이 되지 않거나 서버의 모든 가상 호스트에 대한 Bing 웹마스터 도구에 액세스할 수 없는 경우 계속 읽으십시오.

2 robots.txt 사용


Bingbot은 Crawl-delay 지시문을 이해하므로(Googlebot은 이를 사용하지 않으므로 Googlebot에 사용하지 마십시오!) robots.txt 파일에서 이를 사용할 수 있습니다( http://www.bing.com/blogs/site_blogs/b/webmaster/archive/2012/05/03/to-crawl-or-not-to-crawl-that-is-bingbot-s-question.aspx 참조).


User-Agent: bingbot
Crawl-delay: 1

robots.txt에 Bingbot에 대한 추가 섹션을 만들었기 때문에 User-Agent: *에 대한 Allow/Disallow 지시문은 Bingbot에 더 이상 유효하지 않으므로 Bingbot에 대한 Allow/Disallow 지시문을 반복해야 합니다. 이와 같이:


User-Agent: *
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xml

User-Agent: bingbot
Crawl-delay: 1
Disallow: /cache/
Disallow: /engine/
Disallow: /files/
Disallow: /templates/
Disallow: /uploads/
Disallow: /newsletter/
Disallow: /kontaktformular/
Disallow: /widerrufsrecht/
Disallow: /datenschutz-und-sicherheit
Disallow: /agb/
Disallow: /shopware.php/sViewport,admin
Disallow: /shopware.php/sViewport,note
Disallow: /shopware.php/sViewport,basket
Disallow: /shopware.php/sViewport,rma
Disallow: /shopware.php/sViewport,support
Disallow: /shopware.php/sViewport,ticket
Disallow: /shopware.php/sViewport,newsletter
Disallow: /shopware.php/sViewport,tellafriend
Sitemap: http://www.example.com/sitemap.xml

3 nginx를 사용하여 봇 연결 제어


HttpGeoModuleHttpLimitReqModule을 사용하여 nginx 서버에 대한 검색 엔진 봇의 연결을 제어할 수 있습니다./etc/nginx/nginx.conf를 엽니다...
vi /etc/nginx/nginx.conf
... 다음을 http {} 컨테이너에 추가합니다(vhost 구성 파일이 포함/정의되는 부분 앞).


[...]
geo $isabot {
        default 0;
        #bingbot
        157.55.32.0/24 1;
        157.56.229.0/24 1;
        157.56.93.0/24 1;
        157.55.33.0/24 1;
}
map $isabot $limited_ip_key {
    0 '';
    1 $binary_remote_addr;
}
limit_req_zone $limited_ip_key zone=isabot:5m rate=2r/s;
limit_req zone=isabot burst=200;
[...]

이렇게 하면 Bingbot의 크롤링 속도가 초당 2개의 요청으로 제한됩니다. 초과 연결은 지연되고 200개의 버스트를 넣습니다(버스트가 가득 찰 때까지 nginx는 Bingbot에 503 오류를 반환합니다).
물론 지리적 컨테이너에 더 많은 IP 또는 서브넷을 자유롭게 추가할 수 있습니다.
nginx를 다시 로드하는 것을 잊지 마십시오.
/etc/init.d/nginx reload

4 링크


  • nginx: http://nginx.org/
  • nginx 위키: http://wiki.nginx.org/