728x90
배포되어있는 사이트에서 서버가 자꾸 꺼지는 이슈가 있어서 백그라운드로 실행 하지않고
콘솔을 지속적으로 확인했더니 무지성으로 계속 리퀘스트 요청이 들어오는걸 확인했다.
때문에 nginx에서 geoip를 이용해 해외 아이피를 처리하고싶었지만 유료인 nginx plus만 geoip 설정이 가능했다.
따라서 express 서버단에서 처리하기로 했다.
KRNIC 한국 인터넷 정보센터에서 국가별 ip에 대한 csv파일을 얻을수 있다.
DB에 넣어서 아이피 대역대를 조회해서 처리할 수 있지만 외부 api를 발견했다.
문서를 보면 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
'Node.js' 카테고리의 다른 글
Node.js Express 서버 express-device 디바이스 확인 (0) | 2021.09.04 |
---|---|
Node.js helmet 적용하기 (0) | 2021.09.02 |
Node.js 클라이언트 IP 가져오기 request-ip (0) | 2021.09.01 |
Node.js Mysql2로 async/await 사용하기 (0) | 2021.08.26 |
Express multipart/form-data 파일 받기 (0) | 2021.08.13 |