nodejs iis 연동 Reverse Proxy Server 설정 (리버스 프록시)
nodejs 의 자체 웹서버 기능을 사용하지 않고 와 iis 와의 연동을 고민한 첫번째 이유는 클라이언트에서
xxx.xx.kr:3000 이런식의 포트 번호를 url 뒤에 작성하여 접근하는 것은 개발 단계에서나 가능하지 실무에는 맞지
않기 때문이었다. http 기본 포트인 80포트는 포트번호를 작성하지 않아도 접근가능하다.
nodejs 와 iis 연동에 대해 인터넷에서 검색해 보면 iisnode 모듈을 설치하여 web.config 파일을 수정하여 연동
하는 자료는 있지만 이 방법은 내가 찾던 방식이 아니었다. (부족한 느낌이랄까?, 실무에는 무리가 있어 보였다)
몇일 고생하다가 유튜브 동영상 https://www.youtube.com/watch?v=pqDNWTlUoWU&t=305s
을 통해(정말 운이 좋았다) 내가 원하는 것은 iis 의 Reverse Proxy 서버를 통한 nodejs 연동이었다는 것을
깨달았다.
이후 잘 정리된 자료와 https://tecadmin.net/set-up-reverse-proxy-using-iis/#
프록시 서버에 대한 지식 습득을 통해 만족감을 얻었고 기쁜 마음으로 공유하고자 블로그를 작성한다.
일단 리버스 프록시 서버 (Reverse Proxy Server) 에 대한 기초는 다음을 참고한다.
http://brownbears.tistory.com/191
nodejs 를 iis로 연동하는 개념은 다음과 같다. 정확히는 iis의 Reverse Proxy Server 설정 이라고 할 수 있다.
결국 iis에서 Reverse Proxy Server를 설치하는 것이 전부이고 여기에 nodejs의 실행 모듈을 연결 하는 것 뿐이다.
1. 먼저 리버스 프록시 서버 설치전 상황이다.
순서대로
1) 서버 iis 관리자에서 웹사이트 abc123.co.kr 추가된 모습
2) 클라이언트에서 웹사이트 abc123.co.kr 접근 모습 (80번포트)
3) 서버에서 nodejs hello.js 3000번 포트사용 실행 화면
4) 클라이언트에서 hello.js 접근 모습 (3000번 포트)
2. 이제 Reverse Proxy Server 를 설치해 보자
방법은 웹 플랫폼 설치 관리자 를 통해 다음 2가지 프로그램을 설치하면 된다.
1) URL Rewrite : -> URL 재작성
2) ARR -> Application Request Routing 3.0 -> 응용프로그램 요청 라우팅 3.0베타(Korea)
웹 플랫폼 설치 관리자 는 iis에서 관련 프로그램을 쉽게 설치할 수 있도록 도와주는 도구이다.
해당 설치 파일을 ms의 다운로드 사이트 등에서 직접 찾아서 설치파일을 통해 설치해도 되지만 iis에 탑재된
웹 플랫폼 설치 관리자를 통하면 관련 프로그램을 찾아서 설치하는 것이 매우 쉽다.
npm 이나 vscode의 extension 과 비슷하다고 할까...
abc123.co.kr 사이트 홈에서 관리 영역의 웹 플랫폼 설치 관리자 를 실행한다.
웹 플랫폼 설치 관리자 에서 URL 로 검색하고 URL 재작성 2.0 을 추가한다.
추가 의 의미는 설치가 바로 진행되는 것이 아니라 설치할 항목 에 추가했다는 뜻으로 설치할 항목에 원하는 프로그램을 검색해서 계속 추가한 후 한번에 설치 를 하면 된다. 만약 잘못 추가했다면 제거 버튼을 클릭하면 설치할 항목에서 제거된다. 하단 설치할 항목 앞에 갯수가 표시된다.
이어서 ARR 로 검색한다. ARR 은 영문 Application Request Routing 의 이니셜이고
한글로 응용프로그램 요청 라우팅 이다.
검색된 프로그램중 응용프로그램 요청 라우팅 3.0베타(Korea) 를 추가한다.
URL 재작성, 응용프로그램 요청 라우팅 3.0베타(Korea) 2가지 프로그램을 설치할 항목에 추가한 모습이다.
설치할 항목 을 클릭했을 때 항목을 확인해 볼수 있다. 확인후 설치 버튼을 클릭하여 설치한다.
동의함 을 클릭하고 설치를 진행한다.
설치가 끝나면 다시 웹 플랫폼 설치 관리자 초기 화면이 나타난다.
끝내기를 클리하여 웹 플랫폼 설치 관리자를 종료한다.
이때 주의할 것은 iis 를 꼭 종료후 다시 실행하여 설치된 프로그램이 화면에 반영된다.
또한 설치된 프로그램은 제어판>프로그램 및 기능 에 설치된 모습이 확인된다.
만약 제거(삭제)를 원할 경우 프로그램 및 기능 에서 일반적으로 프로그램 제거하듯이 제거(삭제)하면 된다.
(주의) 웹 플랫폼 설치 관리자 에서는 설치된 프로그램을 제거(삭제)할 수 없다.
프로그램은 2가지 설치했지만 Microsoft External Cache 도 같이 설치된다.
3. 리버스 프록시 서버 설정 및 nodejs 연동
iis 재실행후 모습 URL 재작성 프로그램만 보인다 . ARR 은 백그라운드에서 작동되므로 직접 화면에서 제아할 것은 없는 것 같다.
URL 재작성 프로그램을 실행하고 규칙 추가 를 클릭한다.
역방향 프록시 를 선택한고 프록시 기능 활성화 를 확인한다.
인바운드 규칙에 nodejs 프로그램 경로를 연결한다.
iis 웹서버와 nodejs 가 같은 서버 에 위치하고 있으므로 로컬호스트 3000 번 포트로 설정한다. (127.0.0.1:3000)
이것의 의미는 http://abc123.co.kr 로 클라이언트에서 접근하면 127.0.0.1:3000 으로 접근한다는 의미이다.
바로 Reverse Proxy 역방향 프록시 이다.
http 는 기본으로 80번 포트이다. 뒤에 :80 을 작성하지 않아도 된다. 참고로 https 는 443포트이다.
이상으로 모든 연동은 끝났다.
4. 테스트
이제 기본 http 서버(80번) 로 접근해보자 (iis 접근)
nodejs 모듈이 호출되는 것이 확인된다. 이것이 바로 iis 리버스 프록시 서버를 통한 연결이다. (와우~)
hello.js 소스를 전혀 수정하지 않고 연결한 것이다. 생산성 관점에서 굿이다.
여전히 nodejs 웹서버(3000번)를 통한 직접 연결도 아직 가능하다. 하지만 실무에서는 이 연동은 포트를 차단하여
막을 것이다. iis 통해 연동하여 보안을 강화하려고 할 것이기 때문이다.
5. 후기
생각보다 iis에서 Reverse Proxy 서버를 통해 nodejs 를 연결하는 것이 쉽다.
인터넷의 많은 자료들이 아파치나 nginx 와의 연동을 다루고 있다. (아마도 무료인 관계로)
iis 는 아파치나 nginx 와 비교하여 성능이 뒤지지 않는다는 웹 자료를 많이 보았다.
데이터베이스를 SQL Server 를 사용하는 경우 iis를 쓰는 것이 편리한다. (비록 비싸다는 단점은 있지만)
참고로 nodejs의 자체 웹서버 기능은 소규모나 개발 단계에서 사용하고 실무에서는 전용 웹서버를 통한
연동을 권고한다고 한다.
또한 아주 중요한 부분인데 https 를 통한 보안 연결이 편리할 것같다.
ssl 보안 인증서(도메인보안인증서)를 iis에 설치하면 될 것 같다.
nodejs 에는 별도로 해야할 것이 많지 않을 것같다. 이 부분은 앞으로 테스트해 볼 예정이다.
comodo 사의 보안인증서를 신청해 놓은 상태이다.
리버스 프록시 서버(Reverse Proxy Server) 를 통한 연동은 보안적으로도 nodejs 개발 생산성 관점에서도
탁월한 선택인 것 같다.