Windows 10에서 Tomcat과 IIS 연동하기

프로그래밍/운영체제, 서버 2018. 7. 26. 23:18

개발 및 테스트용으로 Windows 10 64bit에 IIS와 Tomcat을 설치하고 연동을 해보겠습니다. IIS와 Tomcat을 연동한다는 말은 웹서버로 IIS를 사용하고, Servlet/Jsp 에 대한 요청은 Tomcat이 처리하도록 한다는 뜻입니다.


Tomcat도 내부에 HTTP 서버 기능이 있지만 보통 운영시에는 IIS나 Apache 같은 웹서버를 앞단에 두어 정적 데이터는 웹서버가 처리하고 동적 데이터의 처리는 Tomcat이 담당하도록 많이 구성합니다.


이때 IIS에 ISAPI(Internet Server Application Programming Interface) 확장 모듈을 사용해서 특정 URL 또는 특정 확장자(*.jsp, *.do)에 대한 요청이 오면 Tomcat으로 요청을 돌리도록 설정하게 됩니다.



1. 연동 설정에 사용된 소프트웨어는 다음과 같습니다.


모두 64bit 또는 32bit에 맞춰야 합니다.


- Windows 10 64bit

- IIS(Internet Information System)

- JDK 10(7 이상이면 가능)

- Tomcat 8.5.32

- Tomcat Connector 1.2.43(ISAPI 모듈)



2. 기본 소프트웨어 설치하기


- IIS 의 설치는 "Windows 10에 IIS 설치하기" 를 참조하세요.

- JDK의 설치는 "윈도우에 JDK 8 설치하기"를 참조하세요.

- Tomcat의 설치는 "Windows 10에 Tomcat 설치하기"를 참조하세요.



3. IIS에 ISAPI 설치하기


Windows 기능 켜기/끄기 에서 "ISAPI 필터""ISAPI 확장"을 체크하고 "확인" 버튼을 눌러 설치합니다. (Windows 기능 켜기/끄기의 실행은 IIS 설치 글에서 확인하세요.)




4. Tomcat Connector 설치하기


4.1. http://tomcat.apache.org 사이트 왼쪽의 Download에서 Tomcat Connectors 를 클릭해서 들어갑니다.




4.2. Tomcat Connectors JK 1.2 항목에서 "Binary Releases for selected versions" 를 클릭해서 들어갑니다.




4.3. 바이너리 인덱스 페이지에서 "windows" 를 클릭해서 들어갑니다.




4.4. 윈도우즈 바이너리 페이지에서 "tomcat-connectors-1.2.43-windows-x86_64-iis.zip" 파일을 다운로드 받습니다.




4.5. 다운받은 압축파일의 압축을 풀면 나오는 "isapi_redirect.dll" 파일이 필요한 파일 입니다.


설치는 임의의 위치를 정해서 파일을 복사해 두면 됩니다. 폴더 위치른 다음과 같이 정했습니다.(자신이 원하는 위치에 두면 됩니다.) 여기서는 D:\util 폴더 아래에 Tomcat Connector 폴더, 그 아래 bin 폴더를 만들고 dll 파일을 두었습니다.


D:\util\Tomcat Connector\bin\isapi_redirect.dll 


Tomcat Connector 폴더 아래에 그외에 설정파일을 둘 conf 폴더와 로그 파일을 둘 log 폴더를 만들었습니다.





5. Tomcat Connector 설정파일 만들기


바이너리 배포파일내에 설정 파일은 포함되어 있지 않습니다. 커넥터가 어떻게 동작할지 지정하는 설정파일을 만들어야 합니다.


5.1. isapi_redirect.properties 파일을 작성합니다.


D:\util\Tomcat Connector\bin 폴더 아래 생성합니다. 이 파일은 isapi_redirect.dll 파일과 같은 곳에 있어야 합니다. 만약 Tomcat Connector의 설치 위치를 이 글에서와 다르게 했다면 이파일의 위치는 dll 파일과 같은 폴더에 있으면 됩니다. 파일 내용중 #으로 시작하는 라인은 주석(Comment) 입니다.



# IIS가 필터를 찾는 위치 입니다. 나중에 IIS관리자에서 가상디렉토리로 /jakarta 를 만들것입니다.

extension_uri=/jakarta/isapi_redirect.dll

 

# 로그 파일의 저장 와 로그파일의 이름 입니다. 경로는 절대경로로 기입합니다.

log_file=D:\util\Tomcat Connector\log\isapi_redirect.log

 

# 로그 레벨 : debug, info, warn, error, trace

log_level=info

 

# IIS에서 redirect할 서버들의 정보를 지정한 파일입니다. 여러 Tomcat 서버로 부하를 분산할 수 있습니다.

worker_file=D:\util\Tomcat Connector\conf\workers.properties


# Tomcat 서버(Worker)로 요청을 보낼 URI 를 지정하는 파일 입니다.

worker_mount_file=D:\util\Tomcat Connector\conf\uriworkermap.properties



5.2. workers.properties 파일을 작성합니다.


D:\util\Tomcat Connector\conf 폴더 아래 생성합니다. 이 파일에 IIS에 연결될 Tomcat 서버들의 정보를 설정하게 됩니다. 이 글에서는 하나의 Tomcat 서버만을 사용하지만 여러개의 Tomcat 서버를 두고 부하를 분산하는 것도 가능합니다.


# Tomcat 서버를 지정합니다. 콤마로 분리해서 여러개를 지정할 수 있습니다.

worker.list=worker1


# Tomcat과 통신하는 프로토콜을 지정합니다.

worker.worker1.type=ajp13


# Tomcat 서버의 IP 주소 입니다.

worker.worker1.host=localhost


# Tomcat 서버의 ajp13 통신 포트 입니다. Tomcat의 server.xml 에 지정되어 있습니다.

worker.worker1.port=8009


workers.properties 파일의 자세한 설정방법은 "workers.properties configuration" 를 참조하세요.



5.3. uriworkermap.properties


D:\util\Tomcat Connector\conf 폴더 아래 생성합니다. 특정 URI로 들어온 요청을 Tomcat으로 보내도록 지정합니다.


# 확장자가 jsp인 요청을 Tomcat으로 reidrect 합니다.

/*.jsp=worker1


- uri 패턴은 대소문자를 구분합니다.

- # 으로 시작하는 행은 주석 입니다.

- 패턴과 Worker명 사이의 = 기호 앞과 뒤의 공백은 무시됩니다.

- 패턴 매칭 기호로 ?, *, |, !등을 사용할 수 있습니다.


uriworkmap.properties 파일의 자세한 설정 방법은 "uriworkermap.properties configuration" 를 참조하세요.



6. IIS에 테스트용 웹사이트 만들기


6.1. IIS관리자에서 왼쪽 트리에서 "사이트"를 클릭하고 화면 오른쪽 위의 작업에서 "웹 사이트 추가..."를 클릭합니다.




6.2. 사이트 정보를 입력합니다.




- 사이트 이름은 "Tomcat IIs 연동" 으로 입력합니다.

- 응용프로그램 이름은 기본값으로 사이트 이름과 같은 풀이 생성 되는데, 여기서는 "선택" 버튼을 클릭하여 DefaultAppPool을 선택했습니다.

- 실제 경로는 설치된 Tomcat의 웹 루트 폴더로 지정했습니다. 여기서는 D:\util\Apache Software Foundation\Tomcat 8.5\webapps\ROOT 입니다. IIS 웹 루트와 연동된 Tomcat의 웹 루트가 반드시 같을 필요는 없습니다.

- 포트는 8090으로 지정했습니다. Tomcat 설치시 웹 포트가 8080으로 설치 했다면 그 포트와 충돌하지 않도록 다른 포트로 지정하면 됩니다. 연동이 완료되면  Tomcat의 웹 포트는 닫아 버려도 상관이 없습니다.

- 호스트 이름은 비워 뒀습니다. 테스트용 개인 PC에 도메인이 없기 때문입니다.

- "웹 사이트 즉시 시작" 에 체크했습니다.


사이트가 생성이 되었습니다.




아직은 Tomcat연동이 완료되지 않아서 jsp 호출을 처리하지 못합니다.





7. IIS에서 Tomcat 연동 설정하기


7.1. ISAPI 및 CGI 제한 설정하기


IIS관리자의 왼쪽 컴퓨터 이름을 클릭하여 가운데 화면에서 "ISAPI 및 CGI 제한"을 더블 클릭합니다.




화면 오른쪽의 "추가..." 를 눌러 제한을 추가합니다.




- ISAPI 또는 CGI 경로 에는 isapi_redirect.dll 을 선택합니다.

- 설명에는 Tomcat 을 입력합니다.(임의로 넣어도 됩니다.)

- 확장 경로 실행 허용에 체크합니다.



7.2. 가상디렉토리 추가


Tomcat IIS 연동 사이트에 마우스 오른쪽 키를 클릭해서 팝업 메뉴에서 "가상 디렉터리 추가..."를 선택합니다.




가상 디렉터리 추가 창에서 다음과 같이 입력합니다.


- 별칭은 jakarta를 입력합니다. isapi_redirect.properties에서 지정한 이름 입니다.

- 실제 경로는 Tomcat Connector의 bin 폴더를 지정합니다.



7.3 ISAPI 필터 설정하기


Tomcat IIS 연동 사이트를 클릭하고 가운데 화면 아이콘중에서 ISAPI 필터를 더블클릭합니다.




화면 오른쪽 위의 "추가..." 버튼을 클릭하여 정보를 입력합니다.




- 필터 이름에 "Tomcat" 을 입력합니다.(임의로 입력해도 됩니다.)

- 실행파일에 isapi_redirect.dll 파일을 지정합니다.



7.4. 처리기 매핑을 설정합니다.


Tomcat IIS 연동 사이트를 클릭하고 가운데 화면 아이콘중에서 처리기 매핑을 더블클릭합니다.




사용 안 함에 있는 ISAPI-dll 을 클릭하고 화면 우측의 "기능 사용 권한 편집..."을 클릭하여 설정을 합니다.




사용권한에서 읽기, 스크립트, 실행에 모두 체크합니다. 기본적으로 읽기와 스크립트에는 체크가 되어 있을 것입니다.



8. 서비스를 재시작합니다.


시작버튼을 눌러 Windows 관리도구 -> 서비스를 실행해서 "World Wide Web Publishing 서비스"를 재시작합니다.




Tomcat 도 시작이 되어 있어야 합니다.



9. 연동 결과 확인




IIS 사이트의 포트인 8090으로 jsp 파일이 서비스 되는 것을 확인할 수 있습니다.

댓글을 달아 주세요

  • 좋은글 감사합니다. 2018.12.05 13:13  댓글주소  수정/삭제  댓글쓰기

    5.1. isapi_reidrect.properties 파일을 작성합니다.

    스펠링이 틀리셨네요 복북했다가 ㅜㅜ

  • 권정윤 2019.06.14 14:36  댓글주소  수정/삭제  댓글쓰기

    아래와 같은 오류가 뜹니다



    HTTP 오류 500.0 - Internal Server Error
    내부 서버 오류가 발생했기 때문에 페이지를 표시할 수 없습니다.

    가능성이 높은 원인:
    IIS에서 요청을 받았지만 요청을 처리하는 동안 내부 오류가 발생했습니다. 이 오류의 근본 원인은 요청을 처리하는 모듈이 어떤 모듈인지 그리고 이 오류가 발생했을 때 작업자 프로세스에서 어떤 일이 발생했는지에 따라 달라집니다.
    IIS에서 웹 사이트 또는 응용 프로그램의 web.config 파일에 액세스할 수 없습니다. NTFS 권한이 잘못 설정된 경우 이 오류가 발생할 수 있습니다.
    IIS에서 웹 사이트 또는 응용 프로그램의 구성을 처리할 수 없습니다.
    인증된 사용자가 이 DLL을 사용할 권한을 가지고 있지 않습니다.
    요청이 관리되는 처리기에 매핑되어 있지만 .NET 확장성 기능이 설치되어 있지 않습니다.

    가능한 해결 방법:
    web.config 파일의 NTFS 권한이 올바르며 웹 서버의 시스템 계정에 대한 액세스를 허용하는지 확인하십시오.
    이벤트 로그를 확인하여 다른 추가 정보가 로깅되어 있는지 알아보십시오.
    DLL에 대한 사용 권한을 확인하십시오.
    요청이 관리되는 처리기에 매핑되어 있는 경우 .NET 확장성 기능을 설치하십시오.
    실패한 요청에서 이 HTTP 상태 코드를 추적하는 추적 규칙을 만드십시오. 실패한 요청에 대한 추적 규칙을 만드는 방법을 자세하게 보려면 여기를 클릭하십시오.

    자세한 오류 정보:
    모듈 IsapiFilterModule
    알림 AuthenticateRequest
    처리기 StaticFile
    오류 코드 0x80070001
    요청한 URL http://localhost:8090/index.jsp
    실제 경로 D:\workspace_spring\INSA\src\main\webapp\WEB-INF\views\index.jsp
    로그온 방법 익명
    로그온 사용자 익명

    추가 정보:
    이 오류는 요청을 처리하는 동안 문제가 발생했음을 나타냅니다. 웹 서버에서 요청을 받았지만 처리하는 동안 500 오류의 원인이 되는 오류가 발생했습니다.
    상세 정보 보기 »

    Microsoft 기술 자료 문서:

    294807

    • pentode 2019.06.14 17:34 신고  댓글주소  수정/삭제

      처음 보는 오류입니다. 이 페이지 만으로 원인을 알수 가 없네요. IIS, Tomcat, isapi-redirect 각각의 로그를 확인해 보시는게 우선일 것 같습니다. 그 외에는 설정을 다시 확인해보고, 사용된 프로그램들의 버전에 이 글에서와 같은지 확인해보시고, dll 의 버전을 바꿔 본다던가 해 보세요.

    • 허상식 2019.07.01 15:39  댓글주소  수정/삭제

      저도 같은 오류가 뜨고 있어요

      500 - 내부 서버 오류.
      찾고 있는 리소스에 문제가 있어 표시할 수 없습니다.

    • 게발자 2020.07.08 13:29  댓글주소  수정/삭제

      저도 동일한 오류가 발생합니다.
      혹시 해결 하신 분 있으시면 공유 부탁드립니다.

    • pentode 2020.07.09 10:57 신고  댓글주소  수정/삭제

      이 URL을 확인해 보세요.

      http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html

  • 개발자 2019.07.09 12:13  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    위의 순서대로 연동을 시켰습니다.

    근데 마지막 JSP연동확인에 index.jsp가 잘 표시되고있는데
    저같은 경우는 JSP는 뜨지만 JSP의 <% %> 등의 JSP tag(JSTL)이 적용되지 않고 화면에 소스가 그대로 보이고있는데 어떤 문제 일까요?
    중간에 놓친 부분이 있나 확인해봤는데 우선 2번 확인한 결과 위의 연동 순서는 그대로 잘 되어있습니다.

    • pentode 2019.07.09 23:56 신고  댓글주소  수정/삭제

      안녕하세요. 스크립틀릿이 컴파일되지 않고 소스가 그대로 나온다는 것을 IIS가 요청을 Tomcat에게 넘기지 않고 직접 처리했다는 뜻입니다. property파일의 설정 내용을 다시 한번 검토해 보세요. 성공하시길 바랄께요.

  • 개발자 2019.07.12 13:55  댓글주소  수정/삭제  댓글쓰기

    IIS가 톰캣을 거치지 않고 직접 처리해서 JSP을 컴파일 했다는 의미인데, 프로퍼티 파일은 어떤 것을 말씀하시는건가요?
    위의 workers.properties , uriworkmap.properties 이것을 말씀하시는건가요?
    3번이고 확인했는데 오탈자도 없고 심지어 전체를 똑같이 따라한거라서요 ㅠㅠㅠㅠ

    • pentode 2019.07.12 14:20 신고  댓글주소  수정/삭제

      isapi_redirect.properties, workers.properties, uriwrokmap.properties 모두 학인하시고, 로그 파일의 내용도 확인하세요. isapi_redirect.properties파일은 dll 파일과 같은 디렉토리에 있어야 합니다.

      iis 가 jsp 파일을 바로 보냈다면 IIS webroot와 tomcat의 webroot를 같이 맞춘건가요. 그렇다면 다르게 해서 테스트를 해보면 좀더 확실한 에러를 만들 수 있을지도 모릅니다.

      성공하시길 바랄께요.

  • 개발자 2019.07.12 15:08  댓글주소  수정/삭제  댓글쓰기

    성공했습니다!
    톰캣 설치부터 어긋나있어서 저렇게 된것 같아요!
    감사합니다 확인했고 잘 구동됩니다^^