제6장 WebtoB 5

내용 목차

6.1. 신규 기능
6.1.1. HTH_THREAD 절 신규 생성
6.1.2. SERVER 절에 Options 설정
6.1.3. SVRGROUP 절에 HEADERS 절 설정을 적용
6.1.4. LOGLEVEL 절에 RotateBySeconds 설정
6.1.5. PROXY_SSL 절에 CertificateChainFile 설정
6.1.6. wsadmin에 Thread 환경설정 및 통계정보 출력
6.1.7. WSM에서 HTH를 주기적으로 체크하여 응답이 없는 경우 restart
6.1.8. Term 타입의 라이선스를 체크
6.1.9. WebDAV 기능
6.1.10. CA사의 SiteMinder 연동을 위한 filter 기능
6.1.11. TLS extension - SNI 기능
6.1.12. 내장 Servlet Engine 버전 업그레이드
6.1.13. JEUS로부터 register 메시지를 받을 때 engine name을 추가로 받을 수 있는 기능
6.1.14. Window 서비스를 사용할 때 WSM이 죽은 경우 서비스 종료
6.1.15. Response size를 기준으로 compression 여부를 판단
6.1.16. AccessLog Format에 "default" 외에 다른 설정 값 추가
6.2. 변경기능
6.2.1. Log Format 변경
6.2.2. 불필요한 설정 제거
6.2.3. Filter 동작 처리 변경
6.2.4. SSL을 사용하는 경우 RequiredCiphers 기본값 변경
6.2.5. Max FD 값 변경
6.2.6. WBSSL 버전 업그레이드
6.2.7. Reverse proxy에서 Content-Length response header를 위한 변수를 64bit으로 변경
6.3. 버그 패치
6.3.1. Reverse proxy에서 Pipeline Request 처리 중 core 발생 버그 수정
6.3.2. IndexName이 HTML 타입이 아닌 요청에 Body가 큰 경우 CPU 점유율이 높아지는 문제
6.3.3. libexpat.lib 수정
6.3.4. Response header에 'Expires'를 추가하던 중에 PHPS/CGIS core가 발생할 수 있는 문제
6.3.5. Filter에서 302 응답이 생성된 경우 Accesslog에 status code가 0인 문제
6.3.6. Filters 프로세스를 종료할 때 core가 발생할 수 있는 문제

본 장에서는 WebtoB 5의 신규 기능과 이전 버전에서 변경된 기능, 버그 패치에 대해서 설명한다.

6.1. 신규 기능

6.1.1. HTH_THREAD 절 신규 생성

  • HTH_THREAD 절 신규 생성

    HTH_THREAD 절을 추가하여 WebtoB 4까지 프로세스로 처리되었던 HTMLS를 HTH 내의 Worker Thread로 전환하였다. HTMLS 프로세스를 제거하므로 SERVER 절 설정이 필수가 아닌 선택으로 변경한다. HTH_THREAD 절은 반드시 설정해야 하며 하나만 설정한다. 자세한 설정 및 설명은 "WebtoB 관리자 안내서"를 참고한다.

    [예 6.1] HTH_THREAD 설정

    *HTH_THREAD
    hworker
              WorkerThreads = 8,
              SendfileThreads = 4,
              SendfileThreshold = 32768,
              AccessLogThread = Y

    참고

    Windows에서 SendfileThreads 및 AccessLogThread는 지원하지 않는다.

  • HTH_THREAD.HtmlsCompression 기능

    기존의 HTMLS에서 처리하던 compression 기능을 Worker Thread에서 처리하도록 수정하였다.

    HtmlsCompressionMinSize 설정을 추가하여 Response body가 해당 설정 값 이상인 경우에만 compression할 수 있도록 하였다.

    [예 6.2] *HTH_THREAD.HtmlsCompression 설정

    *HTH_THREAD
    hworker   ...         
              HtmlsCompression="text/html",
              HtmlsCompressionMinSize = 1, 
              ...

6.1.2. SERVER 절에 Options 설정

  • FILTERS 프로세스에서 처리된 이후 요청을 JSV 서버(또는 다른 서버프로세스)에 요청을 전달할 때 사용자로부터 받은 요청을 그대로 전달할 때 사용하는 기능이다.

    FILTERS 프로세스에서 처리되면서 URL 인코딩 등으로 요청 URL이 변경될 경우를 고려하여 사용될 수 있다.

    [예 6.3] *SERVER.Options 설정 방법

    *SERVER
    MyGroup      SvgName = jsvg, MinProc = 1, MAXProc = 10, 
                 Options = "PassOriginalUriAfterFilters"
    

  • 관련이슈 : IMS-100812

6.1.3. SVRGROUP 절에 HEADERS 절 설정을 적용

  • 기존에 HEADERS 절 설정은 SERVER 절과 NODE(VHOST) 절에 적용 가능하였으나, WebtoB 5 버전부터 HTML 타입의 서버를 설정하지 않게 되었다. 특정 HTML에 대해서만 HEADERS 적용을 할 수 있도록 *SVRGROUP.Headers 설정을 추가하였다.

    [예 6.4] *SVRGROUP.Headers 설정

    *SVRGROUP
    htmlg     NODENAME = "tmax", SVRTYPE = HTML, Headers = "header1", 
              ...         
    *HEADERS
    header1   ACTION="AddRequest",
              FieldName="ADDHEADER1",
              FieldValue="QMC_Test_Header1",
              RegExp="!html$",
              StatusCode="" 

6.1.4. LOGLEVEL 절에 RotateBySeconds 설정

  • 기존의 tracelog는 프로세스당 하나의 파일로 남기며 file size가 커지는 경우 관리가 어려운 점이 있는 데, *LOGLEVEL.RotateBySeconds에 설정한 시간으로 파일을 나눠서 로깅할 수 있도록 하였다.

    [예 6.5] *LOGLEVEL.RotateBySeconds 설정

    *LOGLEVEL
    .hth      Level = "trace",
              RotateBySeconds = 300 (default: 300) 
              ...         
    

6.1.5. PROXY_SSL 절에 CertificateChainFile 설정

  • PROXY_SSL 절에도 추가된 CertificateChainFile 설정을 통해 Chain을 생성할 수 있다. 내부 서버의 Certificate의 인증을 하기 위해서는 다음과 같이 PROXY_SSL절에 CertificateChainFile을 설정한다.

    [예 6.6] PROXY_SSL.CertificateChainFile 설정

    *PROXY_SSL
    reverseSsl Verify=2,
               VerifyDepth=3,
               CertificateChainFile="$(WEBTOBDIR)/ssl/CHAIN.crt",
               CACertificateFile="$(WEBTOBDIR)/ssl/CA.crt",
               CertificateFile="$(WEBTOBDIR)/ssl/public.crt",
               CertificateKeyFile="$(WEBTOBDIR)/ssl/private.key",
               Protocols="-SSLv2, -SSLv3",
               RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP:!RC4:!IDEA:!3DES"
    

  • 관련이슈 : IMS-107342

6.1.6. wsadmin에 Thread 환경설정 및 통계정보 출력

  • wsadmin(wswebadmin)에 HTH_Thread 상태 및 통계정보를 볼 수 있는 아래와 같은 명령을 추가하였다.

    [예 6.7] wsadmin > HTH_Thread 정보 확인 명령어

    cfg -t : view HTH_THREAD properties
    st -t : statistics of each HTH threads
    st -T : statistics of HTH threads group

6.1.7. WSM에서 HTH를 주기적으로 체크하여 응답이 없는 경우 restart

  • HTH가 살아있는지 확인하기 위해 체크하는 시간을 NHthChkTime에 설정하여 연속된 2회의 요청에도 응답이 없는 경우 HTH를 restart하는 기능을 추가하였다.

    [예 6.8] *DOMAIN.NHthChkTime 설정

    *DOMAIN
            ...  
            NHthChkTime = 30, (default: 30) 
            ...         

6.1.8. Term 타입의 라이선스를 체크

  • 라이선스가 Term 타입인 경우 due date를 체크하도록 추가하였다.

6.1.9. WebDAV 기능

  • WebDAV(Web Distributed Authoring and Versioning, 웹 분산 저작 및 버전 관리) 기능을 지원한다.

    HTTP의 확장 프로토콜로 아래와 같이 NODE(VHOST) 절에 메소드를 추가하여 서버에 저장된 문서와 파일을 편집하고 관리할 수 있다. WebtoB에서는 PUT, DELETE, COPY, MOVE, MKCOL, PROPFIND 메소드를 지원한다. (LOCK/UNLOCK ,PROPPATCH 제외) 해당 기능을 사용하지 않으려면 특정 메소드를 disable하도록 설정하면 된다. 자세한 사항은 RFC-4918을 참고한다.

    [예 6.9] WebDAV 기능 설정 방법

    *VHOST
    vhost1    ...
              Method = "GET, POST, HEAD, OPTIONS, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE"
                     (default:"GET, POST, HEAD, OPTIONS")
              ...

    참고

    Enterprise Edition License에서 지원하는 기능이다.

  • 관련이슈 : IMS-82239

6.1.10. CA사의 SiteMinder 연동을 위한 filter 기능

  • FILTER 절에 모듈(so)을 추가하여 CA사의 SSO 솔루션인 SiteMinder의 Policy Server와 연동하며 사용자 인증 및 인가 처리 기능을 지원한다.

    [예 6.10] FILTER 절 및 filters 설정

    *FILTER
    sm_filter     RealPath = "$(WEBTOBDIR)/config/filter/wbSmISAPI.so"
    
    *SVRGROUP
    htmlg         SVRTYPE = HTML
    jsvg          SVRTYPE = JSV
    filterg       SVRTYPE = FILTER, Filter = "sm_filter"
    
    *SERVER
    MyGroup       SVGNAME = jsvg, MinProc = 5, MaxProc = 10
    filters       SVGNAME = filterg, MinProc = 1, MaxProc = 20
    
    *URI
    testuri       Uri= "/testuri/", SvrType = JSV
    
    *EXT
    fcc           MimeType = "text/html", SvrType = JSV
    

    참고

    Enterprise Edition License에서 지원하는 기능이다.

  • 관련이슈 : IMS-92139

6.1.11. TLS extension - SNI 기능

  • 기존에는 1개의 port로 2개의 인증서를 서비스하기 위해서는 port를 분리하거나, 멀티 도메인 인증서를 사용하여야 했다. 신규 버전에서는 TLS의 확장 기능인 SNI 기능을 추가함으로써 1개의 port로 여러 도메인을 서비스할 수 있게 되었다.

    [예 6.11] 1개의 port로 2개의 도메인을 서비스하는 방법

    *VHOST
    vhost1         DOCROOT   = "C:/TmaxSoft/WebtoB5.0/vdocs1",
                   NODENAME  =  "tmax",
                   HOSTNAME  = "192.168.0.0",
                   IndexName = "index.jsp",
                   ServiceOrder = "ext,uri",
                   #KeepAlive = N,
                   PORT = "7410",
                   SSLFLAG = Y,
                   SSLNAME = "ssl1"
    vhost2         DOCROOT   = "C:/TmaxSoft/WebtoB5.0/vdocs1",
                   NODENAME  =  "tmax",
                   HOSTNAME  = "192.168.0.0",
                   HostAlias = "vhost2.tmax.co.kr",
                   IndexName = "index.jsp",
                   ServiceOrder = "ext,uri",
                   PORT = "7410",
                   SSLFLAG = Y,
                   SSLNAME = "ssl2"
                   ...   
    *SSL
    ssl1            CertificateFile = "C:/TmaxSoft/WebtoB5.0/ssl/server.crt",
                    CertificateKeyFile = "C:/TmaxSoft/WebtoB5.0/ssl/server.key",
                    CertificateChainFile =  "C:/TmaxSoft/WebtoB5.0/ssl/chain.crt",
                    RequiredCiphers = "AES256-SHA",
                    PassPhraseDialog="exec:C:/TmaxSoft/WebtoB5.0/ssl/pass.bat"
    ssl2            CertificateFile = "C:/TmaxSoft/WebtoB5.0/ssl/server2.crt",
                    CertificateKeyFile = "C:/TmaxSoft/WebtoB5.0/ssl/server2.key",
                    CertificateChainFile =  "C:/TmaxSoft/WebtoB5.0/ssl/chan2.crt",
                    RequiredCiphers = "RC4-MD5",
                    PassPhraseDialog="exec:C:/TmaxSoft/WebtoB5.0/ssl/pass.bat"
    

    [예 6.12] test 방법

    >wbssl s_client -connect 192.168.0.0:7410 -servername vhost2.tmax.co.kr
    RESULT> CONNECTED(00000160)
     ...
     New, TLSv1/SSLv3, Cipher is RC4-MD5
     Server public key is 1024 bit
     Secure Renegotiation IS supported
     Compression: NONE
     Expansion: NONE
     SSL-Session:
         Protocol  : TLSv1.2
         Cipher    : RC4-MD5
    

6.1.12. 내장 Servlet Engine 버전 업그레이드

  • 내장 Servlet Engine 버전을 기존 JEUS 6 Fix#9에서 JEUS 7 Fix#4로 업그레이드하였다.

6.1.13. JEUS로부터 register 메시지를 받을 때 engine name을 추가로 받을 수 있는 기능

  • "wsadmin > st -j"로 확인하는 경우 jengineid를 보여줄 때 base64 decoded 값을 보여주거나 JEUS로부터 받은 jenginename*를 보여주도록 하였다.

참고

JEUS8에서 지원하는 기능이다.

6.1.14. Window 서비스를 사용할 때 WSM이 죽은 경우 서비스 종료

  • Windows 서비스에서 30초 간격으로 WSM 프로세스가 살아있는지 체크하여 죽은 경우 wsdown 및 service를 종료하도록 한다.

  • 관련이슈 : IMS-107294

6.1.15. Response size를 기준으로 compression 여부를 판단

  • *SERVER.CompressionMinSize를 설정하는 경우 Content-Length(또는 file size)가 해당 설정 이상인 경우에만 compression이 적용되도록 한다.

    [예 6.13] *SERVER.CompressionMinSize 설정

    *SERVER
    cgi       SvgName = cgig, MinProc = 2, MaxProc = 10, 
              CompressionMinSize = 1, Compression = "text/html"
    

    참고

    *HTH_THREAD.HtmlsCompressionMinSize 설정과 같은 기능이다.

  • 관련이슈 : IMS-107724

6.1.16. AccessLog Format에 "default" 외에 다른 설정 값 추가

  • 기존의 AccessLog File Format인 default 외에 많이 사용하는 format을 alias로 지정하여 사용할 수 있도록 common, combined를 추가한다. 자세한 설정 및 설명은 "WebtoB 관리자 안내서"를 참고한다.

    [예 6.14] AccessLog File Format 설정 시 사용가능한 alias

    default: "%h %t \"%r\" %s %b %D" 
    common: "%h %l %u %t \"%r\" %s %b" 
    combined: "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"" 
    

  • 관련이슈 : IMS-100553

6.2. 변경기능

6.2.1. Log Format 변경

  • syslog, errorlog의 시간 로그 레벨 등을 Tmax 전사적으로 진행하는 로그 포맷으로 공통화하였다.

    다음은 에러 로그 예제이다.

    [예 6.15] 에러 로그

    [2016-03-22T13:33:25] [CLIENT(192.168.0.0)] [E] [ERR-00122] Worker error. {DELETE, err=[ERR-05065] A request URI does not exist., 
    realpath=C:/TmaxSoft/WebtoB5.0/docs/webdav_dir/copy_method/non_test.txt}
    

6.2.2. 불필요한 설정 제거

  • MaxPersistentServerConnections 설정 등이 존재하기 때문에 WebtoB 5에서는 아래 불필요한 설정을 제거하였다.

    [예 6.16] 불필요한 설정 제거

    *NODE.MaxReverseProxyKeepAliveServerConnections
    *NODE.ReverseProxyRequestSlackBufferSize
    *NODE.AccessLogThroughWSM
    *NODE.UseInternalHtmls
    *NODE.InternalHtmlsReadSize
    *NODE.InternalHtmlsMaxCacheSize
    *NODE.InternalHtmlsAsyncReadThreads
    *NODE.InternalHtmlsAsyncReadThreshold
    *NODE.InternalHtmlsSendFileThreshold
    

6.2.3. Filter 동작 처리 변경

  • HTMLS 프로세스는 사용하지 않게 되었으므로 HTMLS에서 static file 처리 전 적용했던 Filter 동작은 FILTERS 프로세스에서 처리하도록 변경하였다.

6.2.4. SSL을 사용하는 경우 RequiredCiphers 기본값 변경

  • RequiredCiphers의 기본값을 다음과 같이 변경하였다.

    • 변경 전

      RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP"
    • 변경 후

      RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP:!RC4:!IDEA:!3DES"

  • 관련이슈 : IMS-103369

6.2.5. Max FD 값 변경

  • 하나의 HTH 프로세스가 처리할 수 있는 최대 Client(동시에 접속자수)가 늘어날 수 있도록 아래와 같이 FD 값을 변경하였다.

    [예 6.17] FD 값 변경 내용

    * Unix 8k(8192) -> 16k(16384)
    * Window 2k(2048) -> 4k(4096) 

6.2.6. WBSSL 버전 업그레이드

  • WBSSL의 버전을 기존의 "WBSSL 2.2.2"에서 "WBSSL 2.2.4_B4"로 업그레이드하였다.

    최근 계속해서 발생하는 OpenSSL의 보안 취약점 문제를 해결하기 위하여 SSL/TLS 통신 프로토콜 처리 부분을 개선한 OpenSSL 대체 라이브러리를 포함하였다.

    [예 6.18] WBSSL 변경 내용

    $>wbssl version
    WBSSL 2.2.4 B4 29 Mar 2016

  • 관련이슈 : IMS-106426

6.2.7. Reverse proxy에서 Content-Length response header를 위한 변수를 64bit으로 변경

  • Reverse proxey를 사용할 때 Content-Length Response Header를 파싱하여 해당 value를 저장할 때 4bytes 변수에 저장하면서, 2GB를 넘어가는 Content-Length의 경우 음수값으로 인식하게 되어 발생하는 버그를 수정하였다.

  • 관련이슈 : IMS-107204

6.3. 버그 패치

6.3.1. Reverse proxy에서 Pipeline Request 처리 중 core 발생 버그 수정

  • 클라이언트의 pipelined request를 처리할 때 앞선 요청 처리를 위해 뒷단의 내부 서버로 connecting 중일 때 해당 클라이언트의 상태를 RUN 상태로 유지하도록 수정되었다.

  • 관련이슈 : IMS-102899

6.3.2. IndexName이 HTML 타입이 아닌 요청에 Body가 큰 경우 CPU 점유율이 높아지는 문제

  • *NODE(VHOST).IndexName에 index.php이 설정되어 있는 환경에서 body가 큰 "POST /" 요청이 왔을 경우 예상보다 큰 redirect 메시지를 buffer에 담지 못하고 기다리는 동작을 반복하여 발생한 현상이다.

  • 관련이슈 : IMS-106208

6.3.3. libexpat.lib 수정

  • WebDAV 지원을 위한 XML Parser Library로 lib/(bin) 하위에 libexpat.lib(dll)를 추가하였는데 해당 라이브러리의 문제로 wsboot가 실패하는 경우가 발생하였다. Windows x86 버전과 AIX x32 버전의 libexpat.lib(dll)을 수정하였다.

  • 관련이슈 : IMS-105404

6.3.4. Response header에 'Expires'를 추가하던 중에 PHPS/CGIS core가 발생할 수 있는 문제

  • 'Expires' Response header를 만들기 위해 request uri를 가져오는 도중 core가 발생하는 문제를 수정하였다.

  • 관련이슈 : IMS-105697

6.3.5. Filter에서 302 응답이 생성된 경우 Accesslog에 status code가 0인 문제

  • Filters 프로세스에서 302 응답이 만들어질 때 클라이언트에게는 302 응답이 정상적으로 전달되지만, Accesslog에는 Response status code가 0으로 찍히는 문제를 수정하였다.

6.3.6. Filters 프로세스를 종료할 때 core가 발생할 수 있는 문제

  • Filters 프로세스를 wsdown으로 종료했을 경우에 core가 발생할 수 있는 문제를 수정하였다.