WebtoB 5
본 장에서는 WebtoB 5의 신규 기능과 이전 버전에서 변경된 기능, 버그 패치에 대해서 설명한다.
1. 신규 기능
1.1. HTH_THREAD 절 신규 생성
-
HTH_THREAD 절 신규 생성
HTH_THREAD 절을 추가하여 WebtoB 4까지 프로세스로 처리되었던 HTMLS를 HTH 내의 Worker Thread로 전환하였다. HTMLS 프로세스를 제거하므로 SERVER 절 설정이 필수가 아닌 선택으로 변경한다. HTH_THREAD 절은 반드시 설정해야 하며 하나만 설정한다. 자세한 설정 및 설명은 WebtoB 관리자 안내서를 참고한다.
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할 수 있도록 하였다.
*HTH_THREAD.HtmlsCompression 설정*HTH_THREAD hworker ... HtmlsCompression="text/html", HtmlsCompressionMinSize = 1, ...
1.2. SERVER 절에 Options 설정
-
FILTERS 프로세스에서 처리된 이후 요청을 JSV 서버(또는 다른 서버프로세스)에 요청을 전달할 때 사용자로부터 받은 요청을 그대로 전달할 때 사용하는 기능이다.
FILTERS 프로세스에서 처리되면서 URL 인코딩 등으로 요청 URL이 변경될 경우를 고려하여 사용될 수 있다.
*SERVER.Options 설정 방법*SERVER MyGroup SvgName = jsvg, MinProc = 1, MAXProc = 10, Options = "PassOriginalUriAfterFilters"
-
관련이슈 : IMS-100812
1.3. SVRGROUP 절에 HEADERS 절 설정을 적용
-
기존에 HEADERS 절 설정은 SERVER 절과 NODE(VHOST) 절에 적용 가능하였으나, WebtoB 5 버전부터 HTML 타입의 서버를 설정하지 않게 되었다. 특정 HTML에 대해서만 HEADERS 적용을 할 수 있도록 *SVRGROUP.Headers 설정을 추가하였다.
*SVRGROUP.Headers 설정*SVRGROUP htmlg NODENAME = "tmax", SVRTYPE = HTML, Headers = "header1", ... *HEADERS header1 ACTION="AddRequest", FieldName="ADDHEADER1", FieldValue="QMC_Test_Header1", RegExp="!html$", StatusCode=""
1.4. LOGLEVEL 절에 RotateBySeconds 설정
-
기존의 tracelog는 프로세스당 하나의 파일로 남기며 file size가 커지는 경우 관리가 어려운 점이 있는 데, *LOGLEVEL.RotateBySeconds에 설정한 시간으로 파일을 나눠서 로깅할 수 있도록 하였다.
*LOGLEVEL.RotateBySeconds 설정*LOGLEVEL .hth Level = "trace", RotateBySeconds = 300 (default: 300) ...
1.5. PROXY_SSL 절에 CertificateChainFile 설정
-
PROXY_SSL 절에도 추가된 CertificateChainFile 설정을 통해 Chain을 생성할 수 있다. 내부 서버의 Certificate의 인증을 하기 위해서는 다음과 같이 PROXY_SSL절에 CertificateChainFile을 설정한다.
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
1.6. wsadmin에 Thread 환경설정 및 통계정보 출력
-
wsadmin(wswebadmin)에 HTH_Thread 상태 및 통계정보를 볼 수 있는 아래와 같은 명령을 추가하였다.
wsadmin > HTH_Thread 정보 확인 명령어cfg -t : view HTH_THREAD properties st -t : statistics of each HTH threads st -T : statistics of HTH threads group
1.7. WSM에서 HTH를 주기적으로 체크하여 응답이 없는 경우 restart
-
HTH가 살아있는지 확인하기 위해 체크하는 시간을 NHthChkTime에 설정하여 연속된 2회의 요청에도 응답이 없는 경우 HTH를 restart하는 기능을 추가하였다.
*DOMAIN.NHthChkTime 설정*DOMAIN ... NHthChkTime = 30, (default: 30) ...
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을 참고한다.
WebDAV 기능 설정 방법*VHOST vhost1 ... Method = "GET, POST, HEAD, OPTIONS, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE" (default:"GET, POST, HEAD, OPTIONS") ...
Enterprise Edition License에서 지원하는 기능이다.
-
관련이슈 : IMS-82239
1.10. CA사의 SiteMinder 연동을 위한 filter 기능
-
FILTER 절에 모듈(so)을 추가하여 CA사의 SSO 솔루션인 SiteMinder의 Policy Server와 연동하며 사용자 인증 및 인가 처리 기능을 지원한다.
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
1.11. TLS extension - SNI 기능
-
기존에는 1개의 port로 2개의 인증서를 서비스하기 위해서는 port를 분리하거나, 멀티 도메인 인증서를 사용하여야 했다. 신규 버전에서는 TLS의 확장 기능인 SNI 기능을 추가함으로써 1개의 port로 여러 도메인을 서비스할 수 있게 되었다.
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"
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
1.13. JEUS로부터 register 메시지를 받을 때 engine name을 추가로 받을 수 있는 기능
-
"wsadmin > st -j"로 확인하는 경우 jengineid를 보여줄 때 base64 decoded 값을 보여주거나 JEUS로부터 받은 jenginename*를 보여주도록 하였다.
JEUS8에서 지원하는 기능이다. |
1.14. Window 서비스를 사용할 때 WSM이 죽은 경우 서비스 종료
-
Windows 서비스에서 30초 간격으로 WSM 프로세스가 살아있는지 체크하여 죽은 경우 wsdown 및 service를 종료하도록 한다.
-
관련이슈 : IMS-107294
1.15. Response size를 기준으로 compression 여부를 판단
-
*SERVER.CompressionMinSize를 설정하는 경우 Content-Length(또는 file size)가 해당 설정 이상인 경우에만 compression이 적용되도록 한다.
*SERVER.CompressionMinSize 설정*SERVER cgi SvgName = cgig, MinProc = 2, MaxProc = 10, CompressionMinSize = 1, Compression = "text/html"
*HTH_THREAD.HtmlsCompressionMinSize 설정과 같은 기능이다.
-
관련이슈 : IMS-107724
1.16. AccessLog Format에 "default" 외에 다른 설정 값 추가
-
기존의 AccessLog File Format인 default 외에 많이 사용하는 format을 alias로 지정하여 사용할 수 있도록 common, combined를 추가한다. 자세한 설정 및 설명은 WebtoB 관리자 안내서를 참고한다.
AccessLog File Format 설정 시 사용 가능한 aliasdefault: "%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
2. 변경 기능
2.1. Log Format 변경
-
syslog, errorlog의 시간 로그 레벨 등을 Tmax 전사적으로 진행하는 로그 포맷으로 공통화하였다.
다음은 에러 로그 예제이다.
에러 로그[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}
2.2. 불필요한 설정 제거
-
MaxPersistentServerConnections 설정 등이 존재하기 때문에 WebtoB 5에서는 아래 불필요한 설정을 제거하였다.
불필요한 설정 제거*NODE.MaxReverseProxyKeepAliveServerConnections *NODE.ReverseProxyRequestSlackBufferSize *NODE.AccessLogThroughWSM *NODE.UseInternalHtmls *NODE.InternalHtmlsReadSize *NODE.InternalHtmlsMaxCacheSize *NODE.InternalHtmlsAsyncReadThreads *NODE.InternalHtmlsAsyncReadThreshold *NODE.InternalHtmlsSendFileThreshold
2.3. Filter 동작 처리 변경
-
HTMLS 프로세스는 사용하지 않게 되었으므로 HTMLS에서 static file 처리 전 적용했던 Filter 동작은 FILTERS 프로세스에서 처리하도록 변경하였다.
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
2.5. Max FD 값 변경
-
하나의 HTH 프로세스가 처리할 수 있는 최대 Client(동시에 접속자수)가 늘어날 수 있도록 아래와 같이 FD 값을 변경하였다.
FD 값 변경 내용* Unix 8k(8192) -> 16k(16384) * Window 2k(2048) -> 4k(4096)
2.6. WBSSL 버전 업그레이드
-
WBSSL의 버전을 기존의 "WBSSL 2.2.2"에서 "WBSSL 2.2.4_B4"로 업그레이드하였다.
최근 계속해서 발생하는 OpenSSL의 보안 취약점 문제를 해결하기 위하여 SSL/TLS 통신 프로토콜 처리 부분을 개선한 OpenSSL 대체 라이브러리를 포함하였다.
WBSSL 변경 내용$>wbssl version WBSSL 2.2.4 B4 29 Mar 2016
-
관련이슈 : IMS-106426
2.7. Reverse proxy에서 Content-Length response header를 위한 변수를 64bit으로 변경
-
Reverse proxey를 사용할 때 Content-Length Response Header를 파싱하여 해당 value를 저장할 때 4bytes 변수에 저장하면서, 2GB를 넘어가는 Content-Length의 경우 음수값으로 인식하게 되어 발생하는 버그를 수정하였다.
-
관련이슈 : IMS-107204
3. 버그 패치
3.1. Reverse proxy에서 Pipeline Request 처리 중 core 발생 버그 수정
-
클라이언트의 pipelined request를 처리할 때 앞선 요청 처리를 위해 뒷단의 내부 서버로 connecting 중일 때 해당 클라이언트의 상태를 RUN 상태로 유지하도록 수정되었다.
-
관련이슈 : IMS-102899
3.2. IndexName이 HTML 타입이 아닌 요청에 Body가 큰 경우 CPU 점유율이 높아지는 문제
-
*NODE(VHOST).IndexName에 index.php이 설정되어 있는 환경에서 body가 큰 "POST /" 요청이 왔을 경우 예상보다 큰 redirect 메시지를 buffer에 담지 못하고 기다리는 동작을 반복하여 발생한 현상이다.
-
관련이슈 : IMS-106208
3.3. libexpat.lib 수정
-
WebDAV 지원을 위한 XML Parser Library로 lib/(bin) 하위에 libexpat.lib(dll)를 추가하였는데 해당 라이브러리의 문제로 wsboot가 실패하는 경우가 발생하였다. Windows x86 버전과 AIX x32 버전의 libexpat.lib(dll)을 수정하였다.
-
관련이슈 : IMS-105404
3.4. Response header에 'Expires’를 추가하던 중에 PHPS/CGIS core가 발생할 수 있는 문제
-
'Expires' Response header를 만들기 위해 request uri를 가져오는 도중 core가 발생하는 문제를 수정하였다.
-
관련이슈 : IMS-105697