내용 목차
공통으로 사용될 로그 포맷을 설정할 수 있도록 *USERLOGFORMAT 절을 추가하였다.
기존에 VHOST가 많을 경우에 같은 포맷을 설정하고자 할지라도 각각 설정해야 했으나, *USERLOGFORMAT 절에 사용자가 로그 포맷을 설정하고 *LOGGING 절에서 해당 설정 포맷을 사용할 수 있도록 하였다.
[예 2.1] *USERLOGFORMAT 설정 방법
*LOGGING log1 Format = "format1", FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log", Option = "sync" ... *USERLOGFORMAT format1 Format = "%h %l %u %t \"%r\" %s %b"
관련이슈 : IMS-108609
FILTERS 프로세스에서 처리된 이후 요청을 JSV 서버(또는 다른 서버 프로세스)에 요청을 전달할 때 사용자로부터 받은 요청을 그대로 전달할 때 사용하는 기능이다.
FILTERS 프로세스에서 처리되면서 URL 인코딩 등으로 요청 URL이 변경될 경우를 고려하여 사용될 수 있다.
[예 2.2] *SERVER.Options 설정 방법
*SERVER
MyGroup SvgName = jsvg, MinProc = 1, MAXProc = 10,
Options = "PassOriginalUriAfterFilters"
관련이슈 : IMS-100812
Windows 서비스에서 30초 간격으로 WSM 프로세스가 살아있는지 체크하여 죽은 경우 wsdown 및 서비스를 종료하도록 한다.
관련이슈 : IMS-107294
*SERVER.CompressionMinSize를 설정하는 경우 Content-Length(또는 file size)가 해당 설정 이상인 경우에만 compression이 적용되도록 한다.
[예 2.3] *SERVER.CompressionMinSize 설정
*SERVER
html SvgName = htmlg, MinProc = 2, MaxProc = 10,
CompressionMinSize = 1, Compression = "text/html"
관련이슈 : IMS-107724
*NODE.RPAHeader = "X-Forwarded-For"와 같이 설정하면, WebtoB로 들어오는 HTTP 요청에서 Proxy 등을 거치면서 변경된 Remote IP에 Proxy 서버의 IP가 아닌 원래 요청이 발생된 Host IP로 설정할 수 있다.
[예 2.4] *NODE.RPAHeader 설정
*NODE
webtob WEBTOBDIR = "/home/webtob_4191",
SHMKEY = 54800,
RPAFHeader = "X-Forwarded-For"
관련이슈 : IMS-108918
PROXY_SSL 절에도 추가된 CertificateChainFile 설정을 통해 Chain을 생성할 수 있다. 내부 서버의 Certificate의 인증을 하기 위해서는 다음과 같이 PROXY_SSL 절에 CertificateChainFile을 설정한다.
[예 2.5] *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
TimeOut이 발생하는 경우 HTTP 상태코드를 변경할 수 있는 *NODE.TimeOutStatus 설정을 추가하였다. 기존에는 TimeOut이 발생할 경우 500 error가 발생하였으나, *NODE.TimeOutStatus 설정한 code 값으로 변경할 수 있다.
[예 2.6] *NODE.TimeOutStatus 설정
*NODE
webtob WEBTOBDIR = "/home/webtob_4191",
SHMKEY = 54800,
TimeOut = 300,
TimeOutStatus = 512 # 500 (511-599)
관련이슈 : IMS-110816
기존에는 1개의 포트로 2개의 인증서를 서비스하기 위해서는 포트를 분리하거나, 멀티 도메인 인증서를 사용해야 했다. 신규 버전에서는 TLS의 확장 기능인 SNI 기능을 추가함으로써 1개의 포트로 여러 도메인을 서비스할 수 있게 되었다.
[예 2.7] 1개의 port로 2개의 도메인을 서비스하는 방법
*VHOST vhost1 DOCROOT = "C:/TmaxSoft/WebtoB4.1/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/WebtoB4.1/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/WebtoB4.1/ssl/server.crt", CertificateKeyFile = "C:/TmaxSoft/WebtoB4.1/ssl/server.key", CertificateChainFile = "C:/TmaxSoft/WebtoB4.1/ssl/chain.crt", RequiredCiphers = "AES256-SHA", PassPhraseDialog = "exec:C:/TmaxSoft/WebtoB4.1/ssl/pass.bat" ssl2 CertificateFile = "C:/TmaxSoft/WebtoB4.1/ssl/server2.crt", CertificateKeyFile = "C:/TmaxSoft/WebtoB4.1/ssl/server2.key", CertificateChainFile = "C:/TmaxSoft/WebtoB4.1/ssl/chan2.crt", RequiredCiphers = "RC4-MD5", PassPhraseDialog = "exec:C:/TmaxSoft/WebtoB4.1/ssl/pass.bat"
다음은 위 설정을 테스트하는 방법이다.
$>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
관련이슈 : IMS-105573
Accesslog format에 커넥션 구분에 따라 HTTP 또는 HTTPS를 기록할 수 있는 "%S" 설정을 추가하였다.
[예 2.8] [예] Accesslog format = "%S" 설정
*LOGGING
log1 Format = "%h %S %l %u %t \"%r\" %s %b",
FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log",
Option = "sync"
관련이슈 : IMS-110768
WBSSL의 버전을 기존의 "WBSSL 2.2.2"에서 "WBSSL 2.3.0_B0"로 업그레이드하였다.
$>wbssl version WBSSL 2.3.0 B0 20 May 2016
관련이슈 : IMS-106426
RequiredCiphers의 기본값을 다음과 같이 변경하였다.
변경 전
RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP"
변경 후
RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP:!RC4:!IDEA:!3DES"
관련이슈 : IMS-103369
기존 Dynamic header가 30개 이상일 경우 "Input header count is too many" 로그가 발생하여, 최대 Dynamic header 수를 30에서 60으로 증가하였다.
관련이슈 : IMS-108490
클라이언트의 Pipelined Request를 처리할 때 앞선 요청 처리를 위해 뒷단의 내부 서버로 connecting 중일 때 해당 클라이언트의 상태를 RUN 상태로 유지하도록 수정하였다.
관련이슈 : IMS-102899
HTMLS를 kill하는 과정에서 해당 프로세스에 대해 두 번 close하려고 하는 부분으로 인한 문제를 수정하였다.
관련이슈 : IMS-104842
*NODE(VHOST).IndexName에 index.php이 설정되어 있는 환경에서 body가 큰 "POST /" 요청이 왔을 경우 예상보다 큰 redirect 메시지를 buffer에 담지 못하고 기다리는 동작을 반복하여 발생한 현상이다.
관련이슈 : IMS-106208
'Expires' Response header를 만들기 위해 Request uri를 가져오는 도중 core가 발생하는 문제를 수정하였다.
관련이슈 : IMS-105697
Filters 프로세스에서 302 응답이 만들어질 때 클라이언트에게는 302 응답이 정상적으로 전달되지만, Accesslog에는 Response status code가 0으로 찍히는 문제를 수정하였다.
Filters 프로세스를 wsdown으로 종료했을 경우에 core가 발생할 수 있는 문제를 수정하였다.
많은 양의 JEUS 커넥션이 동시에 네트워크를 점유하는 등의 상황으로 인해 RegisterMsg(WJP Header + JENGINEID)를 한 번에 읽지 못하는 상태에서 발생할 수 있는 문제(예: JENGINEID가 잘려서 읽게 되는 등)를 수정하였다.
관련이슈 : IMS-108399
필터에서 Request header에 특정 header를 추가할 때 클라이언트가 미리 끊는 등의 이유로 기존 Reqeust header가 없는 경우가 있을 수 있는데 이 경우를 체크하지 않은 경우 Filters 프로세스가 down될 수 있는 버그를 수정하였다.
필터에서 Set-Cookie 등을 한 경우 Compression을 처리할 때 해당 결과를 반영하지 않는 문제가 있어서 수정하였다.
ReverseProxy로 웹 소켓 사용할 때 뒷단의 서버가 읽어가는 것보다 클라이언트가 보내는 것이 더 빠를 때 잠시 pending한 데이터를 다시 읽지 않는 FlowControl fail이 발생할 수 있는 문제를 수정하였다.
관련이슈 : IMS-111061
WebDAV 기능 중 같은 파일을 덮어쓸 때 "Overwrite: T" Request Header가 없을 경우에도 default가 T로 처리되도록 수정하였다.
관련이슈 : IMS-112412
BitKinex와 같은 WebDAV 툴을 이용하여 테스트 중에 '/'로 끝나는 PROPFIND를 호출하는 경우 /index.html로 응답을 주어 'directory'가 보이지 않는 버그를 수정하였다.
관련이슈 : IMS-112412