Nginx + GeoIP 사용자 IP 귀속 국 구분

3253 단어 기술.
사건 의 배경 은 그동안 공용 컴퓨터 에서 읽 기 편 하도록 프 라이 빗 네트워크 에 O 'Reilly 동물 서 PDF 파일 을 몇 권 저 장 했 지만 검색엔진 에 수 록 될 줄 은 몰 랐 다. 그래서 최근 O' Reilly 의 DMCA 메 일 (메 일 은 도 메 인 네 임 등록 업 체 로부터 받 은 것 으로 추정) 을 받 았 기 때문에 자신의 자원 사용 을 방해 하지 않 는 선 에서 문 제 를 회피 하기 위해 서 였 다.중국 이외 의 IP 가 이 디 렉 터 리 에 접근 하 는 것 을 막 는 자원 을 선택 하 십시오.
여 기 는 Nginx 의 GeoIP 확장 (ngx http geoip module) 을 사 용 했 습 니 다. 표준 판 Nginx 에서 확장 을 다시 컴 파일 해 야 하지만 제 가 사용 하 는 Tengine 은 동적 모듈 을 직접 불 러 올 수 있 습 니 다.
먼저 nginx - module - geoip 설치:
sudo apt-get install nginx-module-geoip

그리고 IP 데이터 베 이 스 를 다운로드 하고 압축 을 풀 면 압축 을 풀 수 있 는 GeoIPv 6. dat 파일 을 원 하 는 곳 에 놓 을 수 있 습 니 다.
DAT 판 데이터베이스 공식 은 더 이상 다운 로드 를 제공 하지 않 습 니 다. 아래 링크 는 조상 백업 입 니 다.
자세 한 내용 은:https://dev.maxmind.com/geoip/legacy/downloadable/
wget https://cloud.moezx.cc/mirrors/geoip/database/GeoIPv6.dat.gz
gzip -d -k GeoIPv6.dat.gz

GeoIPv 6. dat 는 IPv 4 와 IPv 6 의 데 이 터 를 덮어 씁 니 다. IPv 4 만 필요 하 다 면 아래 파일 을 사용 하 십시오.
wget https://cloud.moezx.cc/mirrors/geoip/database/GeoIP.dat.gz

그리고 ngx 를 다운로드 하고 컴 파일 해 야 합 니 다.http_geoip_module 모듈, 컴 파일 완료 후 ngix. conf 에 다음 부분 을 추가 합 니 다:
바 이 너 리 라 이브 러 리 도입 (Tengine 2.3.0 이전 버 전에 만 적용 되 며, 이후 버 전 은 dso 명령 을 제거 하 였 습 니 다)
dso {
    load ngx_http_geoip_module.so;
}

바 이 너 리 라 이브 러 리 도입 (원본 Nginx 및 Tengine 2.3.0 이후 버 전에 적용)
load_module ngx_http_geoip_module.so;

http 블록 에 다음 초기 화 코드 추가
http {
    ···
    geoip_country /path/to/GeoIPv6.dat;
    #     CDN          (     Cloudflare      IP)
    geoip_proxy    103.21.244.0/22;
    geoip_proxy    103.22.200.0/22;
    geoip_proxy    103.31.4.0/22;
    geoip_proxy    104.16.0.0/12;
    geoip_proxy    108.162.192.0/18;
    geoip_proxy    131.0.72.0/22;
    geoip_proxy    141.101.64.0/18;
    geoip_proxy    162.158.0.0/15;
    geoip_proxy    172.64.0.0/13;
    geoip_proxy    173.245.48.0/20;
    geoip_proxy    188.114.96.0/20;
    geoip_proxy    190.93.240.0/20;
    geoip_proxy    197.234.240.0/22;
    geoip_proxy    198.41.128.0/17;  
    geoip_proxy    2400:cb00::/32;
    geoip_proxy    2405:8100::/32;
    geoip_proxy    2405:b500::/32;
    geoip_proxy    2606:4700::/32;
    geoip_proxy    2803:f800::/32;
    geoip_proxy    2c0f:f248::/32;
    geoip_proxy    2a06:98c0::/29;
    geoip_proxy_recursive on;
    ···
}
       Server          :

쓰기 1: 일부 지역 접근 허용
server {
    ···
    set $where_are_you_from 0;
    if ($geoip_country_code = CN) {
        set $where_are_you_from 1;
    }
    location /Document/ {
        default_type text/html;
        charset utf-8;
        if ($where_are_you_from = 0) {
            return 200 'This resource is not available in your country!';
        }
    }
    ···
}

쓰기 2: 일부 지역 방문 금지
변수 $disallowed 설정country
map $geoip_country_code $disallowed_country {
    default no;
    US yes;
    CN no;
} 
server {
    ···
    location /Document/ {
        default_type text/html;
        charset utf-8;
        if ($disallowed_country) {
            return 200 'This resource is not available in your country!';
        }
    }
    ···
}

배 웠 어 요?

좋은 웹페이지 즐겨찾기