본문 바로가기

Node.js

Node.js Express 서버에서 해외 ip 처리하기

728x90

배포되어있는 사이트에서 서버가 자꾸 꺼지는 이슈가 있어서 백그라운드로 실행 하지않고

콘솔을 지속적으로 확인했더니 무지성으로 계속 리퀘스트 요청이 들어오는걸 확인했다.

때문에 nginx에서 geoip를 이용해 해외 아이피를 처리하고싶었지만 유료인 nginx plus만 geoip 설정이 가능했다.

따라서 express 서버단에서 처리하기로 했다.

 

https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp

KRNIC 한국 인터넷 정보센터에서 국가별 ip에 대한 csv파일을 얻을수 있다.

DB에 넣어서 아이피 대역대를 조회해서 처리할 수 있지만 외부 api를 발견했다.

 

https://ip.pe.kr/api/

 

API Document - 내 아이피 확인 (My ip address) - ip.pe.kr

API Document ip.pe.kr 에서는 다양한 상황에서 사용할 수 있는 API를 제공하고 있습니다. How to start 기본적으로 API는 아래 주소에서 동작합니다. 이는 Ajax를 위한 "Access-Control-Allow-Origin"을 포함하고 있

ip.pe.kr

문서를 보면 https://ip.pe.kr/json/ 으로 본인의 아이피와 국가정보를 json형태로 리턴 받을 수 있다.

 

서버단에서 api 호출을 위해 request 패키지 설치

npm install request --save

 

api 호출

var request = require('request');

request('https://api.ip.pe.kr/json/', function(error, response, body){
		if(error){
			console.log(error);
			return;
		}
		if(!error && response.statusCode==200){
			//let ip = JSON.parse(body).ip;
			let country_code = JSON.parse(body).country_code;
			if(country_code != 'KR'){
				res.send("Access Denied");
				return;
			}
		}
	})

request를 이용해 api를 호출하는 코드다.

하지만 https api를 호출했기 때문에 실행해보면

unable to verify the first certificate 에러가 난다.

 

그래서 검색해보던중 한가지 방법을 찾앗다.정확한 원리는 좀 더 알아봐야하는데 ssl 인증에 대한 설정을 하는것 같다.

 

npm install ssl-root-cas --save

ssl-root-cas 설치

 

 

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
request('https://api.ip.pe.kr/json/', function(error, response, body){
	if(error){
		console.log(error);
		return;
	}
	if(!error && response.statusCode==200){
		//let ip = JSON.parse(body).ip;
		let country_code = JSON.parse(body).country_code;
		if(country_code != 'KR'){
			res.send("Access Denied");
			return;
		}
	}
})

호출전 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"을 추가해준다

 

728x90