Nginx-특정 IP를 가진 사용자를 특수 페이지로 리디렉션하는 방법


26

나는 상당히 큰 이미지 갤러리를 운영하고 있으며 매일 웹 복사기를 사용하여 전체 사이트를 다운로드하여 엄청난 양의 트래픽을 발생시키는 5 명의 방문자가 있습니다. 해당 방문자는 고정 IP를 사용합니다. 내가 달성하고자하는 것은 5 명의 IP가 사이트를 방문하자마자 특정 페이지로 리디렉션되는 것입니다 (이것은 왜 문제가 있는지 설명합니다). 다른 모든 방문자는 사이트를 정상적으로 탐색 할 수 있어야합니다.

서버가 웹 서버로 CentOS (5.8) 및 nginx (1.0.15)를 실행 중입니다. 알고있는 nginx.conf 항목을 통해이를 달성 할 수있는 방법이 있습니까?

힌트와 지원에 대해 미리 감사드립니다!

종류는 알렉스

답변:


34

지오 모듈은 클라이언트의 주소와 일치하게된다. 이를 사용하여 테스트 할 변수를 정의 할 수 있습니다.

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
  if ($bad_user) {
    rewrite ^ http://www.example.com/noscrape.html;
  }
}

이것은 $ remote_addr에 대해 정규식을 실행하는 것보다 효율적이며 유지 관리가 더 쉽습니다.


대단히 감사합니다-geo를 사용하여 훌륭하게 작동합니다! 단 한 가지 : domain.com/file.ext 또는 domain.com/subdirectory/file.ext와 같은 직접 요청이 아닌 domain.com으로 요청을 리디렉션합니다. 어떻게하면 되나요? 불행히도, 나는 꽤 RegEx Noob입니다. :(
Alex

if를 어디에 두었습니까? 전체 서버 블록을 제공 할 수 있습니까? 좀 더 생각한 후에는 /noscrape.html
kolbyjack

20

HttpAccessModule 을 사용 하면이를 신속하게 수행 할 수 있습니다.

server {
    if ($remote_addr = 1.2.3.4) {
        rewrite ^ http://www.website.com/noscrape.htm;
    }
   ...
}

정말 감사합니다, 칼리드! 해당 지시문에 여러 개의 IP를 포함시키는 방법이 있습니까?
Alex

죄송합니다, 조금 혼란 스러웠습니다 (여기 새로 작성). Matt가 질문에 대답 했습니까 아니면 Khaled에 응답 했습니까? 그러나 둘 다 감사합니다! ;)
Alex

1
이것은 실제로 Rewrite 모듈을 사용합니다 . 다음과 같이 정규식 일치를 사용할 수 있습니다 if ($remote_addr ~ "^(1.2.3.4|4.3.2.1)$").
mgorven

나는 nginx -V그런 모듈이 없지만 작동한다고 말합니다. 어쩌면 그것은 지금 내장되어 있습니다.
user3132194

1

동일한 도메인의 다른 페이지로 리디렉션 한 경우 위의 예를 따르면 직접 루프가 발생합니다. 따라서 nginx 구성 파일에서 다음과 같이 사용하십시오 (일반적으로 워드 프레스를 사용한다고 가정합니다)

geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
}

server {
 location /
 {
  if ($bad_user) {
    rewrite ^ http://www.example.com/warning-page/ break;
  }

try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
 }

location /warning-page/
{
try_files $fullurl${request_uri}index.html $uri $uri/ /index.php$is_args$args;
}

}

차단 된 IP의 누군가가 사이트에 나열되지 않은 warning-page를 제외한 모든 페이지를 방문한 경우 경고 페이지로 리디렉션됩니다. 다시 쓰기가 위치 / 블록에 있기 때문에 리디렉션 루프가 발생하지 않습니다. 그러나 서버 블록 내부에 있으면 리디렉션 루프가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.