
리퍼러 스팸을 방지하기 위해 내 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;
}
}