현재 일하고 있는 곳에서 아마존과 협업하여 시스템을 개발중에 있다.
최근 개발중인 앱을 아마존 서버에 올렸는데, http로 접근했을때 https로 변환해주는 기능을 구현해야했다.
아마존 관계자분께서 node.js 내의 코드를 수정하면 쉽게 해결된다고 하여 보내주신 링크 문서를 보았다.
결론적으로 해결했는데 코드는 아래와 같다.
app.get('*', function(req, res, next) {
//http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#x-forwarded-proto
if (req.get('x-forwarded-proto') != "https") {
res.set('x-forwarded-proto', 'https');
res.redirect('https://' + req.get('host') + req.url);
} else {
next();
}
});
이게 뭐냐면 req.get('x-forwarded-proto') 함수를 통해서 프로토콜을 확인해주고 그것이 https가 아닐때 https 주소로 리다이렉트 하라는 함수이다.
처음에 이것말고 아래의 함수를 이용했지만, 아마존 ELB 기반에서는 위의 함수만 동작한다고 한다..
(왜 그런지 모르겠는데, 아래 함수가 안되서 물어보니까 그렇다고 하신다..ㅅ.. 사실 더 자세히 들어가기는 싫어서 그 선에서 마무리했다.)
// 위의 함수와 같은 동작을 하지만 아마존 ELB 환경에서는 동작하지 않는 함수
function ensureSecure(req, res, next){
if(req.secure){
// OK, continue
return next();
};
res.redirect('https://'+req.host+req.url); // handle port numbers if non 443
};
app.all('*', ensureSecure);
위 두 함수와 관련된 정보는 아래의 링크를 참고 바란다.
여튼 누군가 아마존 서버를 이용하여 자신의 앱을 서비스하고자 한다면 위의 사항을 알아두는 것이 도움될 것이다.
(물론 나는 여기를 퇴사한다고 했을때 혼자서 아마존 서버를 운영할 일을 없겠지만요. 개인 서비스는 heroku 추천 ~.~)
'Javascript > Node.js' 카테고리의 다른 글
이미지를 포함한 form 데이터를 s3에 저장하는 방법 (0) | 2019.02.27 |
---|---|
node.js의 res.locals 함수 (0) | 2018.07.23 |
node.js 이미지버퍼 작업후 저장시 주의할 점 (0) | 2017.12.04 |
node.js에서 promise 함수를 동기화로 만들기 (0) | 2017.11.21 |
node.js 에서 주의해야 할점 (0) | 2017.05.20 |
댓글