Nginx 지리 적 위치 제한 접근
소개 하 다.
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 프로 토 콜 에 적 용 됩 니 다.
선 결 조건
데이터베이스 가 져 오기
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
데이터베이스 유 틸 리 티:$ yum install libmaxminddb-devel
$ apt-get install libmaxminddb-dev
$ 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 설정
$ 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 {
# ...
}
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 { #... } }
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 는 해당 상위 서버 그룹 에 요청 을 전달 합 니 다.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;
}
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;
}
#...
예.
이 예 는
eu
과 proxy_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
의사 명령 은 해당 하 는 상류 서버 를 선택 합 니 다.더 많은 정보
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.