여러 추천자를 한 번에 차단할 수 있는 우아한 방법이 있나요?

여러 추천자를 한 번에 차단할 수 있는 우아한 방법이 있나요?

리퍼러 스팸을 방지하기 위해 내 nginx.conf에는 다음과 같은 섹션이 포함되어 있습니다.

if ($http_referer ~* spamdomain1\.com) {
    return 444;
}
if ($http_referer ~* spamdomain2\.com) {
    return 444;
}
if ($http_referer ~* spamdomain3\.com) {
    return 444;
}

이러한 규칙은 사용자가 이러한 리퍼러 중 하나를 설정한 경우 연결을 닫으라고 nginx에 지시합니다. 이를 수행하는 더 우아한 방법이 있습니까? 이러한 도메인 목록을 정의한 다음 "리퍼러가 이 목록에 있으면 444를 반환합니다"와 같이 말할 수 있나요?

답변1

나는 시도 할 것이다map:

map $http_referer $bad_referer {
    default                  0;
    "~spamdomain1.com"       1;
    "~spamdomain2.com"       1;
    "~spamdomain3.com"       1;
}

그런 다음 다음과 같이 사용하십시오.

if ($bad_referer) {
    return 444;
}

답변2

OR논리를 사용 하여 하나의 다중 일치 문을 만들 수 있습니다. 예:

if ($http_referer ~ "spamdomain1\.com|spamdomain2\.com|spamdomain3\.com")  { 
  return 444;
}

편집하다댓글당; break;블록에서 제거

답변3

ngx_http_referer_module또 다른 방법입니다. 예추천인 스팸 차단:

location / {
  valid_referers none blocked *.badreferer1.com badreferer2.com *.badreferer3.com badreferer4.net;

  if ($invalid_referer) {
    return   403;
  }
}

관련 정보