Nginx 지리 적 위치 제한 접근

10351 단어
Nginx 지리 적 위치 제한 접근
 
  • 소개
  • 선 결 조건
  • 데이터베이스 가 져 오기
  • 데이터베이스 구조 파악
  • NGINX Plus 에 GeoIP 2
  • 설정
  • 방안: 최근 서버 선택
  •  
    소개 하 다.
    NGINX Plus 는 사용자 의 지리 적 위치 에 따라 사용 자 를 구분 할 수 있다.예 를 들 어 귀 하 는 서로 다른 국가 / 지역 에 서로 다른 사이트 내용 을 제공 하거나 내용 의 배 포 를 특정한 국가 나 도시 로 제한 할 수 있 습 니 다.
    NGINX Plus 는 제3자 MaxMind 데이터 베 이 스 를 사용 하여 사용자 의 IP 주소 와 위 치 를 일치 시 킵 니 다.지리 적 위 치 를 알 면 map 또는 split_clients 모듈 에서 Geoip 기반 변 수 를 사용 할 수 있 습 니 다.
    주의: MaxMind GeoLite 전통 데이터 베 이 스 는 현재 생산 이 중단 되 었 으 므 로 MaxMind GeoIP 2 또는 GeoLite 2 데이터 베이스 와 NGINX Plus 로 바 꿔 야 합 니 다.  GeoIP 2 모듈.
    지리 적 위치 제한 은 HTTP 와 TCP / UDP 프로 토 콜 에 적 용 됩 니 다.
     
    선 결 조건
  • NGINX Plus GeoIP 2 동적 모듈
  • MaxMind 의 GeoIP 2 또는 GeoLite 2 데이터베이스
  • (선택 가능) mmdblookup 유 틸 리 티, MaxMind 데이터베이스 파일 에서 IP 주소 찾기
  •  
    데이터베이스 가 져 오기
    MaxMind 다운로드 페이지 에서 GeoIP 2 또는 GeoLite 2 데이터 베 이 스 를 얻 을 수 있 습 니 다.이 예제 에 서 는 무료 GeoLite 2 를 사용 하여 데이터 베 이 스 를 다운로드 할 수 있다.
    GeoLite 2 국가 데이터 베 이 스 를 가 져 오고 압축 을 풀 려 면:
    $ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
    $ gunzip GeoLite2-Country.mmdb.gz

    GeoLite 2 City 데이터 베 이 스 를 가 져 오고 압축 을 풀 려 면:
    $ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
    $ gunzip GeoLite2-City.mmdb.gz

     
    데이터베이스 구조 파악
    사용 가능 한 지리 데 이 터 를 보 려 면 mmdblookup 유 틸 리 티 프로그램 으로 GeoLite 2 - Country 와 GeoLite 2 - City 데이터 베 이 스 를 조회 할 수 있 습 니 다.지리 데 이 터 는 JSON 트 리 로 표 시 됩 니 다.
    설치 libmaxminddb 데이터베이스 유 틸 리 티:
  • Amazon Linux, CentOS, Oracle Linux 와 RHEL 에 대해:
    $ yum install libmaxminddb-devel

  • 데 비 안과 Ubuntu 에 대해:
    $ apt-get install libmaxminddb-dev

  • SLES 에 대해:
    $ zypper install libmaxminddb-devel


  • 데이터베이스 에 대한 조 회 는 다음 과 같은 형식 으로 보 낼 수 있 습 니 다.
    mmdblookup –file [FILE PATH] –ip [IP ADDRESS] [DATA PATH]

    예 를 들 어 8.8.8.8 IP 주소 의 모든 사용 가능 한 지리 데 이 터 를 가 져 오 려 면 다음 명령 을 보 내 십시오.
    $ mmdblookup --file /usr/local/etc/geoip2/GeoLite2-Country.mmdb --ip 8.8.8.8

    출력 은:
    {
        "continent":
          {
            "code":
              "NA" 
            "geoname_id":
              6255149 
            "names":
              {
                "de":
                  "Nordamerika" 
                "en":
                  "North America" 
                "es":
                  "Norteamérica" 
                "fr":
                  "Amérique du Nord" 
                "ja":
                  " アメリカ" 
                "pt-BR":
                  "América do Norte" 
                "ru":
                  "Северная Америка" 
                "zh-CN":
                  "   " 
              }
          }
        "country":
          {
            "geoname_id":
              6252001 
            "iso_code":
              "US" 
            "names":
              {
                "de":
                  "USA" 
                "en":
                  "United States" 
                "es":
                  "Estados Unidos" 
                "fr":
                  "États-Unis" 
                "ja":
                  "アメリカ   " 
                "pt-BR":
                  "Estados Unidos" 
                "ru":
                  "США" 
                "zh-CN":
                  "  " 
              }
          }
        "registered_country":
          {
            "geoname_id":
              6252001 
            "iso_code":
              "US" 
            "names":
              {
                "de":
                  "USA" 
                "en":
                  "United States" 
                "es":
                  "Estados Unidos" 
                "fr":
                  "États-Unis" 
                "ja":
                  "アメリカ   " 
                "pt-BR":
                  "Estados Unidos" 
                "ru":
                  "США" 
                "zh-CN":
                  "  " 
              }
          }
      }

    예 를 들 어 특정 국가 / 지역 의 ISO 코드 만 가 져 오 려 면 명령 말미 에 인 자 를 추가 하 십시오. country iso_code
    $ mmdblookup --file /usr/local/etc/geoip2/GeoLite2-Country.mmdb --ip 8.8.8.8 country iso_code

    NGINX 에 사용 되 는 GeoIP 2 모듈 에서 변 수 를 만 들 때 도 이 매개 변 수 를 사용 합 니 다.
     
    NGINX Plus 에 GeoIP 2 설정
  • NGINX Plus 에 GeoIP 2 동적 모듈 설치: Amazon Linux, CentOS, Oracle Linux 와 RHEL:
    $ yum install nginx-plus-module-geoip2

    데 비 안과 Ubuntu 에 대해:
    $ apt-get install nginx-plus-module-geoip2

    SLES 에 대해:
    $ zypper install nginx-plus-module-geoip2

  • load_module 설정 단계 에서 지정 한 명령 을 사용 하여 NGINX Plus 설정 파일 에서 GeoIP 2 동적 모듈 을 사용 합 니 다.
    load_module modules/ngx_http_geoip2_module.so;
    load_module modules/ngx_stream_geoip2_module.so;
    
    http {
        # ...
    }

  • 경로 의 국가 와 도시 데이터 베 이 스 를 NGINX 설정 과 블록 에 추가 하거나 둘: main geoip2 {} http {} stream {}
     
    http { #... geoip2 GeoIP2/GeoLite2-Country.mmdb { #... } geoip2 GeoIP2/GeoLite2-City.mmdb { #... } } stream { #... geoip2 GeoIP2/GeoLite2-Country.mmdb { #... } geoip2 GeoIP2/GeoLite2-City.mmdb { #... } } 

  • GeoIP 데이터베이스 구조 에 따라 사용자 정의 변 수 를 만 듭 니 다. 이 변 수 는 GeoIP 2 데이터베이스 에 있 는 데 이 터 를 보존 한 다음 에 데 이 터 를 map 또는 split_clients 명령 에 전달 합 니 다. http {} stream {}
  • geoip2 GeoIP2/GeoLite2-City.mmdb {
        $geoip2_data_city_name   city names en;
        $geoip2_data_postal_code postal code;
        $geoip2_data_latitude    location latitude;
        $geoip2_data_longitude   location longitude;
        $geoip2_data_state_name  subdivisions 0 names en;
        $geoip2_data_state_code  subdivisions 0 iso_code;
    }
    
    geoip2 GeoIP2/GeoLite2-Country.mmdb {
        $geoip2_data_continent_code   continent code;
        $geoip2_data_country_iso_code country iso_code;
    }
    
    #...

     
    프로젝트: 최근 서버 선택
    생 성 된 변수의 지리 적 위치 데 이 터 를 사용 하면 클 라 이언 트 연결 을 최근 서버 로 재 설정 하여 네트워크 지연 을 줄 이 고 연결 속 도 를 높 일 수 있 습 니 다.
    이 는 변수 에서 GeoIP 2 데이터베이스 에서 온 대륙 코드 와 map 를 사용 하여 다른 변 수 를 만 드 는 모듈 을 만 들 수 있 으 며, 이 변수의 값 은 대륙 위 치 를 기반 으로 하 는 가장 가 까 운 서버 가 될 것 입 니 다.이 값 을 기반 으로 NGINX 는 해당 상위 서버 그룹 에 요청 을 전달 합 니 다.
  • IP 주소 가 GeoIP 데이터베이스 와 일치 하지 않 는 경우 각 대륙 (예 를 들 어 유럽, 북 미) 에 서버 나 상류 서버 그룹 이 설정 되 어 있 는 지 확인 하 십시오. eu na all
    upstream all {
        server all1.example.com:12345;
        server all2.example.com:12345;
    }
    
    upstream eu {
        server eu1.example.com:12345;
        server eu2.example.com:12345;
    }
    
    upstream na {
        server na1.example.com:12345;
        server na2.example.com:12345;
    }

  • GeoIP 2 데이터 베 이 스 를 가 져 오 는 주 코드 를 추가 합 니 다. geoip2 {} $geoip2_data_continent_code
      
    geoip2 GeoIP2/GeoLite2-Country.mmdb { $geoip2_data_continent_code continent code; } #... 

  • 생 성 map 변 수 를 만 드 는 블록:
    #...
    map $geoip2_data_continent_code $nearest_server {
        default all;
        EU      eu;
        NA      na;
        AS      as;
        AF      af;
    }
    #...

  • 블록 을 만 듭 니 다. 이 블록 은 변수 에서 전달 하 는 값 에 따라 상류 서버 그룹 중 하나 에 요청 합 니 다. $nearest_server server {}
    server {
        listen 12346;
        proxy_pass http://$nearest_server;
    }


  • 대륙 이 유럽 이 라면 $nearest_server will 의 값 은 $nearest_server 이 고 연결 은 eu 의사 명령 을 통 해 상류 에 전 달 됩 니 다.
    #...
    server {
        listen 12346;
        proxy_pass http://$nearest_server;
    }
    
    upstream all {
        server all1.example.com:12345;
        server all2.example.com:12345;
    
    upstream eu {
        server eu1.example.com:12345;
        server eu2.example.com:12345;
    }
    upstream na {
        server na1.example.com:12345;
        server na2.example.com:12345;
    }
    #...

     
    예.
    이 예 는 euproxy_pass 상하 문 에서 응용 할 수 있다.
    # can be either "http {}" or "stream {}"
    #...
    geoip2 GeoIP2/GeoLite2-Country.mmdb {
        $geoip2_data_continent_code continent code;
    }
    
    map $geoip2_data_continent_code $nearest_server {
        default all;
        EU      eu;
        NA      na;
        AS      as;
        AF      af;
    }
    
    server {
        listen 12346;
        proxy_pass http://$nearest_server;
        }
    
    upstream all {
        server all1.example.com:12345;
        server all2.example.com:12345;
    }
    
    upstream eu {
        server eu1.example.com:12345;
        server eu2.example.com:12345;
    }
    
    upstream na {
        server na1.example.com:12345;
        server na2.example.com:12345;
    }

    이 예제 에 서 는 http 데이터베이스 에서 IP 주 소 를 검사 하고 결 과 는 stream 변수 에 기 록 됩 니 다.GeoLite2-Country.mmdb 우리 의 예제 에서 NGINX Plus 는 변수의 값 을 명령 의 값 과 일치 시 키 고 결 과 를 사용자 정의 변수 에 기록 합 니 다 $geoip2_data_continent_code.값 map 에 따라 $nearest_server 의사 명령 은 해당 하 는 상류 서버 를 선택 합 니 다.
     
    더 많은 정보
  • GeoIP 2 동적 모듈 설치 설명
  • MaxMind GeoIP 2 데이터베이스
  • MaxMind Geolite 2 무료 데이터베이스 다운로드
  • 좋은 웹페이지 즐겨찾기