Nginx를 사용하여 IP 주소 / 서브넷에 따라 다른 페이지를 서버로


8

Nginx를 웹 서버로 사용하고 있으며 내부 사용자 (예 : 10.0.0.0/16)와 다른 IP 주소의 외부 사용자에게 한 페이지를 제공하고 싶습니다.

예를 들면 다음과 같습니다.

  • IP가 10.0.0.34 인 "내부"PC는 company.com/page.html로 이동하여 internal.html 페이지를 가져옵니다.

  • IP가 8.8.8.8 인 "외부"PC는 company.com/page.html로 이동하여 external.html 페이지를 얻습니다.


2
명확히하기 위해; Nginx를 사용하는 것은 끔찍하지 않습니다. 필요한 것은! Nginx는 훌륭합니다!
Jon Rhoades

답변:


13

Nginx geo 모듈을 사용하십시오 . 클라이언트 IP 주소를 기반으로 변수 값을 설정할 수 있습니다. geo지시문은 http섹션에 있어야합니다 .

http {
  geo $client {
    default extra;
    10.0.0.0/8 intra;
  }

나중에 파일을 찾기 위해 위치에서 사용할 수 있습니다

location / {
  try_files $uri.$client $uri = 404;
}

어떤 수단, Nginx에 설정됩니다 $client에 하나 extra또는 intra클라이언트의 IP를 기반으로. 인트라넷 클라이언트라고 가정 해 봅시다. 클라이언트가 요청 page.html하면 Nginx가 파일을 검색합니다 /your/root/page.html.intra. 그러한 파일이 없으면를 검색합니다 /your/root/page.html. 둘 중 어느 것도 찾지 못하면 Nginx는 404 "Not Found"응답을 반환합니다. 문서의 "try_files"에 대한 추가 정보

그런데 index지시어도 변수를 지원합니다. 예 :

index index.$client.html index.html;

2
잘 작동했습니다-나는 location = / filename & rewrite ^ /filename.$client last;
Jon Rhoades
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.