클 라 이언 트 그 레이스 케 일 발표, NGINX + GeoIP2 + GeoIP 데이터베이스
우리 회 사 는 전자상거래 플랫폼 을 만 드 는 것 입 니 다. 주요 상품 에는 스마트 정수기 제품 이 있 고 모든 스마트 정수기 제품 은 전국 고객 의 집에 설치 되 어 있 습 니 다.애프터서비스 유 지 를 위해 서 는 서버 에서 데 이 터 를 어떻게 저장 하고 이 를 전송 하 는 지 비교적 간단 하 다. 원 격 으로 정수기 의 잔액, 귀속 지, 출 수의 질 등 기능 을 보 여 주 는 것 은 정수기 자체 에 장 착 된 스마트 PAD 스크린 에 의 해 이 루어 진 것 이 고 PAD 내부 에 설 치 된 것 은 안 드 로 이 드 시스템 이다.새로운 기능 을 개발 하고 개발 한 후에 스마트 PAD 스크린 내부 안 드 로 이 드 시스템 APK 버 전 을 교체 해 야 할 때 버 전 을 업데이트 하 는 방법 은 모든 업 데 이 트 를 업데이트 하 는 데 어떠한 업데이트 상의 제한 도 하지 않 는 것 이다.그러나 업 무량 이 증가 함 에 따라 전국 에서 약 30 만 대의 수기 버 전이 갱신 되 어야 하기 때문에 이전의 갱신 방식 은 기 존의 이런 높 은 업 무량 의 수요 에 더 이상 적합 하지 않다.그래서 우 리 는 새로운 업데이트 방안 인 '지역 별로 업데이트' 를 고려 했다.
참고 안
1. 가장 직접적인 방안 은 아 리 클 라 우 드 의 CDN 을 구 매 하고 CDN 의 캐 시 를 이용 하여 실현 하 는 것 입 니 다.캐 시 원 리 는 다음 과 같다.
2. 그 레이스 케 일 로 발표
Nginx+GeoIP Modules+GeoIP Datebase
yum install -y geoip-devel
;[root@node1-master nginx-1.14.2]# cd /usr/share/GeoIP
[root@node1-master GeoIP]# gzip -d GeoLiteCity.dat.gz
[root@node1-master GeoIP]# ln -sv GeoLiteCity.dat GeoCity.dat
[root@node1-master ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[root@node1-master ~]# tar xf nginx-1.14.2.tar.gz && cd nginx-1.14.2
[root@node1-master nginx-1.14.2]# nginx -V
[root@node1-master nginx-1.14.2]# ./configure \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--with-threads \
--with-http_ssl_module \
--with-pcre --with-pcre=/usr/local/nginx/modules/pcre-8.30 \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-stream --with-http_slice_module \
--with-cc-opt=-DTCP_FASTOPEN=23 \
--add-module=/usr/local/nginx/modules/ngx_cache_purge-2.3 \
--add-module=/usr/local/nginx/modules/nginx_upstream_check_module \
--add-module=/usr/local/nginx/modules/file-md5-master \
--add-module=/usr/local/nginx/modyles/nginx-sticky
--with-http_geoip_module // geoip
[root@node1-master nginx-1.14.2]# make
[root@node1-master nginx-1.14.2]# cp ./objs/nginx /usr/local/nginx/sbin/nginx
[root@node1-master nginx-1.14.2]# nginx -V
--with-http_geoip_module
Nginx 프로필 참조
user root root;
worker_processes auto;
worker_cpu_affinity auto;
error_log /usr/local/nginx/logs/error.log crit;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
access_log logs/access.log main;
## GeoIP ##
geoip_city /usr/share/GeoIP/GeoCity.dat;
geoip_proxy 192.168.0.0/24;
geoip_proxy 192.168.1.0/24;
geoip_proxy_recursive on;
## GeoIP map , ##
map $geoip_city $no_allowed_region {
default 1;
Shanghai yes;
Beijing yes;
Tianjin yes;
}
server {
listen 80;
listen 443 default_server;
server_name you.domain.com;
ssl on;
ssl_certificate /usr/local/nginx/ssl/you.domain.com.crt;
ssl_certificate_key /usr/local/nginx/ssl/you.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
root /html;
index index.html index.htm;
try_files /index_$geoip_city.html ./index.html;
location /static {
root /data;
}
location ~ ^/api/pad/available {
default_type application/json;
return 200 '{"success":true}';
}
# #
location /files/pad/yim-1.2.9.apk {
imit_conn addr 10;
limit_rate 100k;
if ($no_allowed_region = 1) {
return 550;
}
}
# #
location /files/pad/yimpad-version.json {
limit_conn addr 10;
limit_rate 100k;
if ($no_allowed_region = 1) {
return 550;
}
}
location ~ ^/static/water/material {
root /data/files;
limit_conn addr 10;
limit_rate 100k;
}
}
}
location /files/pad/yimi-1.2.9.apk {
root /data;
limit_conn addr 10;
limit_rate 100k;
if ($no_allowed_region = 1) {
return 550;
}
}
location /files/pad/yimipad-version.json {
root /data;
limit_conn addr 10;
limit_rate 100k;
if ($no_allowed_region = 1) {
return 550;
}
}
기본 블랙리스트 메커니즘 default 1, 즉 모든 요청 을 거부 합 니 다.map 설정 세그먼트 에 CITY = YES 를 추가 할 때 만 규칙 이 유효 합 니 다.GeoIP 에서 GeoIP 2 로 업그레이드
[root@node1-master ~]# yum groupinstall -y Development Tools
[root@node1-master ~]# yum install -y pcre-devel openssl openssl-devel zlib-devel
official help site https://github.com/maxmind/libmaxminddb
[root@node1-master ~]# cd /usr/local/src && git clone --recursive https://github.com/maxmind/libmaxminddb
[root@node1-master ~]# cd libmaxminddb
[root@node1-master ~]# ./bootstrap
[root@node1-master ~]# ./configure
[root@node1-master ~]# make
[root@node1-master ~]# make install
[root@node1-master ~]# sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf"
[root@node1-master ~]# ldconfig
"Nginx+GeoIP Modules+GeoIP Datebase" nginx ,
[root@node1-master ~]# nginx -V
[root@node1-master ~]# cd /usr/local/nginx/modules
[root@node1-master ~]# git clone --recursive https://github.com/leev/ngx_http_geoip2_module
[root@node1-master ~]# cd /root/nginx-1.14.2
[root@node1-master nginx-1.14.2]# ./configure -- --add-module=/usr/local/nginx/modules/ngx_http_geoip2_module
[root@node1-master nginx-1.14.2]# make
[root@node1-master nginx-1.14.2]# mv /usr/local/nginx/sbin/nginx{,.baks}
[root@node1-master nginx-1.14.2]# cp objs/nginx /usr/local/nginx/sbin
[root@node1-master nginx-1.14.2]# make upgrade
make upgrade "make: *** [upgrade] error 1" kill nginx , -c nginx, make upgrade
[root@node1-master ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ngx_http_geoip2_module , Nginx 1.9.11+
official help site https://dev.maxmind.com/geoip/geoip2/geolite2
[root@node1-master ~]# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
[root@node1-master ~]# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
[root@node1-master ~]# tar xf GeoLite2-City.tar.gz -C /usr/share/GeoIP2
[root@node1-master ~]# tar xf GeoLite2-Country.tar.gz -C /usr/share/GeoIP2
##geoip2 with##
geoip2 /usr/share/GeoIP2/GeoLite2-City.mmdb {
auto_reload 60m;
$geoip2_metadata_city_build metadata build_epoch;
$geoip2_data_city_name city names en;
$geoip2_data_city_name default=Shanghai city names en;
}
##map geoip##
map $geoip2_data_city_name $default_city_list {
default 1;
Shanghai yes;
}
##server or location##
if ($default_city_list = 1) {
return 770;
}
nginx -s reload
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.