환경설정

본 장에서는 환경설정의 구조와 각 절의 설정 항목과 예제에 대해서 설명한다.

1. 개요

WebtoB 환경설정은 하나의 WebtoB 도메인(Domain) 및 노드(Node)에 대한 설정과 웹 서버의 동작에 대한 설정을 한다.

1.1. 환경설정 파일 구조

WebtoB의 환경설정 파일은 크게 절을 정의하는 부분과 설정할 이름과 해당 절에 설정할 수 있는 항목으로 구성된다.

# 주석
*절
이름
    # 주석
    항목 = 설정값, # 주석
    ...,
    항목 = 설정값

절을 시작한 이후 정의할 이름을 설정하고, 각 절에서 설정할 수 있는 각각의 항목을 설정한다.

다음은 WebtoB에서 설정해야 하는 절에 대한 설명이다.

설명

DOMAIN 절

WebtoB 도메인을 설정한다.

NODE 절

WebtoB 노드에 대한 구체적인 환경에 대해 설정한다.

VHOST 절

Virtual Hosting이 필요한 경우 VHOST 절에 관련 환경을 설정한다.

HTH_THREAD 절

HTH 프로세스 내 Thread를 설정한다.

SVRGROUP 절

WebtoB를 통해 응용 서버 프로세스를 접근하는 경우 서버 프로세스의 논리적인 연관성에 따라 이들을 그 룹으로 관리할 경우 설정한다.

SERVER 절

요청을 처리할 프로세스와 관련된 설정을 한다.

SERVICE 절

WebtoB를 통해 비즈니스 로직을 바로 수행할 경우 설정한다.

DIRECTORY 절

노드 내의 특정 디렉터리의 속성을 설정한다.

URI 절

클라이언트 요구의 URI(Uniform Resource Identifier) 값에 따라 이를 처리하는 서비스를 구분할 수 있도록 한다.

ALIAS 절

실제 서버의 물리적 디렉터리 경로와 URI를 Alias시키도록 설정한다.

DIRINDEX 절

인덱싱하는 방식과 Icon 등을 지정할 수 있다.

LOGGING 절

클라이언트의 요구 내역을 기록하는 형식을 지정한다.

ACCESS 절

클라이언트에서 접속을 시도할 때 IP 주소, network/netmask, Header 정보들을 기준으로 요청의 허용/제 한을 설정한다.

AUTHENT 절

클라이언트의 접근을 제한하기 위한 인증 과정을 사용자와 그룹 단위로 통제할 수 있도록 설정한다.

EXT 절

클라이언트가 요구한 파일의 확장자명에 따라 처리 담당 프로세스를 설정한다.

SSL 절

WebtoB에서 사용할 SSL의 기능을 설정한다.

PROXY_SSL 절

WebtoB가 Proxy 역할을 할 때 사용할 SSL의 기능을 설정한다.

ERRORDOCUMENT 절

에러 문제가 발생했을 때 대응방법을 설정한다.

EXPIRES 절

클라이언트 요청에 따라 전송되는 서버 Response Header의 정보를 설정한다.

TCPGW 절

특정 Port나 IP 주소로 들어오는 TCP 연결을 다른 서버로 전송하는 중계(proxy)하는 역할을 한다.

REVERSE_PROXY_GROUP 절

REVERSE_PROXY 절 설정을 그룹으로 관리할 필요가 있을 때 사용한다.

REVERSE_PROXY 절

HTTP Proxy 일종으로 외부에서 접근 불가능한 내부 서버로 요청을 전달할 때 설정한다.

LOGLEVEL 절

시스템 로그 메시지 출력을 제어하는 로그 레벨을 설정한다.

HEADERS 절

사용자 요청 및 응답에 특정 HTTP Header를 추가하는 경우 설정한다.

PRECEDING_COMMAND 절

WebtoB를 기동할 때 WebtoB의 각 프로세스별 CPU Affinity를 지정하는 등의 선행 명령어를 실행하도록 설정한다.

FILTER 절

Filter 모듈을 사용할 FILTER 절을 정의하여, NODE 절이나 VHOST 절 또는 SVRGROUP 절에 Filter 항목 을 설정한다.

USERLOGFORMAT 절

공통으로 사용될 로그 포맷을 설정한다.

DISK_CACHE 절

디스크 캐싱을 사용할 경우 설정한다.

LOG_HANDLER 절

WebtoB에서 accesslog를 리모트 서버에 남기는 경우 설정한다.

IPGROUP 절

설정 값이 여러 개의 IP인 경우 이를 그룹으로 관리할 필요가 있을 때 사용한다.

ADMIN 절

REST API 통신을 위해 사용하고자 하는 경우 설정한다.

DOMAIN, NODE, HTH_THREAD 절은 반드시 설정해야 한다.

절은 다음의 규칙을 준수해서 설정해야 한다.

  • 절은 애스터리스크(*) 이후 절의 이름을 설정하여 시작한다.

  • 절의 시작은 줄의 첫 번째 칸에 애스터리스크(*)로 시작하며, 절의 이름은 대문자를 사용한다.

  • 절을 시작한 줄에는 다른 설정이 있어서는 안 되며, 적어도 하나 이상 해당 절과 관련된 설정을 해야 한다.

  • 절을 정의한 이후부터 다른 절을 정의하기 전이나 설정의 끝까지는 해당 절에 관련된 설정으로 간주한다.

  • 절의 순서는 고정되어 있지 않기 때문에 어느 절이 먼저 정의되어도 상관없다.

  • 절의 정의는 내용별로 나누어 한 번 이상 나타날 수 있다. 즉, 하나의 절을 여러 번으로 나누어 정의할 수 있다.

절 이름

절에는 해당 절을 구분하기 위해 절 이름을 지정해야 한다. 절 이름은 다음의 규칙을 참고해서 설정해야 한다.

  • 절의 이름은 줄의 첫 번째 칸에서 시작해야 한다.

  • 절의 이름은 알파벳과 숫자, 하이픈(-), 마침표(.), 언더라인(_)을 사용할 수 있다. 단, SERVICE 절의 이름은 알파벳과 숫자, 언더라인(_)만 사용할 수 있다.

  • 같은 절에서 절의 이름은 동일한 값을 사용할 수 없다. 즉, 동일한 이름으로 반복 정의해서는 안 된다.

항목 설정

절의 이름을 설정한 이후에 "항목이름 = 설정값"의 형태로 설정한다.

*절
이름
    항목1 = 설정값,
    항목2 = 설정값,
    ...,
    항목n = 설정값

항목은 다음의 규칙을 참고해서 설정한다.

  • 설정할 항목이 여러 개일 경우 콤마(,)로 구분하여 설정한다.

    항목 설정이 콤마(,)로 끝나는 경우 다음 줄에 다른 항목 설정이 있다는 것을 의미한다. 따라서 마지막 항목 설정은 콤마(,)로 끝나서는 안 된다.

  • 항목명은 대소문자를 구분하지 않는다.

  • 항목 설정은 줄의 첫 번째 칸에서 시작할 수 없다.

  • 반드시 하나 이상의 공백 이후에 설정해야 한다.

  • 여러 항목을 같은 줄에 설정할 수도 있다.

  • 항목 설정은 기본적으로 같은 항목에 대해 하나만 설정하지만, 항목에 따라서는 반복적으로 설정할 수도 있다.

  • 항목은 각 절에 반드시 설정해야 하는 필수 항목이 있을 수 있으며, 나머지 항목은 필요한 경우에만 설정한다.

항목의 설정값은 항목에 따라 Numeric, String, Literal, Boolean 형식으로 설정하며, 각각 다음과 같이 설정한다.

종류 설명

Numeric

숫자를 설정한다. 0700처럼 0으로 시작하는 경우 8진수로, 0xff처럼 0x로 시작하는 경우 16진수로 처리한다.

String

문자열을 설정한다.

Literal

문자열을 설정한다. 항상 따옴표(" ")로 묶여 있어야 한다.

Boolean

Y/N 또는 YES/NO로 설정한다.

주석

해시 기호(#) 이후부터 그 줄의 마지막까지는 주석으로 간주한다.

설정 예제

*DOMAIN
webtob

*NODE
mynode
    WebtoBDir = "$WEBTOBDIR",
    SHMKEY = 54000
    # Port = "80" is default

*HTH_THREAD
hworker
  WorkerThreads = 8

*SVRGROUP
cgig
    SvrType = CGI

*SERVER
cgis
    SvgName = cgig
    # MinProc = 1, MaxProc = 1 is default

1.2. 환경설정 파일 컴파일

WebtoB를 실행하기 전에 테스트로 작성된 설정 파일은 wscfl을 사용해서 실제 WebtoB가 인식할 수 있는 바이너리 형태로 전환(컴파일)해야 한다.

텍스트 형식의 설정 파일은 기본적으로 "http.m"을 사용하며, 바이너리 형태의 설정 파일은 "wsconfig"를 사용한다. 컴파일 과정에서 wscfl은 텍스트 형식으로 작성된 설정 파일의 문법적 오류나 시스템 설정 오류를 검증한다.

다음은 텍스트 설정 파일 "$WEBTOBDIR/config/http.m"을 컴파일하는 예제이다.

wscfl -i http.m

바이너리 형태인 설정 파일의 기본 파일명인 "wsconfig"를 다른 이름으로 사용하는 경우 WEBTOB_CONFIG 환경변수를 설정하거나, wscfl 및 wsadmin, wsboot, wsdown 프로그램을 실행할 때 옵션으로 파일명을 지정할 수 있다.

1.3. 설정 항목 설명 규약

다음 절에서 각 절의 설정 항목을 설명할 것이다. 설명하는 각 절의 설정 항목(회색박스)의 내용을 이해하기 위해서 다음의 규약을 알고 있어야 한다.

  • 이름 앞에 해시 기호(#)로 시작하는 항목은 선택 항목임을 나타낸다.

  • String 및 Literal 형식의 경우 대괄호( [ ] )안의 값은 내부적으로 사용하는 버퍼의 크기를 의미한다. String[n] 혹은 Literal[n]의 경우 설정할 수 있는 문자열의 길이가 (n -1)로 제한된다.

  • 기본값이 있는 설정의 경우 해시 기호(#) 이후에 표시한다.

  • Numeric 형식의 경우 괄호를 사용하여 설정 가능한 범위를 표시한다.

  • 최댓값 제한이 없을 경우 생략하며, INT_MAX(2147483647)까지만 사용할 수 있다.

  • "$ENV"는 환경변수를 참조할 수 있다는 의미이다.

  • "R.PATH"는 상대 경로로 설정하는 경우 $WEBTOBDIR로부터의 상대 경로로 사용한다는 의미이다.

  • "LIST"는 콤마(,)를 사용하여 여러 설정을 동시에 할 수 있다는 의미이며, "LIST[n]"은 최대 n개로 동시에 설정가능한 수가 제한됨을 의미한다. [n]이 없을 경우 전체 길이가 버퍼의 크기보다 작게만 설정하면 된다.

  • "PM.LIST"는 설정 앞에 플러스 기호(+) 혹은 마이너스 기호(-)를 사용하여 설정할 수 있음을 의미한다. 보통 플러스 기호의 경우 해당 기능을 사용한다는 의미이며, 생략할 수 있다. 마이너스 기호는 해당 기능을 사용하지 않도록 설정하라는 의미이다.

  • "MULTI"는 같은 항목을 여러 번 설정할 수 있다는 의미이며, "MULTI[n]"은 최대 n개로 동시에 설정 가능한 수가 제한됨을 의미한다.

  • "LIST"와 "MULTI"가 같이 있을 경우 동시에 여러 번 설정도 가능하고, 같은 항목을 여러 번 설정하는것도 가능하다는 의미이다. 이 경우 최대 설정 가능한 수는 LIST[n]의 값으로 제한된다.

2. DOMAIN 절

DOMAIN 절은 WebtoB 도메인을 설정한다. DOMAIN 절은 반드시 설정해야 하며, 하나만 설정한다.

2.1. 설정 항목

다음은 DOMAIN 절의 환경설정 형식이다.

*DOMAIN
name    # String[32]
        #DomainID = Numeric,             # 0 (0-255)
        #MaxSvc = Numeric,               # 512 (1-0xffff)
        #NHthChkTime = Numeric,          # 30 (0-)
        #CloudDasAddress = Literal[256],  #"$DASURL", $ENV
        #CloudServiceGroupId = String[32]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

DOMAIN 절 이름

  • 종류: String

  • 범위: 31자 이내

  • WebtoB 도메인 이름을 설정한다.

DomainID

  • 종류: Numeric

  • 범위: 0 ~ 255

  • 도메인 ID를 설정한다.

  • 설정한 ID는 WebtoB 내부 통신에서 도메인을 구분할 때 사용한다.

  • 254와 255는 다음과 같은 특별한 의미로 사용된다.

    설정값 설명

    254

    "304 Not Modified"를 항상 Worker Thread에서 처리한다.

    따라서 304 응답에 대한 처리가 느릴 수 있으므로 권장하지 않는다.

    255

    HTH에서 conditional-get 요청에 대해 항상 "304 Not Modified"로 응답한다.

    따라서 리소스가 수정되었더라도 브라우저나 Proxy에서는 오래된 리소스를 그대로 사용하게 되므로 권장하지 않는다.

MaxSvc

  • 종류: Numeric

  • 범위: 1 ~ 65535(0xffff)

  • 기본값: 512

  • 설정 가능한 최대 서비스의 수를 변경한다.

  • 서비스는 SERVICE 절 뿐만 아니라, URI 절 및 EXT 절도 포함한다(URI 절 및 EXT 절 설정은 자동으로 SERVICE 절에 등록된다).

NHthChkTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 30

  • HTH가 살아있는지 확인하기 위해 체크하는 시간을 설정하며 HTH가 블록이 걸려있는지 확인하는데 사용된다.

  • NHthChkTime을 설정하고 연속된 2회의 요청에도 응답이 없으면 해당 HTH에 이상이 발생했다고 인식하고 해당 HTH를 재시작한다.

CloudDasAddress

  • 종류: Literal

  • 범위: 255자 이내

  • Cloud 환경에서 WebtoB와 JEUS를 연동하는 경우 Auto Scale을 위해 서로 이벤트를 감지할 수 있도록 DAS의 IP 주소와 포트 번호를 설정한다.

  • 환경변수를 사용할 수 있으며 이 경우 Cloud용 이미지를 만들 때 편리하다.

CloudServiceGroupId

  • 종류: String

  • 범위: 31자 이내

  • Cloud 환경에서 업무별로 WebtoB를 구분할 수 있는 ID를 설정한다.

2.2. 예제

다음은 DOMAIN 절을 설정한 예제이다.

*DOMAIN
webtob

3. NODE 절

NODE 절은 WebtoB 노드에 대한 구체적인 환경에 대해 설정한다. NODE 절은 노드의 전체적인 동작과 관련된 설정을 정의한다. VHOST 절을 설정하여 가상 호스트 설정한 경우 NODE 절 설정은 기본 호스트로 동작한다.

NODE 절에는 다음과 같은 내용들이 정의될 수 있다.

  • WebtoB 시스템 경로

  • 서비스할 문서들이 위치한 최상위 경로 (document root)

  • 공유 메모리의 Key 값

  • 서비스 IP 및 포트 번호 설정

  • 기타 시스템 전체적인 설정

3.1. 설정 항목

다음은 NODE 절의 환경설정 형식이다.

*NODE
name   # String[128]
       WebtobDir = Literal[256],            # $ENV
       ShmKey = Numeric,                    # (32768-262143)/(0x8000-0x3FFFF)
       #Nodename = Literal[128],            # "<*NODE.Name>", $ENV
       #User = String[32],
       #Group = String[32],
       #Hostname = Literal[128],            # "<OS hostname>"
       #DocRoot = Literal[256],             # "docs/", $ENV, R.PATH
       #SvrRoot = Literal[256],             # "$WEBTOBDIR", $ENV
       #Method = Literal[256],              # "GET,POST,HEAD,OPTIONS", PM.LIST
       #Hth = Numeric,                      # 1 (1-100)
       #HthQTimeout = Numeric,              # 0 (0-)f
       #Port = Literal[1024],               # "80" or "443" (1-65535), LIST[100]
       #JsvPort = Numeric,                  # 9999 (1-65535)
       #JsvSslPort = Numeric,               # 0 (1-65535)
       #JsvSslFlag = Boolean,               # N
       #JsvSslName = String[32],
       #RacPort = Numeric,                  # 3333 (1-65535)
       #SslFlag = Boolean,                  # N
       #SslName = String[32],
       #Timeout = Numeric,                  # 300 (1-)
       #InitialConnectionTimeout = Numeric, # 10 (0-)
       #RequestHeaderTimeout = Numeric,     # 60 (0-)
       #RequestBodyTimeout = Numeric,       # 0 (0-)
       #CacheKey = String[32],              # HOST_URI (HOST_URI, REAL_PATH)
       #CacheEntry = Numeric,               # 1024 (0-)
       #MaxCacheMemorySize = Numeric,       # 100 (0-)
       #CacheMaxFileSize = Numeric,         # 8192 (0-)
       #CacheMaxCompressSize = Numeric,     # 0 (0-)
       #CacheRefreshImage = Numeric,        # 3600 (0-)
       #CacheRefreshHtml = Numeric,         # 3600 (0-)
       #CacheRefreshJsv = Numeric,          # 3600 (0-)
       #CacheRefreshRproxy = Numeric,       # 3600 (0-)
       #DiskCache = String[32],
       #Keepalive = Boolean,                # Y
       #KeepaliveTimeout = Numeric,         # 60 (1-)
       #KeepaliveMax = Numeric,             # 0 (0-)
       #MaxUser = Numeric,                  # <auto> (1-)
       #AppDir = Literal[256],              # $ENV, R.PATH
       #PathDir = Literal[256],             # "path/", $ENV, R.PATH
       #UsrLogDir = Literal[256],           # "log/usrlog/", $ENV, R.PATH
       #IconDir = Literal[256],             # $ENV, R.PATH
       #UserDir = Literal[256],             # MULTI
       #IndexName = Literal[256],           # "index.html", LIST
       #DirIndex = Literal[32],
       #Options = Literal[256],             # "HTML,CGI,SSI,PHP,JSV", PM.LIST
       #ErrorDocument = Literal[256],       # LIST[64]
       #Logging = Literal[256],             # LIST[4]
       #ErrorLog = Literal[256],            # LIST
       #Filter = Literal[256],              # LIST[64]
       #Listen = Literal[1024],             # LIST[100]
       #IpcPerm = Numeric,                  # 0700 (0600-0777)
       #ListenBacklog = Numeric,            # <auto> (1-)
       #SendBufferSize = Numeric,           # <auto> (0-)
       #RecvBufferSize = Numeric,           # <auto> (0-)
       #IpcSendBufferSize = Numeric,        # <auto> (0-)
       #IpcRecvBufferSize = Numeric,        # <auto> (0-)
       #HthIpcSendBufferSize = Numeric,     # <auto> (0-)
       #HthIpcRecvBufferSize = Numeric,     # <auto> (0-)
       #SvrIpcSendBufferSize = Numeric,     # <auto> (0-)
       #SvrIpcRecvBufferSize = Numeric,     # <auto> (0-)
       #MimetypesConfig = Literal[256],     # "config/mime.types", $ENV, R.PATH
       #DefaultMimetype = Literal[128],     # "text/html"
       #RPAFHeader = Literal[256],
       #TimeOutStatus = Numeric,            # 500 (511-599)
       #Expires = Literal[256],             # LIST[64]
       #LimitRequestBody = Numeric,         # 0 (0-)
       #LimitRequestFields = Numeric,       # 100 (0-)
       #LimitRequestFieldSize = Numeric,    # 8190 (0-16382)
       #LimitRequestLine = Numeric,         # 8190 (0-16382)
       #ServerTokens = Literal[256],        # "Off"
       #ServiceOrder = Literal[256],        # "uri,ext"
       #IPCBasePort = Numeric,              # 6666 (1-65535)
       #TcpGW = Literal[1024],              # LIST[64]
       #DefaultCharset = Literal[32],       # "Off"
       #JsvAccessName = String[32],
       #UseEtag = Boolean,                  # Y
       #TerminateCgiUponClientClose = Boolean, # Y
       #URLRewrite = Boolean,               # N
       #URLRewriteConfig = Literal[256],    # R.PATH
       #LogPerm = Numeric,                  # 0600 (0600-0777)
       #SysLog = Literal[256],              # "default_syslog"
       #KeepAliveErrorStatusCode = Literal[256], # (HTTP status code), LIST
       #MaxDechunkSize = Numeric,           # 10485760(10MB) (0-)
       #HtmlsForbidsWEBINF = Boolean,       # Y
       #HtlHthSendSocketBufferSize = Numeric, # 0 (0-)
       #HtlHthRecvSocketBufferSize = Numeric, # 0 (0-)
       #TraceAccessLog = Boolean,           # N
       #CheckURL = Boolean,                 # N
       #CheckURLFrom = Literal[32],         # "utf-8"
       #CheckURLTo = Literal[32]
       #CheckUrlJsvExcept = Boolean,        # N
       #SSIMaxDepth = Numeric,              # 16 (1-)
       #ForceCacheModificationCheck = Boolean, # N
       #DebugHTHMemory = Boolean,           # N
       #Headers = Literal[256],             # LIST[15]
       #DOSBlock = Boolean,                 # N
       #DOSBlockTableSize = Numeric,        # 3097 (1-)
       #DOSBlockPageCount = Numeric,        # 5 (0-)
       #DOSBlockPageInterval = Numeric,     # 1 (1-)
       #DOSBlockSiteCount = Numeric,        # 50 (0-)
       #DOSBlockSiteInterval = Numeric,     # 1 (1-)
       #DOSBlockPeriod = Numeric,           # 30 (1-)
       #DOSBlockWhiteList = Literal[256],   # LIST[256], MULTI
       #BindIPv6Only = Boolean,             # <OS default>
       #JsvListen = Literal[1024],          # LIST[10]
       #JsvSslListen = Literal[1024],       # LIST[10]
       #UpperDirRestrict = Boolean,         # N
       #CheckPingTimeoutStatus = Numeric,   # 503 (511-599)
       #IgnoreMissingColonErr = Boolean,    # N
       #HTTP2Flag = Boolean,                # N
       #IPCPortRCVTimeO = Numeric,          # 3000 (0-)
       #AllowEncodedSlashes = Boolean,      # N
       #ProxyProtocolRead = Boolean         # N

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

NODE 절 이름

  • 종류: String

  • 범위: 127자 이내

  • NODE 이름을 설정한다.

WebtobDir(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • WebtoB가 설치된 경로를 설정한다.

  • 환경변수를 사용할 수 있으며 $WEBTOBDIR로 설정하면 편리하다.

ShmKey(필수 항목)

  • 종류: Numeric

  • 범위: 32768 ~ 262143 / 0x8000 ~ 0x3FFFF

  • 공유 메모리 세그먼트(Shared Memory Segment)를 설정한다. WebtoB 내부 프로세스는 서로 정보를 공유하기 위해 공유 메모리를 사용한다.

  • 다음의 3개 key가 사용된다.

    • ShmKey

    • (ShmKey + 1)

    • (ShmKey + 2)

      공유 메모리 Key 값을 정의하기 전에 이 Key 값들이 다른 프로그램 또는 다른 업무에서 사용되는지 반드시 확인해야 한다. 그렇지 않으면 WebtoB가 기동될 때 이 프로그램과 충돌을 일으켜서 실행이 되지 않는다.

      UNIX/Linux의 "ipcs" 명령을 사용하여 공유 메모리를 확인할 수 있다. WebtoB를 강제로 종료시킨 경우 공유 메모리가 반환되지 않고 남아있을 경우에 한해 "ipcrm" 명령을 통해 수동으로 반환할 수 있다.

Nodename

  • 종류: Literal

  • 범위: 127자 이내, 환경변수($NODENAME) 사용 가능

  • 기본값: NODE 절 이름을 사용

  • 노드의 물리적인 이름으로 운영체제별로 확인된 이름을 정의한다.

    • UNIX/Linux : "uname -n" 혹은 "hostname" 명령

    • Windows : "hostname.exe" 명령

  • 설정한 노드 이름은 반드시 파일에 등록되어 있어야 한다.

    • UNIX/Linux : /etc/hosts

    • Windows : %SystemRoot%\system32\drivers\etc\hosts

User

  • 종류: String

  • 범위: 31자 이내

  • 설정된 계정 권한으로 WebtoB가 동작하도록 한다.

    UNIX/Linux 환경에서만 설정할 수 있으며, 시스템 보안을 위해 root가 아닌 일반 계정으로 설정할 것을 권장한다.

Group

  • 종류: String

  • 범위: 31자 이내

  • 설정된 그룹 권한으로 WebtoB가 동작하도록 한다.

    UNIX/Linux 환경에서만 설정할 수 있으며, 시스템 보안을 위해 root가 아닌 일반 그룹으로 설정할 것을 권장한다.

Hostname

  • 종류: Literal

  • 범위: 127자 이내

  • 기본값: 시스템 호스트 이름을 사용

  • 호스트 이름을 설정한다.

  • CGI/PHP에서 "SERVER_NAME" 변수로 사용하며, "Host" 필드가 없는 HTTP/1.0 요청을 처리할 때 이 설정값을 대신 사용한다.

DocRoot

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "docs/"

  • 서비스할 문서가 위치한 최상위 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

  • 다음 지시자를 사용해서 디렉터리 설정 패턴을 동적으로 설정할 수 있다.

    지시자 설명

    %p

    요청한 포트 번호로 치환한다.

    %n

    Hostname이나 IP 주소의 n번째 요소로 치환한다. 만약 n을 0으로 하면 전체 문자열이 사용된다. 마이너스 기호(-)가 앞에 오면 Hostname이나 IP 주소의 끝에서부터 센다. 플러스 기호(+)가 뒤에 오면 Hostname이나 IP 주소의 나머지가 사용된다.

    %n.m

    n번째 요소의 m번째 문자로 치환한다. 위와 같이 마이너스 기호(-)나 플러스 기호(+)가 붙을 수 있다.

    %%

    단일 퍼센트(%) 표시로 치환한다.

    지시자를 사용할 경우 DocRoot를 절대 경로로 설정해야 한다. 환경변수를 사용했을 경우 치환된 경로가 최종적으로 절대 경로일 경우에만 위 지시자를 사용할 수 있다.

SvrRoot

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "$WEBTOBDIR"

  • ALIAS 절의 RealPath를 상대 경로로 설정했을 경우 루트 디렉터리로 사용할 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

Method

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "GET,POST,HEAD,OPTIONS"

  • 처리할 수 있는 HTTP Request 메소드를 설정한다. 클라이언트로부터 받은 Request 메소드가 설정되어 있지 않으면 해당 요청은 처리되지 않는다.

  • GET, POST, HEAD, OPTIONS, CONNECT, TRACE, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE를 지원한다.

  • 특정 메소드를 서비스하지 않을 경우 "–OPTIONS"와 같이 하이픈(-)을 메소드 이름 앞에 설정한다.

Hth

  • 종류: Numeric

  • 범위: 1 ~ 100

  • 기본값: 1

  • HTH 프로세스의 수를 설정한다.

  • HTH 프로세스 하나가 처리할 수 있는 동시 접속자의 수가 제한되어 있는데, 이를 늘리는 경우 원하는 적당한 값을 설정한다.

  • HTH 프로세스 하나당 처리할 수 있는 사용자 수는 "wscfl" 명령의 출력 결과나 "wsboot"를 실행하는 경우 출력 결과를 통해 확인할 수 있다.

    $ wscfl -i http.m
    Current configuration:
            Number of client handler(HTH) = 4
            Supported maximum user per node = 32552
            Supported maximum user per handler = 8138

HthQTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 서버 큐에 대기하고 있는 사용자 요청의 타임아웃을 설정한다.

  • 사용자 요청이 많아 해당 요청을 처리할 서버 프로세스가 없을 경우 해당 요청은 서버 큐에서 요청을 처리할 서버 프로세스가 생길 때까지 기다리게 된다. 이때, 설정된 시간보다 오래 기다리고 있는 요청은 큐에서 빼고 "503 Service Unavailable"로 응답한다.

Port

  • 종류: Literal

  • 범위: 1023자 이내, 1 ~ 65535

  • 기본값: "80" 또는 "443" (SSLFlag를 'Y’로 설정하는 경우에는 "443"을 기본값으로 사용한다.)

  • 사용자가 접속할 수 있는 서비스 포트를 설정한다.

  • 콤마(,)로 구분하여 100개까지 설정 가능하다.

    Port와 Listen 항목이 같이 설정된 경우 Port 설정은 무시된다.

JsvPort

  • 종류: Numeric

  • 범위: 1 ~ 65535

  • 기본값: 9999

  • WebtoB와 JEUS를 연동하여 사용할 때 필요한 서비스 포트를 설정한다.

    WebtoB가 해당 포트를 열면 JEUS가 "WEBMain.xml"에 다음과 같은 설정을 통하여 연결한다.

    <?xml version="1.0"?>
    <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">
        <context-group>
            <group-name>MyGroup</group-name>
            <webserver-connection>
                <webtob-listener>
                    <listener-id>webtob1</listener-id>
                    <port>9900</port>
                    <output-buffer-size>8192</output-buffer-size>
                    <thread-pool>
                       <min>5</min>
                       <max>5</max>
                       <step>5</step>
                       <max-idle-time>30000</max-idle-time>
                    </thread-pool>
                    <webtob-address>__webtob_address__</webtob-address>
                    <registration-id>__webtob_server_name__</registration-id>
                    <disable-pipe>true</disable-pipe>
                </webtob-listener>
            </webserver-connection>
        </context-group>
    </web-container>

JsvSslPort

  • 종류: Numeric

  • 범위: 1 ~ 65535

  • WebtoB와 JEUS를 SSL 통신으로 연동하여 사용할 때 필요한 서비스 포트를 설정한다.

    WebtoB가 해당 포트를 열면 JEUS가 "WEBMain.xml"에 다음과 같은 설정을 통하여 연결한다.

    <?xml version="1.0"?>
    <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">
        <context-group>
            <group-name>MyGroup</group-name>
            <webserver-connection>
                <webtob-listener>
                    <listener-id>webtob1</listener-id>
                    <port>10443</port> <!-- JsvSslPort -->
                    <output-buffer-size>8192</output-buffer-size>
                    <thread-pool>
                       <min>5</min>
                       <max>5</max>
                       <step>5</step>
                       <max-idle-time>30000</max-idle-time>
                    </thread-pool>
                    <webtob-address>__webtob_address__</webtob-address>
                    <registration-id>__webtob_server_name__</registration-id>
                    <disable-pipe>true</disable-pipe>
                       <secure>
                          <!-- WebtoB *SSL절에 설정한 서버인증서를
                               Java KeyStore(JKS) 형식으로 만들어서 지정 -->
                          <trust-store-file-path>
                              __server_certstore.jks__
                          </trust-store-file-path>
                          <trust-store-file-password>
                              __xxxx__
                          </trust-store-file-password>
                       </secure>
                </webtob-listener>
            </webserver-connection>
        </context-group>
    </web-container>

JsvSslFlag

  • 종류: Boolean

  • 기본값: N

  • JEUS 연결을 위한 포트를 SSL/TLS 프로토콜을 사용하여 서비스할지 여부를 설정한다.

  • JsvSslName 설정으로 적용할 SSL 절 항목을 지정할 수 있다.

JsvSslName

  • 종류: String

  • 범위: 31자 이내

  • JsvSslFlag를 'Y’로 설정하는 경우 적용되며, 사용할 SSL 절 항목을 설정한다.

RacPort

  • 종류: Numeric

  • 범위: 1 ~ 65535

  • 기본값: 3333

  • WebtoB 관리 프로세스 중 하나인 wsracd 데몬이 서비스를 위해 사용하는 포트를 설정한다.

SSLFlag

  • 종류: Boolean

  • 기본값: N

  • 서비스 포트를 SSL/TLS 프로토콜을 사용하여 서비스할지 여부를 설정한다.

  • SSLName 설정으로 적용할 SSL 절 항목을 지정할 수 있다.

SSLName

  • 종류: String

  • 범위: 31자 이내

  • SSLFlag를 'Y’로 설정하는 경우 적용되며, 사용할 SSL 절 항목을 설정한다.

Timeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: 300

  • 사용자가 연결한 소켓에서 데이터를 읽거나 쓸 때 적용하는 타임아웃을 설정한다.

  • 사용자 요청을 처리하고 있을 때 적용되는 설정이며, 해당 시간 동안 사용자가 소켓에 데이터를 쓰지 않거나 소켓으로부터 데이터를 읽지 않는 경우 해당 소켓을 닫는다.

InitialConnectionTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 10

  • 사용자로부터의 첫 번째 요청을 기다리기 위한 타임아웃을 설정한다.

  • 사용자가 TCP 연결을 맺은 후 어떠한 요청도 보내지 않고 있을 때 적용되는 설정이며, 해당 시간 동안 사용자가 어떠한 요청도 보내지 않는다면 해당 소켓을 닫는다. 사용자가 요청을 보내고 있는 중이거나 이미 요청을 한 번 이상 보낸 경우는 해당 되지 않는다.

  • SSL를 연결할 때에도 적용되며, 해당 시간 동안 사용자가 SSL 연결을 완료하지 못하거나, SSL 연결을 완료하였더라도 어떠한 요청을 보내지 않는다면 해당 소켓을 닫는다.

  • 0으로 설정한 경우 사용자로부터의 첫 번째 요청을 기다리기 위한 시간을 제한하지 않는다.

RequestHeaderTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 60

  • HTTP Request Header를 기다리기 위한 타임아웃을 설정한다.

  • 사용자가 요청을 보내고 있을 때 적용되는 설정이며, 해당 시간 동안 사용자가 HTTP Request Header를 모두 보내지 않은 경우 "408 Request Timeout"으로 사용자에게 응답한다.

  • Pipelined Request인 경우(또는 앞선 요청에 대한 응답이 끝나지 않은 상태에서 다음 요청이 들어온 경우) 다음 요청에 대한 시작시간은 앞선 요청에 대한 응답이 끝난 직후로 한다.

  • 0으로 설정한 경우 사용자가 HTTP Request Header를 보내는 시간을 제한하지 않는다.

RequestBodyTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • HTTP Request Body가 있는 경우 Body를 기다리기 위한 타임아웃을 설정한다.

  • 사용자가 요청을 보내고 있을 때 적용되는 설정이며, 해당 시간 동안 사용자가 HTTP Request Body를 다 보내지 않은 경우 "408 Request Timeout"으로 사용자에게 응답한다.

  • 0으로 설정한 경우 사용자가 HTTP Request Body를 보내는 시간을 제한하지 않는다.

CacheKey

  • 종류: String

  • 범위: 31자 이내

  • 기본값: HOST_URI

  • 캐싱하기 위한 Key 값을 생성할 때 사용할 값을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    HOST_URI

    Request Header의 HOST 값과 Request URI를 사용하여 Key를 생성한다.

    동일한 REQUEST_URI라 하더라도 HTTP_HOST에 따라 VHOST가 달라진다. 이는 실제 경로가 달라질 수 있음을 의미한다.

    하지만 VHOST가 다르다 하더라도 실제 경로가 같다면 중복으로 캐싱되는 문제가 발생할 수 있다. 이는 동일한 요청에 대해서 HOST에 따라 다르게 캐싱되어져 있는 파일로 응답할 수 있음을 의미한다. VHOST별 DocRoot가 다르다면 이 값(HOST_URI)를 사용하는 것이 낫다. 실제 경로(Real Path)를 계산하지 않으므로 REAL_PATH 방식보다 응답 속도가 빠르다.

    JEUS에서 처리되거나 Reverse Proxy로 처리되는 응답은 실제 경로를 계산할 수 없으므로 모두 이 값을 사용한다.

    REAL_PATH

    요청 URI의 실제 경로를 사용하여 Key를 생성한다. 이 값은 SVRTYPE이 HTML인 경우에만 적용되고, HOST_URI를 사용할 경우 발생할 수 있는 문제점을 보완한다.

    HTTP_HOST가 다르더라도 동일한 요청한 파일의 실제 경로가 같을 수 있다. 이 같은 경우 HTTP_HOST에 상관없이 하나의 파일만 캐싱되므로 메모리가 불필요하게 사용되지 않는다. 실제 경로를 계산해야 하므로 HOST_URI를 Key로 사용하는 것보다 응답 속도가 조금 느릴 수 있다.

CacheEntry

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 128

  • HTH 캐시(Cache)의 Hash 테이블 키의 크기를 설정한다.

  • 0으로 설정하는 경우 응답을 캐시하지 않는다.

MaxCacheMemorySize

  • 종류: Numeric

  • 단위: Mbytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 100

  • HTH 프로세스가 캐시를 위해 사용하는 최대 메모리 사이즈를 설정한다. HTH별로 각각 캐시하기 때문에 해당 설정은 HTH 프로세스별로 각각 적용되는 값이다(모든 HTH 캐시가 사용하는 총 메모리 사이즈가 아니다).

  • 최대 메모리 사이즈를 넘는 경우 클라이언트가 잘 접근하지 않는 캐시 항목을 일정 부분 삭제하며 syslog를 통해 관리자에게 알려준다.

  • 0으로 설정하는 경우 응답을 캐시하지 않는다.

CacheMaxFileSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 8192

  • 캐시할 수 있는 응답(Response Header + Response Body) 하나의 최대 사이즈를 설정한다.

  • 0으로 설정하는 경우 응답을 캐시하지 않는다.

CacheMaxCompressSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 캐시할 수 있는 압축된 응답(Response Header + Response Body) 하나의 최대 사이즈를 설정한다.

  • 0으로 설정하는 경우 압축된 응답을 캐시하지 않는다.

CacheRefreshHtml

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 3600

  • 캐시된 응답 중 "Content-Type"이 "text/html"인 응답에 대한 유효시간을 설정한다(SVRTYPE이 HTML인 경우). 즉, "text/html" 응답은 캐시된 후 설정된 시간(초) 동안만 유효하다.

  • 0으로 설정하는 경우 캐시된 응답은 만료시간 없이 유효하다고 판단한다.

  • Conditional-GET 요청(또는 ForceCacheModificationCheck 설정에 의한 요청)은 캐시된 응답이 변경되었는지 체크한다. 응답이 변경된 경우 캐시된 응답은 삭제 후 변경된 응답으로 갱신된다.

CacheRefreshImage

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 3600

  • 캐시된 응답 중 "Content-Type"이 "text/html"이 아닌 응답에 대한 유효시간을 설정한다(SVRTYPE이 HTML인 경우). 즉, "text/html"이 아닌 응답은 캐시된 후 설정된 시간(초) 동안만 유효하다.

  • 0으로 설정하는 경우 캐시된 응답은 만료시간 없이 유효하다고 판단한다.

  • Conditional-GET 요청(또는 캐시된 응답은 만료시간 없이 유효하다고 판단한다 설정에 의한 요청)은 캐시된 응답이 변경되었는지 체크한다. 응답이 변경된 경우 캐시된 응답은 삭제 후 변경된 응답으로 갱신된다.

CacheRefreshJsv

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 3600

  • JEUS로부터 받은 응답을 캐시하게 되는 경우 캐시되는 응답의 유효시간을 계산하기 위한 값을 설정한다.

  • 클라이언트의 요청에 대해 WebtoB가 캐시된 내용에서 응답할 때는 캐시된 내용이 유효한지를 판단한다. 캐시된 내용이 유효한지 여부는 설정된 값(유효시간)을 기준으로 판단한다.

    • 첫 번째로 캐시되어질 당시의 Response Header에 Cache-Control:max-age 값이 있으면 max-age(초) 동안 유효하다고 설정한다.

    • 두 번째로 캐시되어질 당시의 Response Header에 Expires 값이 있으면 Expires(시간)까지 유효하다고 설정한다.

    • 세 번째로 Response Header에 위 두 가지 Header가 없이 캐시되는 경우 CacheRefreshJsv(초) 동안 유효하다고 설정한다. 즉, Response Header에 Cache-Control:max-age, Expires 값이 없는 경우 JEUS로부터 받은 응답이 캐시된 후 캐시된 내용은 CacheRefreshJsv(초) 동안 유효하다.

  • 유효시간을 설정할 때 우선순위는 다음의 순서로 적용된다.

    Cache-Control:max-age > Expires > CacheRefreshJsv
  • 0으로 설정하는 경우(Response Header 값의 Cache-Control:max-age, Expires 값이 없다면) 캐시된 응답은 만료시간 없이 유효하다고 판단한다. 즉, 0으로 설정하는 경우(Response Header 값의 Cache-Control:max-age, Expires 값이 없다면) Conditional-GET 요청에 의해 다시 JEUS로부터 변경된 응답을 받은 경우에만 refresh된다.

CacheRefreshRproxy

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 3600

  • Reverse Proxy로 처리된 응답을 캐시하게 되는 경우 캐시되는 응답의 유효시간을 계산하기 위한 값을 설정한다.

  • 클라이언트의 요청에 대해 WebtoB가 캐시된 내용에서 응답할 때는 캐시된 내용이 유효한지를 판단한다. 캐시된 내용이 유효한지 여부는 설정된 값(유효시간)을 기준으로 판단한다.

    • 첫 번째로 캐시되어질 당시의 Response Header에 Cache-Control:max-age 값이 있으면 max-age(초) 동안 유효하다고 설정한다.

    • 두 번째로 캐시되어질 당시의 Response Header에 Expires 값이 있으면 Expires(시간)까지 유효하다고 설정한다.

    • 세 번째로 Response Header에 위 두 가지 Header가 없이 캐시되는 경우 CacheRefreshRproxy(초) 동안 유효하다고 설정한다. 즉, Response Header에 Cache-Control:max-age, Expires 값이 없는 경우 Reverse Proxy로 처리된 응답이 캐시된 후 캐시된 내용은 CacheRefreshRproxy(초) 동안 유효하다.

  • 유효시간을 설정할 때 우선순위는 다음의 순서로 적용된다.

    Cache-Control:max-age > Expires > CacheRefreshRproxy
  • 0으로 설정하는 경우(Response Header 값의 Cache-Control:max-age, Expires 값이 없다면) 캐시된 응답은 만료시간 없이 유효하다고 판단한다. 즉, 0으로 설정하는 경우(Response Header 값의 Cache-Control:max-age, Expires 값이 없다면) Conditional-GET 요청에 의해 다시 Reverse Proxy로 처리되어 변경된 응답을 받은 경우에만 refresh된다.

DiskCache

  • 종류: String

  • 범위: 31자 이내

  • 사용할 DISK_CACHE 절 항목을 설정한다.

Keepalive

  • 종류: Boolean

  • 기본값: Y

  • Keepalive(HTTP persistent connection) 사용 여부를 결정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    사용자는 연결을 재사용하여 한 번의 연결로 여러 개의 요청을 처리할 수 있다.

    N

    사용자는 요청을 처리하기 위해 매번 소켓을 다시 연결해야 한다.

KeepaliveTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: 60

  • Keepalive를 유지하는 시간을 설정한다.

  • 사용자 요청 처리가 끝난 후 설정된 시간이 지나면 연결을 끊는다.

KeepaliveMax

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • Keepalive 요청 건수를 제한할 경우 설정한다.

  • 0으로 설정하는 경우 요청 건수를 제한하지 않는다.

MaxUser

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 라이선스 및 환경설정에 따라 다르며, 보통 7000 ~ 8000 정도이다.

  • 동시 접속 가능한 최대 사용자 수를 설정한다.

  • MaxUser 계산하는 방법은 다음과 같다.

    MaxUser= MIN(<운영체제의 프로세스당 openfile 제한>, <WebtoB의 FD 제한, 보통 16384>) *
             <HTH 수> - <내부 통신에 사용하는 FD 수, SERVER 절의 MaxProc의 총합 +
             HTH 수 + 2(WSM, HTL)>

AppDir

  • 종류: Literal

  • 범위: 255자 이내

  • WBAPI를 사용하여 작성된 서버의 실행 파일이 위치한 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

    SVRGROUP 절에 AppDir 설정이 있을 경우 SVRGROUP의 설정을 사용한다. 즉, NODE 절의 설정은 기본 AppDir을 의미한다.

PathDir

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "path/"

  • WebtoB를 운영하는 경우 내부 통신에 사용하는 named-pipe 및 각 프로세스들의 pid를 기록하는 "webtob.pid" 파일을 생성할 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

UsrLogDir

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "log/usrlog/"

  • 사용자 로그를 기록할 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

    UsrLogDir은 SERVER, SVRGROUP, NODE 절 순으로 먼저 설정된 값을 사용한다.

IconDir

  • 종류: Literal

  • 범위: 255자 이내

  • 디렉터리 인덱싱 기능에서 사용하는 아이콘이 위치한 경로를 설정한다.

  • 해당 설정값은 html 태그에서 사용하는 경로가 되기 때문에 슬래시( / )와 DocRoot를 기준으로 하는 상대 경로로 설정해야 한다.

UserDir

  • 종류: Literal

  • 범위: 255자 이내

  • 사용자별 디렉터리를 설정할 경우 사용한다.

  • 다음의 3가지로 설정할 수 있다.

    • <per-user-home-directory>

    • disabled [<user-list>]

    • enable [<user-list>]

  • 다음은 "~/public_html"을 사용자별 디렉터리로 설정하고, user1, user2, user3만 사용자별 디렉터리를 허용하도록 설정하는 경우의 예이다.

    *NODE
    mynode
        ...,
        UserDir = "public_html",
        UserDir = "disabled",    # globally disabled
        UserDir = "enable user1 user2 user3",
        ...

IndexName

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "index.html"

  • 디렉터리에 대한 요청을 하는 경우 기본으로 처리할 문서의 이름을 설정한다. 예를 들어 클라이언트가 보낸 요청이 "/somedir/"이고, 해당 경로가 디렉터리인 경우 "/somedir/index.html"을 서비스한다.

DirIndex

  • 종류: Literal

  • 범위: 31자 이내

  • 적용할 DIRINDEX 절의 이름을 설정한다.

    디렉터리 인덱싱 기능을 사용하기 위해서는 Options 설정에 "INDEX"를 추가해야 하며, DIRINDEX 절 설정을 통해 디렉터리 인덱싱 기능의 세부 동작 방식을 변경할 수 있다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "HTML,CGI,SSI,PHP,JSV,USER"

  • WebtoB가 제공하는 서비스와 기타 작동 방식에 대한 설정을 한다.

  • 특정 옵션을 사용하지 않을 경우 옵션 이름 앞에 하이픈(-)을 설정한다. 예를 들어 "-CGI"는 WebtoB가 CGI 서버를 사용하지 않겠다는 의미이다. 이때, CGI 서버가 필요한 클라이언트 요청은 거절된다.

  • 다음은 설정 가능한 옵션에 대한 설명이다.

    옵션 설명

    HTML

    HTML 서비스를 처리한다.

    CGI

    CGI 서버를 사용한다.

    PHP

    PHP 서버를 사용한다.

    SSI

    SSI 서버를 사용한다.

    JSV

    JSV(JEUS) 서버를 사용한다.

    INDEX

    클라이언트가 특정 파일 이름을 지정하지 않고 디렉터리에 요구를 보낼 때 디렉터리의 내용을 보여준다.

    예를 들어 "/docroot/dir/" 요청이 오면 해당 디렉터리에 존재하는 파일 이름과 정보가 클라이언트로 전달된다.

    ALL

    "HTML, CGI, PHP, SSI, JSV, INDEX"와 같다.

    StrictAuthorizationHdrFormat

    HTTP 요청에 대하여 AUTHENT 절 설정을 통해 인증처리를 하는 경우 Authorization header field의 포맷을 검사한다.

    HTTP 요청의 Authorization header field의 포맷이 HTTP 1.1에 정의된 포맷에 맞지 않거나, 인증타입이 "Basic"이나 "Digest"가 아닌 경우 요청을 보낸 사용자에게 에러로 응답한다.

    하이픈(-) 설정인 경우 Authorization header field의 포맷을 검사하여 인증타입이 없는 경우 인증타입을 "Basic"으로 간주하여 처리한다. 예를 들어 Authorization header field의 값이 인증타입 없이 "YXV0aDIucGFzczp0bWF4MTIzNA=="인 경우 하이픈(-) 설정을 했다면 인증타입을 "Basic"으로 간주하여 인증처리를 하고, 하이픈(-) 설정을 하지 않았다면 인증처리 없이 사용자에게 에러로 응답한다.

    IgnoreExpect100Continue

    HTTP/1.1을 요청할 때 요청 헤더에 "Expect: 100-continue"가 포함된 경우 이를 무시하도록 한다. 이 경우에는 "100 Continue"로 응답하지 않는다.

    ProcessIncompleteRequest

    클라이언트가 보낸 POST 요청의 body 데이터가 Content-Length만큼 다 도착하지 않았더라도, 클라이언트로부터 받은 body 데이터를 해당 서버로 다 보내도록 한다.

    ExcludeAllowHeaderOnError

    *NODE.Method 설정을 통해 disable 된 Method 요청에 대해서 error 응답이 나갈 경우, 응답에 "Allow" Header를 포함하지 않는다.

ErrorDocument

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP 에러 페이지를 사용자가 지정한 페이지로 대신 사용할 경우 ERRORDOCUMENT 절에 정의한 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

Logging

  • 종류: Literal

  • 범위: 255자 이내

  • 액세스 로그에 해당되는 LOGGING 절 이름을 설정한다.

  • 콤마(,)로 구분하여 4개까지 설정할 수 있다.

ErrorLog

  • 종류: Literal

  • 범위: 255자 이내

  • 에러 로그에 해당되는 LOGGING 절 이름을 설정한다.

Filter

  • 종류: Literal

  • 범위: 255자 이내

  • 사용할 FILTER 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

  • NODE 절 Filter를 설정하면 모든 요청에 대해 NODE 절 Filter가 적용된다.

Listen

  • 종류: Literal

  • 범위: 1023자 이내

  • 특정 IP에만 서비스 포트를 열고 싶을 경우 "<IP>:<Port>"로 설정한다.

  • 콤마(,)로 구분하여 100개까지 설정할 수 있다.

  • Port 설정보다 우선되며, Listen을 설정한 경우 Port 설정은 무시된다.

IPCPerm

  • 종류: Numeric

  • 범위: 0600 ~ 0700

  • 기본값: 0700

  • WebtoB 내부 프로세스(WSM, HTL, HTH, HTMLS, CGIS 등)의 접근권한을 설정한다.

    UNIX/Linux 환경에서만 사용할 수 있다.

ListenBacklog

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 511 (UNIX/Linux), <OS default> (Windows)

  • 서비스 포트 연결 큐(listen backlog)의 크기를 설정한다. 즉, 서비스 포트에서 동시에 처리할 수 있는 연결 시도 중인 소켓의 수를 제한하는 설정이다.

    netstat 명령에서 SYN_RECVD 상태인 소켓의 수와 관련이 있을 수 있다.

SendBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • TCP 전송 버퍼의 크기를 설정한다.

RecvBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • TCP 수신 버퍼의 크기를 설정한다.

IpcSendBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스들 간의 메시지 전송 버퍼의 크기를 설정한다.

IpcRecvBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스들 간의 메시지 수신 버퍼의 크기를 설정한다.

HthIpcSendBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스 중 HTH의 메시지 전송 버퍼의 크기를 따로 설정한다.

HthIpcRecvBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스 중 HTH의 메시지 수신 버퍼의 크기를 따로 설정한다.

SvrIpcSendBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스 중 서버 프로세스의 메시지 전송 버퍼의 크기를 따로 설정한다.

SvrIpcRecvBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: OS default

  • 내부 프로세스 중 서버 프로세스의 메시지 수신 버퍼의 크기를 따로 설정한다.

MimetypesConfig

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "config/mime.types"

  • MIME-Type과 확장자를 매핑하는 MIME-Type 설정 파일의 경로를 설정한다. 절대 경로와 $WEBTOBDIR의 상대 경로로 설정할 수 있다.

  • 아무 값도 설정하지 않은 경우(""로 설정)는 해당 기능을 사용하지 않는다.

  • MIME-Type 설정 파일은 다음과 같은 형식으로 설정한다.

    # '#'로 시작하는 줄은 주석으로 인식한다.
    # MIME-Type과 여기에 매핑하고자 하는 확장자를 공백으로 구분하여 설정한다.
    # 여러 확장자를 공백으로 구분하여 동시에 설정할 수 있다.
    # MIME-Type    Extensions
    text/html      html htm
    image/jpeg     jpeg jpg jpe

DefaultMimetype

  • 종류: Literal

  • 범위: 127자 이내

  • 기본값: "text/html"

  • MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultMimetype을 사용한다. 둘 다 설정되지 않았을 경우 VHOST 절 및 NODE 절 설정을 사용한다.

RPAFHeader

  • 종류: Literal

  • 범위: 255자 이내

  • proxy 등을 거치면서 변경된 Remote IP의 값을 원래 요청이 발생된 host 값으로 셋팅한다.

  • RPAFHeader 추가를 통해 사용자가 header 지정이 가능하다.

    (예: RPAFHeader = "X-Forwarded-For")
  • RPAFHeader로 설정된 header가 들어올 경우 header의 IP 값으로 Remote IP를 변경한다.

TimeoutStatus

  • 종류: Numeric

  • 범위: 511~599

  • 기본값 : 500

  • Time Out이 발생할 경우 해당 설정의 값으로 HTTP Status Code를 설정하여 회신한다.

Expires

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 EXPIRES 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

LimitRequestBody

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ LONG_MAX

  • 기본값: 0

  • 사용자 요청에서 HTTP Request Body 크기를 제한할 경우 설정한다.

  • HTTP Request Header 중 "Content-Length" 값을 기준으로 판단하며, 설정된 값보다 클 경우 "413 Request Entity Too Large"로 응답을 처리한다.

  • HTTP Request Body가 2G(Long type) 이상인 경우는 JEUS 7 이후 버전부터 처리 가능하다.

    Chunked-request의 경우 MaxDechunkSize 설정이 적용된다.

LimitRequestFields

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 100

  • 사용자 요청에서 HTTP Request Header field 수를 제한할 경우 설정한다.

  • 0으로 설정하는 경우 Header field의 수를 체크하지 않는다.

LimitRequestFieldSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ 16382

  • 기본값: 8190

  • 사용자 요청에서 HTTP Request Header field 각각의 크기를 제한할 경우 설정한다.

  • 10000bytes를 넘어가는 Request Header를 사용하기 위해서는 "WJPv2"를 이용해야 한다.

LimitRequestLine

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ 16382

  • 기본값: 8190

  • 사용자 요청에서 HTTP Request line 크기를 제한할 경우 설정한다.

  • 10000bytes를 넘어가는 Request line을 사용하기 위해서는 "WJPv2"를 이용해야 한다.

ServerTokens

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "Off"

  • 사용자에게 보내는 Response Header 중 "Server" 필드의 값을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Off

    Response Header에 "Server" 필드를 사용하지 않는다.

    Prod[uctOnly]

    "WebtoB"

    Min[imal]

    "WebtoB/4.1.3"

    OS

    (예: "WebtoB/4.1.3 LINUX-K2.6_x86 libc2.3")

    Full

    (예: "WebtoB/4.1.3 LINUX-K2.6_x86 libc2.3")

    Custom

    user-specified-name

ServiceOrder

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "uri,ext"

  • 사용자 요청을 처리할 서버와 서비스를 결정할 때 URI 절과 EXT 절의 우선순위를 결정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    uri, ext

    URI 절 설정을 먼저 확인하고 해당되는 설정이 없는 경우 EXT 절의 설정을 확인한다.

    ext, uri

    EXT 절 설정을 먼저 확인하고 해당되는 설정이 없는 경우 URI 절의 설정을 확인한다.

    URI 절과 EXT 절 모두 해당되지 않을 경우 기본 HTML 서비스(Worker Thread)에서 해당 요청을 처리한다.

IPCBasePort

  • 종류: Numeric

  • 범위: 1 ~ 65535

  • 기본값: 6666

  • Windows 환경에서만 적용되며, WebtoB 내부 프로세스 간 통신에 사용하는 base port를 설정한다.

    WSM은 (IPCBasePort + 1), HTL은 (IPCBasePort + 2), HTH는 (IPCBasePort + 4 + <hth-id>)를 사용한다.

TcpGW

  • 종류: Literal

  • 범위: 1024자 이내

  • 사용할 TCPGW 절 이름을 설정한다.

  • 콤마(,)로 구분하거나 여러 번 설정하여 최대 1024개까지 설정할 수 있다.

DefaultCharset

  • 종류: Literal

  • 범위: 32자 이내

  • 기본값: "Off"

  • HTTP Response Header 중 "Content-Type" 항목에 추가할 "charset=<value>"의 기본값을 정의한다.

    설정값 설명

    On

    "ISO-8859-1"을 기본값으로 사용한다.

    Off

    charset을 추가하지 않는다.

    <custom-charset>

    설정한 <custom-charset>을 기본값으로 사용한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultCharset을 사용한다. 둘 다 설정되지 않았을 경우 VHOST 및 NODE 절 설정을 사용한다.

JsvAccessName

  • 종류: String

  • 범위: 31자 이내

  • JsvPort에 대해 접근 제어를 하는 경우 적용할 ACCESS 절 이름을 설정한다.

UseETag

  • 종류: Boolean

  • 기본값: Y

  • 정적 파일 처리 중 ETag 사용을 결정한다.

  • N으로 설정하면 WebtoB는 클라이언트로 전달되는 응답에 ETag를 추가하지 않으며, 클라이언트의 요청에 포함된 ETag는 무시한다.

TerminateCgiUponClientClose

  • 종류: Boolean

  • 기본값: Y

  • CGI, PHP 요청 처리 중 클라이언트가 연결을 끊을 경우 실행 중인 CGI, PHP 프로세스를 강제 중단할지 여부를 결정한다.

  • N으로 설정하는 경우 클라이언트가 연결을 끊더라도 CGI, PHP 프로세스가 정상 종료될 때까지 기다린다.

URLRewrite

  • 종류: Boolean

  • 기본값: N

  • URLRewrite 기능을 사용할지 여부를 결정한다.

    이 기능을 사용하려면 URLRewriteConfig에 설정 파일의 경로를 지정해야 한다.

URLRewriteConfig

  • 종류: Literal

  • 범위: 255자 이내

  • URLRewirte 기능을 사용하기 위한 설정 파일의 경로를 지정한다. 자세한 설정은 URLRewrite를 참고한다.

LogPerm

  • 종류: Numeric

  • 범위: 0600 ~ 0777

  • 기본값: 0600

  • 로그 파일(시스템 로그, 액세스 로그, 에러 로그)의 접근 권한(file access permission)을 설정한다.

  • UNIX 계열 운영체제에서 사용하는 파일 접근 권한과 동일한 의미를 가진다. UNIX/Linux 환경에서만 사용할 수 있다.

SysLog

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "default_syslog"

  • 시스템 로그에 해당하는 LOGGING 절 이름을 설정한다.

  • 기본값인 "default_syslog"의 LOGGING 절 FileName 설정은 "log/system_%Y%%M%%D%.log"이다.

KeepAliveErrorStatusCode

  • 종류: Literal

  • 범위: 255자 이내

  • 에러 응답을 보낸 이후 사용자 연결을 유지(persistent connection, keep-alive)하는 경우 해당되는 HTTP Status Code를 설정한다.

  • 콤마(,)로 구분하여 여러 Status Code를 설정할 수 있다.

  • WebtoB가 사용자 요청에 대해 "304 Not Modified"를 제외한 3xx나 4xx 혹은 5xx HTTP Status Code로 응답할 경우 연결을 유지하지 않고 응답을 보낸 이후 연결을 종료한다.

  • 다음은 "302 Found"와 "404 Not Found" 응답을 보낸 후 WebtoB가 클라이언트의 연결을 종료하지 않고 유지하는 예제이다.

    *NODE
    mynode
        ...,
        KeepAliveErrorStatusCode = "302,404",
        ...

MaxDechunkSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 10485760

  • Chunked 요청을 처리하는 과정에서 de-chunk할 때 허용할 body의 최대 크기를 설정한다.

  • 설정된 값보다 chunk body가 큰 요청은 "500 Internal Server Error"로 응답한다.

HtmlsForbidsWEBINF

  • 종류: Boolean

  • 기본값: Y

  • 사용자 요청이 "/WEB-INF/"(case insensitive)를 포함한 요청일 경우 "403 Forbidden"으로 응답하는 기능의 사용 여부를 설정한다.

  • 이 기능은 서버와 연결된 애플리케이션 서버(예: JEUS)의 설정 파일들이 클라이언트로 노출되는 경우를 방지하는 역할을 한다.

HtlHthSendSocketBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 WebtoB가 설치된 장비의 OS 기본값을 의미한다.)

  • WebtoB 내부 프로세스인 HTL과 HTH가 통신할 때 사용되는 소켓의 버퍼(send buffer) 크기를 설정한다.

  • HP-UX 환경에서 sendmsg()의 버그로 인해 추가된 설정이며, UNIX 도메인 소켓(named-pipe)를 통해 sendmsg()를 호출할 때 사용하는 버퍼의 크기를 설정한다.

  • HtlHthRecvSocketBufferSize보다 작게 설정한다.

    일반적으로 사용자가 설정할 필요는 없다.

HtlHthRecvSocketBufferSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 WebtoB가 설치된 장비의 OS 기본값을 의미한다.)

  • WebtoB 내부 프로세스인 HTL과 HTH가 통신할 때 사용되는 소켓의 버퍼(receive buffer) 크기를 설정한다.

    일반적으로 사용자가 설정할 필요없다.

TraceAccessLog

  • 종류: Boolean

  • 기본값: N

  • Y로 설정하는 경우 액세스 로그에 요청 처리 과정에 대한 로그를 추가적으로 남긴다.

    Y로 설정하는 경우 평소보다 액세스 로그를 2~3배 더 남기게 되므로 주의해야 한다.

  • 다음은 저장되는 로그 항목에 대한 설명이다.

    로그 항목 설명

    [ARRIVED]

    요청을 받은 시점

    [SEND-TO-SERVER <type> <server-index>]

    요청을 서버에 전달한 시점

    [QUEUED <type> <server-name>]

    요청이 서버 큐에 들어간 시점

    [JSV SUSPEND FAILOVER]

    JSV 서버가 suspend되는 시점에 큐에 있던 요청을 다른 JSV 서버에게 할당한 경우

CheckURL

  • 종류: Boolean

  • 기본값: N

  • HTTP Request URL path의 Charset을 변환할지 여부를 결정한다.

  • Charset은 CCS(Coded Character Set) 와 CES(Character Encoding Scheme)의 조합으로, 한글은 일반적으로 EUC-KR이나 UTF-8을 사용한다.

  • Request URL path에 사용한 Charset과 서버에서 사용하는 Charset이 다를 경우 CheckURL을 사용해서 Charset을 변환하면 된다.

  • Y로 설정한 경우 CheckURLFrom과 CheckURLTo를 설정해야 한다.

  • VHOST 절과 함께 설정한 경우 VHOST 절의 설정을 우선한다.

CheckURLFrom

  • 종류: Literal

  • 범위: 31자 이내

  • 기본값: "utf-8"

  • HTTP Request URL path가 사용하는 Charset을 설정한다.

    "euc-kr"과 "utf-8"만 지원한다.

CheckURLTo

  • 종류: Literal

  • 범위: 31자 이내

  • 서버가 사용하는 Charset을 설정한다.

CheckUrlJsvExcept

  • 종류: Boolean

  • 기본값: N

  • JEUS로 포워딩하는 요청에 대하여 CheckURL 설정을 적용하지 않을지 여부를 결정한다.

  • Y로 설정한 경우 JEUS로 요청을 보낼 때에는 URI를 변환하지 않는다.

SSIMaxDepth

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 16

  • SSI(Server-side include) 요청을 처리하는 경우 nested-include의 depth 제한을 설정한다.

    SSI는 include directive를 사용해서 다른 SSI 자원을 포함할 수 있는데, include된 SSI 자원이 또 다시 include를 사용할 때 loop이 있을 가능성이 있으므로 중첩된 SSI 자원의 include depth를 적절히 설정하여 무한루프에 의한 서버 자원 낭비를 예방할 수 있다.

ForceCacheModificationCheck

  • 종류: Boolean

  • 기본값: N

  • Conditional-GET 요청이 아닐 경우에도 항상 캐시하고 있던 응답이 유효한지 체크할지 여부를 설정한다(SVRTYPE이 HTML인 경우).

  • HTH 캐시는 Conditional-GET 요청이 있을 경우에만 캐시하고 있던 응답이 유효한지 체크한다.

    Y로 설정할 경우 모든 요청에 대해 항상 캐시하고 있던 응답이 유효한지 체크하면서 stat() system call을 해야 하므로 성능이 저하될 수 있다.

DebugHTHMemory

  • 종류: Boolean

  • 기본값: N

  • HTH의 메모리 사용량을 모니터링할 경우 Y로 설정한다.

    "wsadmin -C hthmem" 명령을 사용하기 위해서는 반드시 Y로 설정해야 한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

DOSBlock

  • 종류: Boolean

  • 기본값: N

  • DoS 공격을 차단하는 설정을 사용하는 경우 Y로 설정한다.

DOSBlockTableSize

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 3097

  • DoS 공격 차단 기능에서 내부적으로 사용하는 Hash 테이블의 크기를 설정한다.

DOSBlockPageCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 5

  • DOSBlockPageInterval 설정시간 동안 같은 페이지를 설정된 값보다 더 많이 요청한 사용자 IP를 DOSBlockPeriod 동안 차단한다.

  • 0으로 설정하는 경우 같은 페이지에 대한 DoS 공격을 체크하지 않는다.

DOSBlockPageInterval

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 같은 페이지에 대한 DoS 공격을 판단하는 주기를 설정한다.

DOSBlockSiteCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 50

  • DOSBlockSiteInterval 설정시간 동안 사이트에 설정된 값보다 더 많이 요청한 사용자 IP를 DOSBlockPeriod 동안 차단한다.

  • 0으로 설정하는 경우 사이트 요청에 대한 DoS 공격을 체크하지 않는다.

DOSBlockSiteInterval

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 사이트에 대한 DoS 공격을 판단하는 주기를 설정한다.

DOSBlockPeriod

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: 30

  • DoS 공격으로 판단한 IP를 차단할 시간을 설정한다.

DOSBlockWhiteList

  • 종류: Literal

  • 범위: 255자 이내

  • DoS 공격 차단에서 제외한 IP를 설정한다. 앞단에 Proxy 서버를 사용할 경우 해당 서버의 IP를 설정한다.

  • 콤마(,)를 사용하여 여러 IP를 설정할 수 있으며, 설정할 IP가 많을 경우 여러 항목으로 나누어 설정할 수 있다.

  • 설정 IP는 총 256개까지 설정할 수 있다.

BindIPv6Only

  • 종류: Boolean

  • 기본값: <OS default>

  • IPv6 사용하는 경우 bind하는 주소의 범위를 설정한다. 설정하지 않았을 경우 OS의 기본 설정을 사용한다.

    설정값 설명

    Y

    IPv6를 사용하는 경우 IPv6 주소만 bind한다.

    N

    IPv6를 사용하는 경우 dual-stack으로 IPv4와 IPv6를 모두 같이 사용하도록 bind한다.

JsvListen

  • 종류: Literal

  • 범위: 1023자 이내

  • 특정 IP에만 JSV 서비스 포트를 열고 싶을 경우 "<IP>:<Port>"로 설정한다.

  • 콤마(,)로 구분하여 10개까지 설정할 수 있다.

  • JsvPort 설정보다 우선되며, JsvListen을 설정한 경우 JsvPort 설정은 무시된다.

JsvSslListen

  • 종류: Literal

  • 범위: 1023자 이내

  • 특정 IP에만 JSVSsl 서비스 포트를 열고 싶을 경우 "<IP>:<Port>"로 설정한다.

  • 콤마(,)로 구분하여 10개까지 설정할 수 있다.

  • JsvSslPort 설정보다 우선되며, JsvSslListen을 설정한 경우 JsvSslPort 설정은 무시된다.

UpperDirRestrict

  • 종류: Boolean

  • 기본값: N

  • Y로 설정할 경우 Request URI에 상위 디렉터리로 접근하려는 '../'가 포함되어 있으면 "403 Forbidden"으로 응답하도록 한다.

CheckPingTimeoutStatus

  • 종류: Numeric

  • 범위: 511~599

  • 기본값: 503

  • JSV 서버로 PING을 보내고 이에 대한 응답을 기다리던 중 TimeOut이 발생할 경우 해당 설정의 값으로 HTTP Status Code를 설정하여 회신한다.

IgnoreMissingColonErr

  • 종류: Boolean

  • 기본값: N

  • HTTP Request header가 "name:value" 형식을 지키지 않을 경우 에러 처리를 할지 여부를 결정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    설정할 경우 해당 header는 무시한다.

    N

    400 Bad Request 응답을 전송한다.

HTTP2Flag

  • 종류: Boolean

  • 기본값: N

  • Y로 설정할 경우 HTTP/2 Connection 및 Request를 허용한다.

  • SSL/TLS 프로토콜을 사용하는 경우에만 적용되기 때문에 HTTP/2를 사용하려는 NODE 절 또는 VHOST 절에는 SSLFlag를 설정해주어야 한다.

IPCPortRCVTimeO

  • 종류: Numeric

  • 단위: 밀리 초

  • 범위: 0 ~ INT_MAX (0일 경우 timeout을 설정안함)

  • 기본값: 3000 (3초)

  • Windows 환경에서만 적용되며, HTL이 WebtoB 내부 프로세스 간 통신 시 해당 시간 동안 소켓으로부터 데이터를 읽지 않는 경우 해당 소켓을 닫는다.

AllowEncodedSlashes

  • 종류: Boolean

  • 기본값: N

  • Y로 설정하면 클라이언트가 보낸 URL에 대해서 '/' 에 대한 URL 인코딩 형식인 '%2f’을 유효한 문자열로 판단한다.

ProxyProtocolRead

  • 종류: Boolean

  • 기본값: N

  • 클라이언트로 부터 proxy protocol 요청을 받을수 있도록한다.(proxy protocol v1)

  • Y로 설정했을때 클라이언트는 첫 요청에 반드시 proxy protocol header가 포함된 요청을 보내야 한다.

3.2. 예제

다음은 NODE 절을 설정한 예제이다.

*NODE
mynode
    WebtoBDir = "$WEBTOBDIR", # 환경변수 WEBTOBDIR을 참조
    SHMKEY = 0x8000,          # 0x를 앞에 붙여서 16진수로 설정 가능
    Docroot="docs/",          # "$WEBTOBDIR/docs/"와 동일한 의미
    Port = "8080",            # 주의! Numeric이 아닌 Literal type임
    JsvPort = 9900,
    HTH = 1,
    Logging = "access_log",
    ErrorLog = "error_log",
    SysLog = "system_log"

4. VHOST 절

Virtual Hosting이 필요한 경우 VHOST 절에 관련 환경을 설정한다.

Virtual Host 기능은 실제로는 하나의 WebtoB가 동작하지만 각기 다른 URL로 다른 문서를 제공하도록 하므로써 마치 여러 개의 서버가 서비스를 제공하는 것처럼 보이도록 하는 기능이다.

VHOST 절에는 다음과 같은 내용이 정의된다.

  • Virtual Host에 해당하는 노드 이름

  • Virtual Host에 해당하는 호스트 이름

  • 각 Virtual Host가 서비스할 HTML 문서들이 들어있는 최상위 디렉터리

또한 NODE 절에서 정의한 다음 내용은 재정의할 수 있다.

  • 각종 로그 메시지 디렉터리 경로명

  • 디렉터리 아이콘 경로명과 인덱싱 방식

NODE 절에서 이미 정의된 값들도 VHOST 절에서 재정의된 값으로 수정된다. Method, Expires, UsrLogDir, EnvFile, ErrorDocument, Logging Option 항목은 NODE 절에서 정의된 것과 같은 역할을 한다.

4.1. 설정 항목

다음은 VHOST 절의 환경설정 형식이다.

*VHOST
name    # String[32]
    Hostname = Literal[128],
   #HostAlias = Literal[1024],          # LIST
   #DocRoot = Literal[256],             # <*NODE's>, $ENV, R.PATH
   #Method = Literal[256],              # "GET,POST,HEAD,OPTIONS", PM.LIST
   #Port = Literal[1024],               # "80" or "443", 1 ~ 65535, LIST[100]
   #Listen = Literal[1024],             # LIST[100]
   #SslFlag = Boolean,                  # N
   #SslName = String[32],
   #IconDir = Literal[256],             # $ENV, R.PATH
   #UserDir = Literal[256],             # MULTI
   #EnvFile = String[256],              # $ENV, R.PATH
   #IndexName = Literal[256],           # "index.html", LIST
   #DirIndex = Literal[32],             # LIST
   #Options = Literal[256],             # "HTML,CGI,SSI,PHP,JSV", PM.LIST
   #ErrorDocument = Literal[256],       # LIST[64]
   #Logging = Literal[256],             # LIST[4]
   #ErrorLog = Literal[256],            # LIST
   #Filter = Literal[256],              # LIST[64]
   #DefaultMimetype = Literal[128],
   #Expires = Literal[256],             # LIST[64]
   #ServiceOrder = Literal[256],        # <*NODE's>
   #Keepalive = Boolean,                # <*NODE's>
   #KeepaliveTimeout = Numeric,         # <*NODE's> (1-)
   #KeepaliveMax = Numeric,             # <*NODE's> 0 (0-)
   #Timeout = Numeric,                  # <*NODE's> (1-)
   #DefaultCharset = Literal[32],
   #URLRewrite = Boolean,               # N
   #URLRewriteConfig = Literal[256],    # R.PATH
   #Headers = Literal[256]              # LIST[15]
   #CheckURL = Boolean,                 # N
   #CheckURLFrom = Literal[32],         # "utf-8"
   #CheckURLTo = Literal[32]
   #CheckUrlJsvExcept = Boolean,        # N
   #AllowEncodedSlashes = Boolean,      # N
   #ProxyProtocolRead = Boolean,        # N

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

VHOST 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 정의할 VHOST 절 이름을 설정한다.

  • VHOST는 64개까지 설정할 수 있다.

Hostname(필수 항목)

  • 종류: Literal

  • 범위: 127자 이내

  • Virtual Host에 접근할 때 사용자가 사용할 호스트 이름을 적어준다.

  • Name-based Virtual Hosting을 하는 경우 각각의 VHOST 절에서 호스트 이름을 다르게 설정하여 호스트 이름으로 Virtual Host가 구분한다.

HostAlias

  • 종류: Literal

  • 범위: 1023자 이내

  • Hostname 항목에 설정된 호스트 이외에 다른 호스트를 추가하는 경우 HostAlias로 등록하여 설정한다.

  • 콤마(,)로 구분하여 여러 개를 설정할 수 있으며, 애스터리스크(*) 및 물음표(?)를 사용할 수 있다. "*"는 모든 호스트를 의미한다.

DocRoot

  • 종류: Literal

  • 범위: 255자 이내

  • 정의된 Virtual Host가 서비스하게 될 HTML 문서가 있는 최상위 디렉터리 경로명을 설정한다. 설정하지 않으면, NODE 절의 DocRoot를 사용한다.

  • 다음 지시자를 사용해서 디렉터리 설정 패턴을 동적으로 설정할 수 있다.

    지시자 설명

    %p

    요청한 포트 번호로 치환한다.

    %n

    Hostname이나 IP 주소의 n번째 요소로 치환한다. 만약 n을 0으로 하면 전체 문자열이 사용된다. 마이너스 기호(-)가 앞에 오면 Hostname이나 IP 주소의 끝에서부터 센다. 플러스 기호(+)가 뒤에 오면 Hostname이나 IP 주소의 나머지가 사용된다.

    %n.m

    n번째 요소의 m번째 문자로 치환한다. 위와 같이 마이너스 기호(-)나 플러스 기호(+)가 붙을 수 있다.

    %%

    단일 퍼센트(%) 표시로 치환한다.

    지시자를 사용할 경우 DocRoot를 절대 경로로 설정해야 한다. 환경변수를 사용했을 경우 치환된 경로가 최종적으로 절대 경로일 경우에만 위 지시자를 사용할 수 있다.

Method

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "GET,POST,HEAD,OPTIONS"

  • 처리할 수 있는 HTTP Request 메소드를 설정한다. 클라이언트로부터 받은 Request 메소드가 설정되어 있지않으면, 해당 요청은 처리되지 않는다.

  • GET, POST, HEAD, OPTIONS, CONNECT, TRACE, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE를 지원한다.

  • 특정 메소드를 서비스하지 않을 경우 "–OPTIONS" 와 같이 하이픈(-)을 메소드 이름 앞에 설정한다.

Port

  • 종류: Literal

  • 범위: 1023자 이내, 1 ~ 65535

  • 기본값: "80" 또는 "443" (SSLFlag를 'Y’로 설정한 경우에는 "443"을 기본값으로 사용한다.)

  • 사용자가 접속할 수 있는 서비스 포트를 설정한다.

  • 콤마(,)로 구분하여 100개까지 설정 가능하다.

    Port와 Listen 항목이 같이 설정된 경우 Port 설정은 무시된다.

Listen

  • 종류: Literal

  • 범위: 1023자 이내

  • 특정 IP에만 서비스 포트를 열고 싶을 경우 "<IP>:<Port>"로 설정한다.

  • 콤마(,)로 구분하여 100개까지 설정 가능하다.

  • Port 항목에 설정된 값보다 우선되며, Listen을 설정한 경우 Port 설정은 무시된다.

SSLFlag

  • 종류: Boolean

  • 기본값: N

  • 서비스 포트를 SSL/TLS 프로토콜을 사용하여 서비스할지 여부를 설정한다.

  • SSLName 설정으로 적용할 SSL 절 항목을 지정할 수 있다.

SSLName

  • 종류: String

  • 범위: 31자 이내

  • SSLFlag를 'Y’로 설정하는 경우 적용되며, 사용할 SSL 절 항목을 설정한다.

IconDir

  • 종류: Literal

  • 범위: 255자 이내

  • 디렉터리 인덱싱 기능에서 사용하는 아이콘이 위치한 경로를 설정한다.

  • 해당 설정값은 html tag에서 사용하는 경로가 되기 때문에 슬래시( / )와 DocRoot를 기준으로 하는 상대 경로로 설정해야 한다.

UserDir

  • 종류: Literal

  • 범위: 255자 이내

  • 사용자별 디렉터리를 설정하는 경우 사용한다.

  • 다음의 3가지로 설정할 수 있다.

    • <per-user-home-directory>

    • disabled [<user-list>]

    • enable [<user-list>]

EnvFile

  • 종류: String

  • 범위: 255자 이내

  • 서버 프로세스를 기동하기 전에 환경변수를 전달할 경우 환경변수를 설정한 파일의 경로를 설정한다.

  • SVRGROUP 절에 EnvFile 항목이 설정된 경우 VHOST 절 설정은 무시되며, SVRGROUP 절 설정만 사용한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

    NODE 절의 EnvFile 항목 설정은 WebtoB 전체에 영향을 주지만, VHOST 및 SVRGROUP 절 설정은 서버 프로세스에만 적용된다.

IndexName

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "index.html"

  • 디렉터리에 대한 요청을 하는 경우 기본으로 처리할 문서의 이름을 설정한다.

DirIndex

  • 종류: Literal

  • 범위: 31자 이내

  • 적용할 DIRINDEX 절의 이름을 설정한다.

    디렉터리 인덱싱 기능을 사용하기 위해서는 Options 항목 설정에 "INDEX"를 추가해야 하며, DIRINDEX 절 설정을 통해 디렉터리 인덱싱 기능의 세부 동작 방식을 변경할 수 있다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "HTML,CGI,SSI,PHP,JSV,USER"

  • VHOST가 제공하는 서비스와 기타 작동방식에 대해 설정한다.

  • 특정 옵션을 사용하지 않을 경우 옵션 이름 앞에 하이픈(-)을 설정한다.

  • 다음은 설정 가능한 옵션에 대한 설명이다.

    옵션 설명

    HTML

    HTML 서비스를 처리한다.

    CGI

    CGI 서버를 사용한다.

    PHP

    PHP 서버를 사용한다.

    SSI

    SSI 서버를 사용한다.

    JSV

    JSV (JEUS) 서버를 사용한다.

    INDEX

    클라이언트가 특정 파일 이름을 지정하지 않고 디렉터리에 요구를 보낼 때 디렉터리의 내용을 보여준다. 예를 들어 "/docroot/dir/" 요청이 오는 경우 해당 디렉터리에 존재하는 파일 이름과 정보가 클라이언트로 전달된다.

    ALL

    "HTML, CGI, PHP, SSI, JSV, INDEX"와 같다.

ErrorDocument

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP 에러 페이지를 사용자가 지정한 페이지로 대신 사용할 경우 ERRORDOCUMENT 절에 정의한 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

Logging

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: <NODE 절 설정>

  • 액세스 로그에 해당되는 LOGGING 절 이름을 설정한다.

  • 콤마(,)로 구분하여 4개까지 설정할 수 있다.

ErrorLog

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: <NODE 절 설정>

  • 에러 로그에 해당되는 LOGGING 절 이름을 설정한다.

Filter

  • 종류: Literal

  • 범위: 255자 이내

  • 사용할 FILTER 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

DefaultMimetype

  • 종류: Literal

  • 범위: 127자 이내

  • 기본값: <NODE 절 설정>

  • MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultMimetype을 사용한다. 둘 다 설정되지 않았을 경우 VHOST 및 NODE 절 설정을 사용한다.

Expires

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 EXPIRES 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

ServiceOrder

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: <NODE 절 설정>

  • 사용자 요청을 처리할 서버와 서비스를 결정할 때 URI 절과 EXT 절의 우선순위를 결정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    uri,ext

    URI 절 설정을 먼저 확인하고, 해당되는 설정이 없는 경우 EXT 절 설정을 확인한다.

    ext,uri

    EXT 절 설정을 먼저 확인하고, 해당되는 설정이 없는 경우 URI 절 설정을 확인한다.

    URI 절과 EXT 절 모두 해당되지 않을 경우 기본 HTML 서비스에서 해당 요청을 처리한다.

Keepalive

  • 종류: Boolean

  • 기본값: <NODE 절 설정>

  • Keepalive(HTTP persistent connection) 사용 여부를 결정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    사용자는 연결을 재사용하여 한 번의 연결로 여러 개의 요청을 처리할 수 있다.

    N

    사용자는 요청을 처리하기 위해 매번 소켓을 다시 연결해야 한다.

KeepaliveTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: <NODE 절 설정>

  • Keepalive를 유지하는 시간을 설정한다.

  • 사용자 요청 처리가 끝난 후 설정된 시간이 지나면 연결을 끊는다.

KeepaliveMax

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: <NODE 절 설정>

  • Keepalive 요청 건수를 제한하는 경우 설정한다.

  • 0으로 설정하는 경우 요청 건수를 제한하지 않는다.

Timeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 1 ~ INT_MAX

  • 기본값: <NODE 절 설정>

  • 사용자가 연결한 소켓에서 데이터를 읽거나 쓸 때 적용하는 타임아웃을 설정한다.

  • 사용자 요청을 처리하고 있을 때 적용되는 설정이며, 해당 시간 동안 사용자가 소켓에 데이터를 쓰지 않거나 소켓으로부터 데이터를 읽지 않는 경우 해당 소켓을 닫는다.

DefaultCharset

  • 종류: Literal

  • 범위: 32자 이내

  • HTTP Response Header 중 "Content-Type" 항목에 추가할 "charset=<value>"의 기본값을 정의한다.

    설정값 설명

    On

    "ISO-8859-1"을 기본값으로 사용한다.

    Off

    charset을 추가하지 않는다.

    <custom-charset>

    설정한 "<custom-charset>"을 기본값으로 사용한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultCharset을 사용한다. 둘 다 설정되지 않은 경우 VHOST 절 및 NODE 절 설정을 사용한다.

URLRewrite

  • 종류: Boolean

  • 기본값: N

  • URLRewrite 기능을 사용할지 여부를 결정한다.

    이 기능을 사용하려면 URLRewriteConfig에 설정 파일의 경로를 지정해야 한다.

URLRewriteConfig

  • 종류: Literal

  • 범위: 255자 이내

  • URLRewirte 기능을 사용하기 위한 설정 파일의 경로를 지정한다. 자세한 설정은 URLRewrite를 참고한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

CheckURL

  • 종류: Boolean

  • 기본값: N

  • HTTP Request URL path의 Charset을 변환할지 여부를 결정한다.

  • Charset은 CCS(Coded Character Set)와 CES(Character Encoding Scheme)의 조합으로, 한글은 일반적으로 EUC-KR이나 UTF-8을 사용한다.

  • Request URL path에 사용한 Charset과 서버에서 사용하는 Charset이 다를 경우 CheckURL을 사용해서 Charset을 변환하면 된다.

  • Y로 설정한 경우 CheckURLFrom과 CheckURLTo를 설정해야 한다.

  • NODE 절과 함께 설정한 경우 VHOST 절의 설정을 우선한다.

    "euc-kr"과 "utf-8"만 지원한다.

CheckURLFrom

  • 종류: Literal

  • 범위: 31자 이내

  • 기본값: "utf-8"

  • HTTP Request URL path가 사용하는 Charset을 설정한다.

    "euc-kr"과 "utf-8"만 지원한다.

CheckURLTo

  • 종류: Literal

  • 범위: 31자 이내

  • 서버가 사용하는 Charset을 설정한다.

CheckUrlJsvExcept

  • 종류: Boolean

  • 기본값: N

  • JEUS로 포워딩하는 요청에 대하여 CheckURL 설정을 적용하지 않을지 여부를 결정한다.

  • Y로 설정한 경우 JEUS로 요청을 보낼 때에는 URI를 변환하지 않는다.

AllowEncodedSlashes

  • 종류: Boolean

  • 기본값: N

  • Y로 설정하면 클라이언트가 보낸 URL에 대해서 '/' 에 대한 URL 인코딩 형식인 '%2f’을 유효한 문자열로 판단한다.

ProxyProtocolRead

  • 종류: Boolean

  • 기본값: N

  • 클라이언트로 부터 proxy protocol 요청을 받을수 있도록한다.(proxy protocol v1)

  • Y로 설정했을때 클라이언트는 첫 요청에 반드시 proxy protocol header가 포함된 요청을 보내야 한다.

4.2. 예제

다음은 VHOST 절을 설정한 예제이다.

*VHOST
webtob
    Docroot = "docs/vhost_docs",
    Hostname = "webtob.tmax.co.kr",
    Port="80",
    IndexName = "welcome.html",
    Logging = "webtob_access",
    ErrorLog = "webtob_error"

5. HTH_THREAD 절

HTH_THREAD 절은 HTH 프로세스 내 Thread를 설정한다. HTH_THREAD 절은 반드시 설정해야 하며 하나만 설정한다.

5.1. 설정 항목

다음은 HTH_THREAD 절의 환경설정 형식이다.

*HTH_THREAD
name    # String[32]
        WorkerThreads = Numeric            # 8 (1-100)
       #ReadBufSize = Numeric,             # 1048576 (65536-)
       #SendfileThreads = Numeric,         # 4 (0-100)
       #SendfileThreshold = Numeric,       # 0 (0-)
       #AccessLogThread = Boolean,         # Y
       #HtmlsCompression = Literal[256],   # LIST[32], MULTI
       #HtmlsCompressionMinSize = Numeric, # 1 (1-),
       #Schedule = Literal[256]            #"FA"

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

HTH_THREAD 절 이름

  • 종류: String

  • 범위: 31자 이내

  • HTH_THREAD 이름을 설정한다.

WorkerThreads

  • 종류: Numeric

  • 범위: 1 ~ 100

  • 기본값: 8

  • Worker Thread의 수를 설정한다.

  • Worker Thread는 정적 파일 처리, SSL/TLS 처리(Handshake, 암호화, 복호화), 압축 처리, HTTP 인증 처리를 하는 Thread이다.

ReadBufSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 65536 ~ INT_MAX

  • 기본값: 1048576

  • Worker Thread에서 정적 파일을 읽기 위한 read buffer 크기를 설정한다.

SendfileThreads

  • 종류: Numeric

  • 범위: 0 ~ 100

  • 기본값: 4

  • Sendfile Thread의 수를 설정한다.

  • 정적 파일을 처리할 때 특정 OS에서만 지원하는 sendfile 기능을 사용하는 Thread이며, blocking으로 동작한다.

    이 기능은 UNIX/Linux 환경에서만 사용할 수 있다.

SendFileThreshold

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 요청한 파일의 크기가 설정된 값보다 크면 sendfile을 사용한다.

  • 0으로 설정하는 경우 sendfile 기능을 사용하지 않는다.

    이 기능은 UNIX/Linux 환경에서만 사용할 수 있다.

AccessLogThread

  • 종류: Boolean

  • 기본값: Y

  • HTH에서 사용자 요청 처리후 접근 기록을 남기기 위한 Thread 사용 여부를 설정한다.

  • 이 기능을 사용하지 않는 경우 WSM에서 접근 기록을 남기게 된다.

    이 기능은 UNIX/Linux 환경에서만 사용할 수 있다.

HtmlsCompression

  • 종류: Literal

  • 범위: 255자 이내

  • Worker Thread에서 처리하는 정적 파일에 대한 응답에 대해 압축할 대상을 결정하는 설정이다.

  • 압축할 MIME-Type을 설정하며, 응답의 Content-Type이 사용된다. 해당되는 응답은 클라이언트로 전송되기 전에 Worker Thread에서 GZIP을 사용해서 압축된다.

  • 콤마(,)로 구분하여 최대 32개까지 여러 MIME-Type을 지정할 수 있다.

  • 압축기능을 사용할 경우 네트워크 트래픽을 줄일 수 있지만, 서버의 성능은 저하될 수 있다.

    압축률이 낮은 파일(zip 같은 압축 파일이나 jpeg 같은 압축 이미지 등)을 압축할 경우 서버에 부하만 주기 때문에 해당 MIME-Type이 압축 대상이 되지 않도록 주의해야 한다.

    압축 기능은 HTTP Request Header 중 Accept-Encoding에 GZIP이나 deflate로 지정된 요청에 대해서만 적용된다.

HtmlsCompressionMinSize

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 압축 설정을 통해 응답을 압축하는 경우 응답의 최소 크기를 설정한다.

  • 요청한 파일의 크기가 설정된 값보다 크면 응답을 압축한다.

Schedule

  • 종류: Literal

  • 범위: RR | FA

  • 기본값: FA

  • Worker Thread를 여러 개 설정하였을 경우 요청을 처리할 Thread를 지정하는 방법을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    RR

    Round Robin 방식으로 순차적으로 Worker Thread에 요청을 할당한다.

    FA

    First Assign 방식으로 현재 가장 적은 일을 처리하고 있는 Worker Thread에 요청을 할당한다.

5.2. 예제

다음은 HTH_THREAD 절을 설정한 예제이다.

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

6. SVRGROUP 절

WebtoB를 통해 응용 서버 프로세스를 접근하는 경우 서버 프로세스의 논리적인 연관성에 따라 이들을 그룹으로 관리할 필요가 있다. SVRGROUP 절에서는 이러한 그룹에 대한 환경설정을 한다.

SVRGROUP 절에는 다음과 같은 내용이 정의된다.

  • 서버 그룹이 속한 호스트 이름

  • 서버 그룹이 제공하는 서비스 타입

이 밖에 NODE 절이나 VHOST 절에서 정의한 내용이 서버 그룹에 따라 재정의할 수 있으며, 데이터베이스를 사용하는 경우 데이터베이스 접근과 관련된 정보들이 정의될 수 있다.

6.1. 설정 항목

다음은 SVRGROUP 절의 환경설정 형식이다.

*SVRGROUP
name    # String[32]
    SvrType = String[32],
   #VhostName = String[1024],           # LIST[64], MULTI
   #AppDir = Literal[256],              # <*NODE/VHOST's>, $ENV, R.PATH
   #UsrLogDir = Literal[256],           # $ENV, R.PATH
   #EnvFile = String[256],              # $ENV, R.PATH
   #AuthentName = String[32],
   #Logging = Literal[256],             # LIST[4]
   #ScriptLoc = Literal[256],
   #ScriptArgs = Literal[256],
   #Filter = Literal[256],              # LIST[64]
   #DefaultMimetype = Literal[128],
   #Expires = Literal[256],             # LIST[64]
   #DefaultCharset = Literal[32],
   #LBServers = Literal[256],           # LIST[32]
   #LBType = String[16],                # Dynamic, Dynamic | Static
   #LBBackup = Literal[32],
   #Headers = Literal[256],             # LIST[15]
   #UserAgentRegExp = String[512]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

SVRGROUP 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 서버 그룹의 이름을 설정한다.

  • 서버 그룹에 대한 논리적인 이름으로써 SVRGROUP 절 내에서 유일(unique)한 값이어야 한다.

SvrType(필수 항목)

  • 종류: String

  • 범위: 31자 이내

  • 서버 그룹에서 서비스할 서버 타입을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    HTML

    정적 파일 요청을 서비스하는 서버 타입이다.

    CGI

    CGI 요청을 서비스하는 서버 타입이다.

    PHP

    PHP 요청을 서비스하는 서버 타입이다.

    SSI

    SSI 요청을 서비스하는 서버 타입이다.

    JSV

    JEUS와 연동하여 JSP, servlet 등의 요청을 서비스하는 서버 타입이다.

    WEBSTD

    WBAPI로 작성된 서버의 요청을 서비스하는 서버 타입이다.

VhostName

  • 종류: Literal

  • 범위: 1023자 이내

  • 서비스할 VHOST 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정 가능하다.

AppDir

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: <해당하는 NODE 혹은 VHOST 절 설정>

  • WBAPI로 작성된 사용자 애플리케이션이 위치한 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정하는 경우 $WEBTOBDIR로부터의 절대 경로로 변환하여 설정된다.

UsrLogDir

  • 종류: Literal

  • 범위: 255자 이내

  • 사용자 로그를 기록할 경로를 설정한다.

  • Clopt 설정의 "-e <stderr-log-file> -o <stdout-log-file>" 옵션과 관련이 있으며, 설정된 경로에 해당 이름으로 로그를 남긴다.

    UsrLogDir은 SERVER, SVRGROUP, NODE 절 순으로 먼저 설정된 값을 사용한다.

EnvFile

  • 종류: String

  • 범위: 255자 이내

  • 서버 프로세스를 기동하기 전에 환경변수를 전달할 경우 환경변수를 설정한 파일의 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

    NODE 절의 EnvFile 설정은 WebtoB 전체에 영향을 주지만, VHOST 및 SVRGROUP 절 설정은 서버 프로세스에만 적용된다.

AuthentName

  • 종류: String

  • 범위: 31자 이내

  • 적용할 AUTHENT 절 이름을 설정한다.

    AuthentName 설정은 DIRECTORY, URI, EXT, SVRGROUP 절에 모두 설정 가능하며, 순서대로 먼저 설정된 절의 값이 적용된다.

Logging

  • 종류: Literal

  • 범위: 255자 이내

  • 액세스 로그에 해당되는 LOGGING 절 이름을 설정한다.

  • 콤마(,)로 구분하여 4개까지 설정할 수 있다.

ScriptLoc

  • 종류: Literal

  • 범위: 255자 이내

  • PHP에 관련된 서버 그룹을 설정할 경우 PHP 실행 모듈이 실제로 존재하는 곳의 경로를 설정한다.

  • $WEBTOBDIR을 기준으로 상대 경로를 설정한다.

    PHP 실행 모듈 중 "php-cgi"에 해당되는 경로를 설정하고, UNIX/Linux 환경에서는 symbolic link를 사용하여 $WEBTOBDIR 아래 경로를 사용한다.

ScriptArgs

  • 종류: Literal

  • 범위: 255자 이내

  • PHP에 관련된 서버 그룹을 설정할 경우 PHP 실행 모듈에 대한 파라미터를 설정한다.

  • 설정된 값을 그대로 파라미터로 적용하므로 옵션에 경로가 들어간다면 절대 경로를 사용해야 한다.

Filter

  • 종류: Literal

  • 범위: 255자 이내

  • 사용할 FILTER 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

DefaultMimetype

  • 종류: Literal

  • 범위: 127자 이내

  • MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultMimetype을 사용한다. 둘 다 설정되지 않았을 경우 VHOST 및 NODE 절 설정을 사용한다.

Expires

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 EXPIRES 절 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

DefaultCharset

  • 종류: Literal

  • 범위: 32자 이내

  • HTTP Response Header 중 "Content-Type" 항목에 추가할 "charset=<value>"의 기본값을 정의한다.

    설정 값 설명

    On

    "ISO-8859-1"을 기본값으로 사용한다.

    Off

    Charset을 추가하지 않는다.

    <custom-charset>

    설정한 "<custom-charset>"을 기본값으로 사용한다.

    DIRECTORY 절에 설정된 경우 우선 사용하며, 다음으로 SVRGROUP 절에 설정된 DefaultCharset을 사용한다. 둘 다 설정되지 않았을 경우 VHOST 및 NODE 절 설정을 사용한다.

LBServers

  • 종류: Literal

  • 범위: 255자 이내

  • 서버들 사이에 부하 분산을 설정하고자 할 경우 원하는 서버의 목록을 설정한다.

  • 콤마(,)로 구분하여 32개까지 설정할 수 있다.

LBType

  • 종류: String

  • 범위: 15자 이내

  • 기본값: Dynamic

  • LBServers를 설정한 경우 서버들 간의 부하를 분배하는 방법을 설정한다.

    설정 값 설명

    Dynamic

    기본적으로 Round Robin으로 분배하지만, 서버 큐에 대기 중인 요청의 수가 해당 서버의 현재 서버 프로세스 수 이상인 경우는 제외하고 분배한다. 만약 모든 서버의 서버 큐에 요청이 쌓여 있는 경우에는 다시 Round Robin으로 분배한다.

    Static

    SERVER 절의 LBFactor에 비례하여 서버가 요청을 처리하도록 분배한다.

LBBackup

  • 종류: Literal

  • 범위: 31자 이내

  • LBServers로 설정한 서버들이 모두 READY 상태가 아닐 경우 백업 용도로 사용할 서버를 설정한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

UserAgentRegExp

  • 종류: String

  • 범위: 511자 이내

  • USER-AGENT에 따라 요청을 보낼 JEUS 서버를 설정한다.

  • 해당 Agent로부터 들어온 요청은 해당 서버 그룹에 포함된 서버가 처리한다.

6.2. 예제

다음은 SVRGROUP 절을 설정한 예제이다.

*SVRGROUP
htmlg
    SvrType = HTML
phpg
    SvrTYpe = PHP,
    ScriptLoc = "bin/php-cgi"
    ScriptArgs = "-c /php_conf/php.ini"
cgig
    SvrType = CGI
ssig
    SvrType = SSI
jsvg
    SvrType = JSV,
    LBServers = "jsv1, jsv2, jsv3",
    LBType = Static,
    LBBackup = "jsv4"
wbapg
    SvrType = WEBSTD

7. SERVER 절

SERVER 절에서는 실질적으로 제공하는 서비스들을 등록한다. WebtoB는 등록된 서비스만을 처리하기 때문에 새로운 서버 프로그램이 추가되는 경우 서버의 환경 파일에 반드시 설정해야 한다.

WebtoB가 제공하는 대부분의 서비스는 SERVER 절에서 등록이 가능하며 비즈니스 로직을 WebtoB를 통해 직접 호출하는 경우에만 SERVICE 절의 설정이 필요하다. 각각의 서버는 위의 SVRGROUP 절에 정의된 서비스 종류에 따라 CGI, JSV 등으로 구분되며 서버 그룹 이름과 프로세스의 가능한 개수 등을 설정한다.

HTH의 Worker Thread에서 HTML 서비스를 모두 처리하므로 HTML을 위한 서버는 따로 설정하지 않는다.

7.1. 설정 항목

다음은 SERVER 절의 환경설정 형식이다.

*SERVER
name    # String[32]
    SvgName = String[32],
   #Clopt = Literal[256],
   #MinProc = Numeric,                  # 1 (1-)
   #MaxProc = Numeric,                  # <MinProc> (1-)
   #WSProc = Numeric,                   # 0 (0-)
   #UsrLogDir = Literal[256],           # $ENV, R.PATH
   #MaxQCount = Numeric,                # 0 (0-)
   #MaxQUrl = Literal[256],
   #MaxQUrlRedirectStatus = String[8],
   #ASQCount = Numeric,                 # 0 (0-)
   #FlowControl = Numeric,              # 50 (1-)
   #MaxRestart = Numeric,               # 20 (0-)
   #SvrCPC = Numeric,                   # 1 (1-)
   #SvrType = String[32],
   #HttpOutBufSize = Numeric,           # 8192 (0-)
   #HttpInBufSize = Numeric,            # 8192 (0-)
   #MaxRequests = Numeric,              # 0 (0-)
   #SvrChkTIme = Numeric,               # 0 (0-)
   #Schedule = String[256],             # "RR"
   #Options = Literal[256],             # PM.LIST
   #SessionIdCookieKey = Literal[256],
   #SessionIdUrlKey = Literal[256],
   #FlexibleStickySessionRouting = Boolean,  # N
   #Compression = Literal[256],         # LIST[32], MULTI
   #CompressionMinSize = Numeric,       # 1 (1-)
   #VhostName = String[1024],           # LIST[64], MULTI
   #FcgiInitEnv = Literal[256],         # MULTI[32]
   #FcgiKillTimeout = Numeric,          # 0 (0-)
   #FcgiKillMaxRequest = Numeric,       # 0 (0-)
   #Headers = Literal[256],             # LIST[15]
   #LBFactor = Numeric,                 # 1 (1-1000)
   #MaxJengineCount = Numeric,          # 32 (0-)
   #RequestLevelPing = Boolean,         # N
   #RequestLevelPingTimeout = Numeric,  # 3 (0-)
   #RequestLevelPingRetryCount = Numeric # 0 (0-)

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

SERVER 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 하나의 서버를 의미하는 이름으로써 일반적으로 서버 이름은 유일(Unique)해야 한다. 하나의 서버 이름은 SERVER 절에 단 한 번만 정의되어야 한다. 같은 이름을 중복하여 이용하면 환경 파일의 컴파일될 때 에러가 발생하게 된다.

    서버 타입이 JSV인 경우 서버 이름은 15자 이하를 사용해야 한다. 더 긴 이름을 설정할 경우 JEUS와 통신이 불가능하다.

SvgName(필수 항목)

  • 종류: String

  • 범위: 31자 이내

  • 서버가 속해 있는 서버 그룹을 설정한다.

  • 설정된 값은 반드시 SVRGROUP 절에서 정의된 서버 그룹 이름이어야 한다.

  • 서버와 SVRGROUP 절의 연결을 통해서 서버가 어떤 노드에서 동작할 것인지, 어떤 리소스 매니저(데이터베이스)를 사용하는지 알 수 있다. 해당 리소스 매니저를 열 때 필요한 파라미터를 넘겨 줄 수 있다.

Clopt

  • 종류: Literal

  • 범위: 255자 이내

  • 서버 프로세스가 기동될 때 그 서버 프로세스로 전달되는 명령어 옵션이 있을 경우 설정한다.

  • 설정된 옵션들 중에 ‘--’ 이전에 지정된 옵션들은 시스템에서 사용하고, 그 이후에 지정된 옵션들은 사용자가 자유롭게 사용할 수 있다.

MinProc

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 기본적으로 기동될 서버 프로세스의 개수를 설정한다.

  • 기존의 클라이언트/서버 모델에서는 클라이언트당 서버 프로세스가 하나씩 기동되는 형식으로 동작하였으나 WebtoB는 그 보다 효율적인 구조를 가지고 있다. WebtoB에서는 서버 프로세스의 수는 일정하게 유지하고 하나의 서버 프로세스가 여러 개의 클라이언트 요구를 서비스할 수 있다.

  • MinProc는 서버 프로세스의 개수를 조절하는 것으로써 운영 경험을 통해 적절한 개수를 지정할 필요가 있다. MinProc는 서버 프로세스의 최소 개수를 나타내는 것으로 처음 WebtoB가 기동될 때 시작되는 프로세스의 수와 같다.

MaxProc

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: <MinProc>

  • MinProc를 포함하여 추가적으로 기동시킬 수 있는 프로세스의 최대 개수를 설정한다.

  • 서버 프로세스는 기본적으로 WebtoB가 기동되는 시점에 설정된 MinProc 개수만큼 기동되고, 부하가 높아지는 경우 MaxProc 개수까지 서버 프로세스가 자동적으로 기동된다.

  • Clopt 설정의 "-e <stderr-log-file> -o <stdout-log-file>" 옵션과 관련이 있으며, 설정된 경로에 해당 이름으로 로그를 남긴다.

WSProc

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값 : 0

  • WebSocket 요청에 대해 WebtoB와 JEUS 간의 Reverse Connection 방식을 사용하기 위한 연결을 설정한다.

  • JSV 타입의 서버인 경우에만 설정 가능하다.

  • 기본값은 0이며 설정하지 않을 경우 Reverse Conncetion 방식으로 WebSocket을 사용할 수 없다. (Reverse Proxy 방식으로 동작 가능)

  • WebSocket을 지원하는 JEUS의 ms 당 1개씩 설정하여 사용한다.

UsrLogDir

  • 종류: Literal

  • 범위: 255자 이내

  • 사용자 로그를 기록할 경로를 설정한다.

  • Clopt 설정의 "-e <stderr-log-file> -o <stdout-log-file>" 옵션과 관련이 있으며, 설정된 경로에 해당 이름으로 로그를 남긴다.

    UsrLogDir은 SERVER, SVRGROUP, NODE 절 순서로 먼저 설정된 값을 사용한다.

MaxQCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 클라이언트의 요청이 엄청난 폭주를 이루어 정상적인 서비스 처리가 어려울 경우 계속되는 서비스 요청을 무시할 필요가 있다. 큐에 쌓인 클라이언트의 요구 수가 어느 정도 이상이 되면 새로 도착한 요구는 큐에 쌓이지 않고 클라이언트에 즉시 에러로 응답한다.

  • MaxQCount는 큐의 쌓이는 요구 한계를 설정한다. MaxQCount에 설정한 값만큼 사용자 요구를 저장하여 기다리게 한다. 만약 이 값이 크다면 사용자의 요구를 문제 없이 처리할 수 있다는 장점이 있으나 너무 크게 하면 사용자에게 응답을 너무 늦게 반환할 수도 있다는 문제점이 있다.

MaxQUrl

  • 종류: Literal

  • 범위: 255자 이내

  • 서버 큐가 다 찼을 경우 대신 서비스할 페이지를 설정한다.

MaxQUrlRedirectStatus

  • 종류: String

  • 범위: 7자 이내

  • MaxQUrl 설정하는 경우 Redirect Status Code를 설정한다.

  • 다음과 같은 값을 사용할 수 있다.

    설정값 별칭 설명

    301

    permanent

    "301 Moved Permanently"로 응답한다.

    302

    found

    "302 Found"로 응답한다.

    303

    seeother

    "303 See Other"로 응답한다.

    305

    useproxy

    "305 Use Proxy"로 응답한다.

    307

    temp

    "307 Temporary Redirect"로 응답한다.

    410

    gone

    "410 Gone"으로 응답한다.

ASQCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 자동으로 서버 프로세스를 추가 기동하기 위한 조건으로 큐에 쌓여진 요구 개수를 설정한다. 큐에 설정된 이상의 것이 쌓이게 되면 MinProc에서 MaxProc에 설정된 수만큼 차례대로 증가하게 된다.

  • 0으로 설정된 경우 서버 프로세스의 수는 변동없이 MinProc에 설정된 수를 유지한다.

FlowControl

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 50

  • HTH가 서버로부터 응답을 읽기위해 사용하는 버퍼의 크기를 설정할 때 Flow control하기 위한 단위를 설정한다. Flow control 버퍼의 크기는 아래와 같이 설정된다.

    Flow control 버퍼 크기 = FlowControl * HttpOutBufSize
  • 0으로 설정된 경우 기본값으로 적용된다.

MaxRestart

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 20

  • 서버 프로세스의 최대 재시작 가능 횟수를 설정한다.

SvrCPC

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 특수한 서버 프로세스에서 HTH 프로세스와 병렬 통신 채널 수를 설정한다.

  • 서버 프로세스의 처리량이 많아 하나의 채널로는 처리 속도가 저하될 때 병렬 통신으로 처리 속도를 증가시킬 수 있다.

HttpOutBufSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 8192

  • 서버가 사용자의 Request에 대한 응답을 보낼 때 사용하는 버퍼의 크기를 설정한다.

  • 0으로 설정하거나 16777216(16MB)보다 크게 설정할 경우 서버 프로세스에서는 16777216(16MB)를 사용하고, HTH에서는 Flow control 버퍼를 만들기 위해서 기본값인 8192를 사용한다.

HttpInBufSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 8192

  • 서버가 사용자의 Request를 받을 때 사용하는 버퍼의 크기를 설정한다.

  • 0으로 설정하거나 16777216(16MB)보다 크게 설정할 경우 16777216(16MB)를 사용한다.

MaxRequests

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 무제한을 의미한다.)

  • SERVER 절에 각 서버에 정의된 MaxRequests 값에 따라 각 서버의 프로세서들이 그 값만큼의 사용자 Request를 처리한 후 자동으로 재기동된다.

  • WBAPI로 작성된 WEBSTD 서버인 경우 AP에 메모리 관련 버그가 있는 경우 유용하다.

  • 서비스가 많은 경우 사용자 서비스의 연속성을 위해 MaxRequests보다 많은 Request를 처리한 후 재기동될 수도 있다.

SvrChkTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (JSV인 경우 60)

  • 서버와의 연결이 정상인지 확인하기 위해 체크하는 시간을 설정하며 방화벽을 사이에 두고 연결된 JEUS와의 연결을 확인하는 데 사용된다.

  • SvrChkTime을 설정하고 서비스 요청이 없는 Ready 상태의 커넥션에 대해서 연속된 2회의 SvrChkTime에 의한 KeepAlive 요청에도 응답이 없으면 해당 커넥션에 이상이 발생했다고 인식하고 해당 커넥션을 단절하여 서비스 분배에서 제외한다.

Schedule

  • 종류: String

  • 범위: RR | FA

  • 기본값: RR

  • 클라이언트로부터의 Request를 처리할 때 해당 Request를 받아서 처리할 서버 프로세스를 지정하는 방법을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    RR

    Round Robin 방식으로 Idle한 서버 프로세스에 요청을 할당한다.

    FA

    First Assign 방식으로 우선순위(index)가 높고 Idle한 서버 프로세스에 요청을 할당한다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 해당 서버에 적용된 옵션을 설정한다.

    옵션 설명

    {+|-}Cache

    Content의 캐시 유무(+|-)를 결정한다. SVRTYPE이 HTML, JSV인 서버인 경우 지원된다.

    BlockListen

    해당 서버가 서비스 불능 상태가 되면 더 이상의 클라이언트를 받아들이지 않도록 이 서버와 관련된 가상 호스트의 서비스 포트들을 닫는 기능이다. 서버의 상태가 복구되면 해당 포트들을 다시 서비스(listen)하여 새로운 클라이언트가 접속할 수 있도록 한다.

    L4 장비를 사용하여 여러 개의 노드로 구성된 경우 몇몇 노드가 서비스 불능 상태가 되었을 때 해당 노드의 Port Listen이 중단되므로 L4 장비는 서비스가 가능한 노드로 클라이언트를 분산시킬 수 있다.

    동일한 서비스 포트를 사용하는 가상 호스트가 2개 이상인 경우 하나의 서비스 포트가 닫히게 되면 해당 서비스 포트와 관련된 가상 호스트 모두 서비스가 불가능해지므로 이 옵션을 사용하는 경우 가상 호스트별로 서비스 포트를 나눠서 사용해야 한다.

    BlockListenCloseClients

    BlockListen 기능으로 서비스 포트들을 닫을 때 기존에 해당 포트들에 연결되어 있는 클라이언트들까지 닫고 싶을 경우 설정한다.

    요청 처리 중인 클라이언트는 요청이 끝난 후 연결을 끊고, keepalive로 연결을 유지하고 있는 클라이언트는 즉시 연결을 끊는다.

    NotifyClientClose

    요청 처리 중 사용자가 연결을 끊었을 경우 서버에게 이를 알릴지 여부를 설정한다. JEUS의 경우 요청을 처리 중인 연결을 끊어서 JEUS에게 알려준다.

    SecurityHolePassAuthorization

    Authorization이나 Proxy-Authorization Header를 CGI/PHP의 환경변수로 전달할지 여부를 설정한다.

    사용자 정보가 CGI/PHP에 노출될 수 있으므로 설정할 때 주의해야 한다.

    503ResponseOnSuspend

    suspend 명령으로 인해 해당 서버가 서비스 불능 상태가 되면 해당 서버가 처리해야 할 요청에 대해 "503 Service Temporarily Unavailable"로 응답하도록 하는 기능이다.

    위와 같은 상황에서 이 옵션을 사용하지 않는 경우 해당 서버가 처리해야 할 요청들은 큐잉된다.

    PassOriginalUriAfterFilters

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

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

    AllServers

    HTMLS 요청에 대해 Filter 모듈을 사용 할 경우 Filter 기능을 FILTERS 프로세스에서 처리할지 여부를 결정한다.

SessionIdCookieKey

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "JSESSIONID"

  • 서버 타입이 JSV인 경우 Session routing용으로 사용되는 HTTP Cookie의 Key 이름을 설정한다.

SessionIdUrlKey

  • 종류: Literal

  • 범위: 255자 이내

  • 서버 타입이 JSV인 경우 Session routing용으로 사용되는 HTTP URL의 Key 이름을 설정한다.

  • SessionIdCookieKey 항목이 설정된 경우 SessionIdCookieKey 설정을 우선한다.

FlexibleStickySessionRouting

  • 종류: Boolean

  • 기본값: N

  • 서버 타입이 JSV인 경우 Session routing을 하게 되는데, 이때 flexible하게 routing할 것인지를 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    동일한 jengineid를 가진 서버 프로세스가 모두 RUN 상태인 경우 큐잉(Queuing)하지 않고 동일한 서버 내에서 다른 jengineid를 가진 서버 프로세스에 routing한다.

    N(사용자가 설정하지 않은 경우)

    기본으로 Sticky Session routing이 된다(이전 버전과 동일). 이는 동일한 jengineid를 가진 서버 프로세스에만 routing하고, 해당 서버 프로세스가 모두 RUN 상태이면 큐잉한다는 의미이다.

    Flexible routing을 하는 경우 동일한 JSESSIONID를 가진 다른 클라이언트의 요청이 각각 다른 서버로 routing될 수 있으므로 주의해야 한다. 기본값 사용을 권장한다.

Compression

  • 종류: Literal

  • 범위: 255자 이내

  • 응답을 압축할 대상을 결정하는 설정이다.

  • 압축할 MIME-Type을 설정하며, 응답의 Content-Type이 사용된다. 해당되는 응답은 클라이언트로 전송되기 전에 GZIP을 사용해서 압축된다.

  • 콤마(,)로 구분하여 최대 32개까지 여러 MIME-Type을 지정할 수 있다.

  • 압축기능을 사용할 경우 네트워크 트래픽을 줄일 수 있지만, 서버의 성능은 저하될 수 있다.

    압축률이 낮은 파일(zip 같은 압축 파일이나 jpeg 같은 압축 이미지 등)을 압축할 경우 서버에 부하만 주기 때문에 해당 MIME-Type이 압축 대상이 되지 않도록 주의해야 한다.

    압축 기능은 HTTP Request Header 중 Accept-Encoding에 GZIP이나 deflate로 지정된 요청에 대해서만 적용된다.

CompressionMinSize

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 압축 설정을 통해 응답을 압축하고자 할 때 응답의 최소 크기를 설정한다.

  • Content-Length 응답 헤더의 값이 설정된 값보다 크면 응답을 압축한다. 단, chunked 응답인 경우 응답의 크기를 알기 어려우므로 적용되지 않는다.

VhostName

  • 종류: Literal

  • 범위: 1023자 이내

  • 서버가 특정 Virtual Host 요청만을 처리할 경우 해당 VHOST 절의 Virtual Host 이름을 설정한다.

  • SVRGROUP 절에 VhostName이 정의되어 있다면 서버의 VhostName과 SVRGROUP 절의 VhostName은 일치해야 한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

FcgiInitEnv

  • 종류: Literal

  • 범위: 255자 이내

  • FastCGI 애플리케이션을 실행할 때 필요한 환경변수를 추가할 수 있다. 포맷은 'NAME=VALUE’이다.

    FcgiInitEnv = "LOGFILE=/wb-413/log/myapp.log"
    # myapp.log 예제
    FAST_CGI_ENV_TEST="sample fast cgi environment variable"
  • 1개 이상의 FcgiInitEnv를 사용해서 여러 개의 환경변수를 설정할 수 있다.

FcgiKillTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 무제한을 의미한다.)

  • FastCGI의 요청을 처리한 후 애플리케이션 프로세스를 강제로 종료할지 여부를 설정한다.

  • 애플리케이션 프로세스가 시작한 후 현재까지의 시간이 FcgiKillTimeOut에 지정한 시간보다 크면 서버는 요청을 요청을 처리한 후 애플리케이션 프로세스를 강제로 종료한다.

FcgiKillMaxRequest

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 무제한을 의미한다.)

  • FastCGI의 요청을 처리한 후 애플리케이션 프로세스를 강제로 종료할지 여부를 설정한다.

  • 애플리케이션 프로세스가 시작한 후 현재까지 처리한 요청 개수가 FcgiKillMaxRequest에 지정한 개수보다 크면 서버는 요청을 처리한 후 애플리케이션 프로세스를 강제로 종료한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

LBFactor

  • 종류: Numeric

  • 범위: 1 ~ 1000

  • 기본값: 1

  • SVRGROUP 절에 LBServers로 설정된 서버에 한하여 LBType이 Static인 경우 요청을 어떤 비율로 처리할지 설정한다.

  • wsadmin에서 "set -v <server_name> lbf <value>" 명령을 통해 동적으로 값을 변경할 수 있다.

MaxJengineCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 32

  • JSV 타입의 서버인 경우 8이 기본값이며 그 이외의 서버는 0이 기본값이 된다.

  • 하나의 서버에 최대 몇 개의 Jengine이 연결을 맺는지에 대한 설정이다.

RequestLevelPing

  • 종류: Boolean

  • 기본값: N

  • 서버 타입이 JSV인 경우 요청을 포워딩하기 전 해당 서버에 PING을 보내볼 것인지 설정한다.

  • Y로 설정한 경우 JSV 서버로 포워딩하는 모든 요청에 대해 PING을 보내고 이에 대한 응답을 받은 경우에만 요청을 포워딩 한다.

  • 여러 JSV 서버가 연결된 경우 OOM(Out Of Memory)등으로 요청을 보내도 응답하기 어려운 서버가 발생할 수 있는 경우에 사용하면 유용할 수 있다.

    모든 요청에 대해 PING을 보내고 응답을 받아야 하므로 성능 저하가 발생할 수 있다. 기본값 사용을 권장한다.

RequestLevelPingTimeout

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 3

  • 스케줄링된 JSV 서버로 PING을 보내고 이에 대한 응답을 받기까지 기다리는 시간을 설정한다. 해당 시간 안에 응답을 받지 못하면 해당 연결을 끊고 다른 JSV 서버를 다시 스케줄링을 하여 PING을 보내게 된다.

RequestLevelPingRetryCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • JSV 서버 내에 모든 Jengine에 대해 PING을 보내고 실패한 경우 재시도하고자 하는 횟수를 설정한다.

7.2. 예제

다음은 SERVER 절을 설정한 예제이다.

*SERVER
cgi
    SvgName = cgig,
    MinProc = 1,
    MaxProc = 5
ssi
    SvgName = ssig,
    MinProc = 1,
    MaxProc = 2
jsv1
    SvgName = jsvg,
    MinProc = 1,
    MAXProc = 10,
    LBFactor = 10
jsv2
    SvgName = jsvg,
    MinProc = 1,
    MAXProc = 10
    LBFactor = 5
jsv3
    SvgName = jsvg,
    MinProc = 1,
    MAXProc = 10
    LBFactor = 1
jsv4
    SvgName = jsvg,
    MinProc = 1,
    MAXProc = 10
wbaps
    SvgName = wbapg,
    MinProc = 2,
    MAXProc = 5,
    Schedule = "FA"

SvgName이 jsvg이고 *SVRGROUP 절에 LBServers로 설정된 jsv1, jsv2, jsv3가 로드 밸런싱 서버로 동작하고 각각 10, 5, 1의 비율로 요청을 분산한다(LBFactor는 LBType이 Static인 경우에만 의미가 있음). LBBackup인 jsv4는 jsv1, jsv2, jsv3가 모두 사용할 수 없을 경우에 요청을 처리한다.

8. SERVICE 절

SERVICE 절은 WebtoB를 통해 비즈니스 로직을 바로 수행할 경우 설정한다. 설정할 서비스의 서버 타입은 보통 WEBSTD로 설정한다. 기존의 표준 CGI를 구성하는 함수를 WebtoB에서 제공하는 함수로 사용해서 새로운 서비스 형태로 생성한다. 생성된 서비스는 WebtoB에서 바로 수행된다.

SERVICE 절에는 다음과 같은 내용이 정의된다.

  • 서비스가 제공되는 서버 프로세스

  • 서비스 우선순위

  • 서비스 처리 제한시간

8.1. 설정 항목

다음은 SERVICE 절의 환경설정 형식이다.

*SERVICE
name    # String[16]
    SvrName = String[32],
   #Priority = Numeric,                 # 50 (0-100)
   #SvcTime = Numeric                   # 0 (0-)

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

SERVICE 절 이름

  • 종류: String

  • 범위: 15자 이내

  • WebtoB를 통해 수행할 비즈니스 로직에 해당하는 서버 프로그램 내의 함수 이름(서비스 루틴명)을 설정한다.

  • 15자 이내의 string으로 반드시 SERVICE 절 내에서 유일(Unique)한 이름이어야 한다.

SvrName(필수 항목)

  • 종류: String

  • 범위: 31자 이내

  • 해당 서비스를 제공하는 서버 프로세스를 지정한다. 해당 서비스 루틴을 가진 서버 프로그램의 실행 파일 이름을 설정한다.

  • 서버 프로세스는 SERVER 절에 등록되어 있어야 한다.

Priority

  • 종류: Numeric

  • 범위: 0 ~ 100

  • 기본값: 50

  • 클라이언트의 요구를 처리하는 우선순위 값이다. 1부터 100까지 설정이 가능하며 숫자가 클수록 높은 우선순위를 갖는다.

SvcTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 무제한을 의미한다.)

  • 서비스 처리의 제한시간이다. 각 서비스는 서비스 처리가 시작되는 순간부터 끝날 때까지 지정된 SvcTime 시간 안에 처리되어야 한다. 지정 시간을 초과하면 서버 프로세스는 서비스를 중지하고, 클라이언트에게 에러를 응답한다.

8.2. 예제

다음은 SERVICE 절을 설정한 예제이다.

*SERVICE
example
    SvrName = webaps,
write_board
    SvrName = webaps

9. DIRECTORY 절

노드 내의 특정 디렉터리의 속성을 설정한다. 디렉터리 접근에 인증이 필요하도록 하는 AuthentName, 디렉터리 안의 파일 확장명을 설정하는 ForceMimetype, DefaultMimetype 등이 있으며, 디렉터리 접근 내역을 기록하는 로그를 설정할 수 있다.

9.1. 설정 항목

다음은 DIRECTORY 절의 환경설정 형식이다.

*DIRECTORY
name    # String[32]
    Directory = Literal[256],           # $ENV, R.PATH
   #DefaultMimetype = Literal[128],
   #ForceMimetype = Literal[128],
   #VhostName = String[1024],           # LIST[64], MULTI
   #AccessName = String[32],
   #AuthentName = String[32],
   #Options = Literal[256],             # PM.LIST
   #DefaultCharset = Literal[32],
   #ErrorDocument = Literal[256]        # LIST[64]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

DIRECTORY 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 디렉터리의 이름을 설정한다.

Directory(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 설정을 적용할 디렉터리의 경로명을 설정한다. 경로명은 절대 경로와 $WEBTOBDIR을 기준으로 한 상대 경로를 사용할 수 있다.

DefaultMimetype

  • 종류: Literal

  • 범위: 127자 이내

  • MIME-Type을 결정할 수 없는 문서의 Default Content-Type을 설정한다.

  • 여러 절에서 적용되는 우선순위는 다음과 같다.

    1. DIRECTORY 절에 설정된 DefaultMimetype

    2. SVRGROUP 절에 설정된 DefaultMimetype

    3. 해당되는 NODE 절 또는 VHOST 절에 설정된 DefaultMimetype

ForceMimetype

  • 종류: Literal

  • 범위: 127자 이내

  • 지정된 디렉터리 안의 모든 리소스들은 ForceMimetype에 설정한 MIME-Type으로 처리된다.

    예를 들어 ForceMimetype이 CGI로 되어있다면 디렉터리 내의 모든 리소스들은 클라이언트의 요구가 있을 경우 CGI로 처리된다. 즉, CGI 처리를 담당하고 있는 서버가 서비스를 처리한다.

VhostName

  • 종류: Literal

  • 범위: 1023자 이내

  • Virtual Host를 이용하게 구성된 환경에서 디렉터리에 대한 설정을 해당 Virtual Host에만 적용되도록 해야 할 필요가 있을 때 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

  • VhostName 항목을 설정하지 않는 경우 모든 Virtual Host에 적용 가능하다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP 주소에서 들어온 요청을 허용 또는 거부하는 ACCESS 절의 설정을 DIRECTORY 절에 할 수 있다.

AuthentName

  • 종류: String

  • 범위: 31자 이내

  • DIRECTORY 절에 대해서 인증(Authentication)을 적용할 수 있다. 적용할 DIRECTORY 절에 AUTHENT 절에서 설정한 이름을 설정한다. 단, 서버 타입이 JSV인 경우 SVRGROUP 절에만 인증을 적용할 수 있다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 다음은 설정 가능한 옵션에 대한 설명이다.

    옵션 내용

    {+|-}Cache

    Content의 캐시 유무(+|-)를 결정한다.

    SSLRequireSSL

    SSL을 사용하는 요청만 처리하고, SSL을 사용하지않는 요청은 "403 Forbidden"으로 응답한다.

    SSLDenySSL

    SSL을 사용하지 않는 요청만 처리하고, SSL을 통한 요청은 "403 Forbidden"으로 응답한다.

DefaultCharset

  • 종류: Literal

  • 범위: 31자 이내

  • HTTP Header 중에서 Content-Type에 Character set 관련 파라미터가 없는 응답에 추가될 Character set의 이름을 설정한다.

    설정 값 내 용

    On

    기본 Character set인 ISO-8859-1로 설정한다.

    Off

    해당 기능을 중단한다.

    _charset_

    사용자가 기술한 '_charset_'으로 설정한다.

  • 여러 절에서 적용되는 우선순위는 다음과 같다.

    1. DIRECTORY 절에 설정된 DefaultCharset

    2. SVRGROUP 절에 설정된 DefaultCharset

    3. 해당되는 NODE 절 또는 VHOST 절에 설정된 DefaultCharset

ErrorDocument

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP 에러 페이지를 사용자가 지정한 페이지로 대신 사용할 경우 ERRORDOCUMENT 절에 정의한 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 설정할 수 있다.

9.2. 예제

다음은 DIRECTORY 절을 설정한 예제이다.

*DIRECTORY
dir_test
    DIRECTORY = "/usr/local/webtob/docs/vhost_docs",
    ForceMimetype = "text/plain"

10. URI 절

URI 절은 클라이언트 요구의 URI(Uniform Resource Identifier) 값에 따라 이를 처리하는 서비스를 구분할 수 있도록 한다. 특정 URI가 입력으로 들어온 경우 이를 특정 서비스에서 처리하도록 할 수 있다. 보통 URI 절은 CGI를 이용하는 경우에 많이 사용된다.

예를 들어 사용자가 http://www.tmax.co.kr/cgi-bin/test.cgi를 호출한 경우 "/cgi-bin/" URI를 CGI의 서비스로 정의해서 사용할 수 있다.

단, 아래와 같은 요청이 있을 때 URI 절 설정은 <first> 또는 <first>로 시작하는 URI로 해야 한다.

http://<hostname>:<port>/<first>/<second>/index.html

10.1. 설정 항목

다음은 URI 절의 환경설정 형식이다.

*URI
name    # String[32]
    URI = Literal[256],
    SvrType = String[32],
   #SvrName = String[32],
   #SvcName = String[16],
   #Redirect = Literal[256],
   #RedirectStatus = String[32],        # 302
   #VhostName = String[1024],           # LIST[64], MULTI
   #AccessName = String[32],
   #AuthentName = String[32],
   #Options = Literal[256],             # PM.LIST
   #SCGI = Boolean,                     # N
   #SCGIServer = Literal[256],
   #Match = Literal[256],               # "prefix"
   #Priority = Numeric,                 # 50 (0-100)
   #FCGI = Boolean,                     # N
   #RedirectNoSub = Boolean,            # N
   #Ext = String[256],                  # LIST, MULTI
   #GotoEXT = Boolean,                  # N
   #StopIfNoEXT = Boolean,              # Y
   #LBSvgName = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

URI 절 이름

  • 종류: String

  • 범위: 31자 이내

  • string으로 사용자 임의로 정할 수 있다.

Uri(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP Request path와 매치할 패턴을 설정한다. 매치되면 해당 요청은 URI 절의 설정이 적용된다.

  • WebtoB는 여러 가지 패턴 종류를 지원한다. 패턴 종류는 Match 항목에 설정한다.

SvrType(필수 항목)

  • 종류: String

  • 범위: 31자 이내

  • 서비스 속성 즉, 지정된 URI를 포함하는 요청이 왔을 때 처리할 서버를 설정한다. 예를 들어 "/jsv/"라는 URI를 포함하는 요청에 대해 서버 타입이 JSV인 서버가 지정되도록 한다.

SvrName

  • 종류: String

  • 범위: 31자 이내

  • SvrName은 처리 담당 서버의 이름을 설정한다.

  • WebtoB에서는 같은 서버 타입을 갖고 있는 서비스 개체들이 서버 그룹과 서버로 구분될 수 있고, 각각의 서버는 서비스 처리 프로세스의 최소 및 최대 개수를 설정한다.

  • URI 절에서는 처리를 담당할 서버를 지정하여 세분화된 서비스 제어를 할 수 있다.

SvcName

  • 종류: String

  • 범위: 15자 이내

  • 해당 URI에 대한 처리를 전담할 서비스의 이름을 설정한다.

Redirect

  • 종류: String

  • 범위: 255자 이내

  • 지정 URI에 대한 요구를 다른 URI에 매핑시키도록 하는 기능이다. URI 절에 설정된 RedirectionStatus의 값에 따라 Redirect에 설정된 값이 HTTP 응답의 Location Header 필드에 설정되어 사용자에게 전달된다.

  • RedirectStatus의 값을 생락하고 Redirect만 사용된 경우 그 값은 "302 Found"를 사용한다.

RedirectStatus

  • 종류: String

  • 범위: 31자 이내

  • 기본값: 302

  • Redirect 기능을 사용하는 경우 발생될 HTTP status를 설정한다.

  • 다음과 같은 값을 사용할 수 있다.

    설정값 별칭 설명

    301

    permanent

    "301 Moved Permanently"로 응답한다.

    302

    found

    "302 Found"로 응답한다.

    303

    seeother

    "303 See Other"로 응답한다.

    305

    useproxy

    "305 Use Proxy"로 응답한다.

    307

    temp

    "307 Temporary Redirect"로 응답한다.

    410

    gone

    "410 Gone"로 응답한다.

VhostName

  • 종류: Literal

  • 범위: 1023자 이내

  • URI가 특정 Virtual Host에 사용될 때 VHOST 절에 정의된 해당 Virtual Host 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP 주소에서 들어온 요청을 허용 또는 거부하는 ACCESS 절 설정을 URI 절에 적용할 수 있다.

AuthentName

  • 종류: String

  • 범위: 31자 이내

  • URI 절에 대해서 인증(Authentication)을 적용할 수 있다. 적용할 URI에 AUTHENT 절에서 설정한 이름을 설정한다. 단, 서버 타입이 JSV인 경우 SVRGROUP에만 인증을 적용할 수 있다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 다음은 적용 가능한 옵션에 대한 설명이다.

    옵션 내용

    {+|-}Cache

    Content의 캐시 유무(+|-)를 결정한다.

    SSLRequireSSL

    SSL을 사용하는 요청만 처리하고, SSL을 사용하지않는 요청은 "403 Forbidden"으로 응답한다.

    SSLDenySSL

    SSL을사용하지않는 요청만 처리하고, SSL을 통한 요청은 "403 Forbidden"으로 응답한다.

SCGI

  • 종류: Boolean

  • 기본값: N

  • 'SvrType = CGI’인 경우 요청이 Simple CGI인지 설정한다.

  • Y로 설정하면 요청을 Simple CGI 방식으로 처리한다. 이 경우 SCGIServer도 함께 설정해야 한다.

SCGIServer

  • 종류: Literal

  • 범위: 255자 이내

  • Simple CGI의 서버 주소를 설정한다.

  • 형식은 "서버이름(IP 주소):포트 번호"이다.

    SCGIServer = "172.16.1.100:9001"

Match

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "prefix"

  • URI에 설정된 패턴의 종류를 설정한다.

    설정값 설명

    prefix

    URI에 설정된 패턴이 HTTP Request URL의 prefix이다.

    (예: 패턴 "/uri/"는 "/uri/a/", "/uri/a/b/", "/uri/a/b/c" 등의 Request path와 매치한다.)

    exact

    URI에 설정된 패턴이 HTTP Request URL과 일치한다.

    (예: 패턴 "/uri/"는 Request path가 "/uri/"일 경우만 매치한다. 이외 모든 Request path는 매치하지 않는다.)

    fn

    URI에 설정된 패턴이 UNIX 셸에서 사용되는 FNMATCH 패턴이다.

    애스터리스크(*), 물음표(?) 같은 와일드카드를 사용할 수 있다.

    (예: 패턴 "/uri/*/*/"는 "/uri/a/b/", "/uri/c/d/" 등의 Request path와 매치한다.)

    regexp

    URI에 설정된 패턴이 Perl 스크립트 언어에서 사용되는 regular expression이다.

    (예: 패턴 "/uri.*"은 "/uri", "/uri/", "/uri1"와 같은 Request path와 매치한다.)

  • 패턴 종류에 따라서 HTTP Request path와 매치하는 방식이 달라진다.

Priority

  • 종류: Numeric

  • 범위: 0 ~ 100

  • 기본값: 50

  • 클라이언트의 요구를 처리하는 우선순위 값이다. 1부터 100까지 설정이 가능하며 숫자가 클수록 높은 우선순위를 갖는다.

FCGI

  • 종류: Boolean

  • 기본값: N

  • 'SvrType = CGI’인 경우 요청이 Fast CGI인지 설정한다.

  • Y로 설정하면 요청을 Fast CGI 방식으로 처리한다.

RedirectNoSub

  • 종류: Boolean

  • 기본값: N

  • Redirect 설정을 하는 경우 prefix로 매칭할 경우 설정된 URL에 요청 URL의 나머지 부분을 붙여서 redirect할지 여부를 설정한다.

Ext

  • 종류: Literal

  • 범위: 255자 이내

  • URI 매칭하는 경우 추가적으로 설정한 확장자까지 매칭한다.

  • 특정 경로 아래의 특정 확장자에 대해서만 URI 절을 적용할 경우 사용한다.

  • 콤마(,)를 사용하거나 여러 번 설정하여 여러 확장자를 설정할 수 있다.

GotoExt

  • 종류: Boolean

  • 기본값: N

  • URI 매칭을 먼저하는 경우 EXT 절 매칭을 수행하도록 할지 여부를 설정한다. EXT 매칭이 되면 해당 EXT 서비스가 선택되는 것이므로 앞서 매칭한 URI 설정은 적용되지 않음을 주의해야 한다.

StopIfNoExt

  • 종류: Boolean

  • 기본값: Y

  • 'GotoExt = Y’인 경우 적용된다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    매칭되는 EXT 절 설정 항목이 없을 경우 매칭을 중단한다.

    N

    다음 URI 절 설정을 계속 탐색한다.

LBSvgName

  • 종류: Literal

  • 범위: 255자 이내

  • 지정된 URI를 포함하는 요청이 왔을 때 이를 처리할 서버들 사이에 부하 분산을 설정하고자 할 경우 원하는 SVRGROUP명을 설정한다.

  • LBSvgName에 명시한 SVRGROUP 설정에는 LBServers나 LBBackup 옵션이 적용되어야 한다.

10.2. 예제

다음은 URI 절을 설정한 예제이다.

*URI
uri1
    Uri = "/cgi-bin/",
    SvrType = CGI
uri2
    Uri = "/cgi/",
    SvrType = CGI
uri3
    Uri = "/test/",
    SvrType = CGI
uri4
    Uri = "/jsv/",
    SvrType = JSV

11. ALIAS 절

실제 서버의 물리적 디렉터리 경로와 URI를 Alias시키도록 설정할 수 있다. 즉, 어떤 특정한 URI에 대한 요구가 들어오면 이를 실제의 물리적인 디렉터리에 매핑시켜서 이곳에서 원하는 리소스를 찾아 처리하게 하는 방식이다. 이는 사용자가 Document root에 상관없이 지정할 수 있기 때문에 관리하는 입장에서 편리한 기능이다.

11.1. 설정 항목

다음은 ALIAS 절의 환경설정 형식이다.

*ALIAS
name    # String[32]
    URI = Literal[256],
    RealPath = Literal[256],            # $ENV, R.PATH
   #VhostName = String[1024]            # LIST[64], MULTI

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

ALIAS 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

URI(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • Alias할 URI를 설정한다.

Realpath(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 서버 안의 물리적 디렉터리의 경로명을 설정한다.

  • 대량의 Virtual Host를 사용하는 경우 다음의 지시자를 사용해서 디렉터리 설정 패턴을 동적으로 설정할 수 있다.

    지시자 설명

    %p

    요청한 포트 번호로 치환한다.

    %n

    Hostname이나 IP 주소의 n번째 요소로 치환한다. 만약 n을 0으로 하면 전체 문자열이 사용된다. 마이너스 기호(-)가 앞에 오면 Hostname이나 IP 주소의 끝에서부터 센다. 플러스 기호(+)가 뒤에 오면 Hostname이나 IP 주소의 나머지가 사용된다.

    %n.m

    n번째 요소의 m번째 문자로 치환한다. 위와 같이 마이너스 기호(-)나 플러스 기호(+)가 붙을 수 있다.

    %%

    단일 퍼센트(%) 표시로 치환한다.

VhostName

  • 종류: Literal

  • 범위: 1023자 이내

  • ALIAS 절이 적용되는 Virtual Host를 제한하고 싶은 경우 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

11.2. 예제

다음은 ALIAS 절을 설정한 예제이다.

*ALIAS
alias1
    URI = "/cgi-bin/",
    RealPath = "/usr/local/webtob/cgi-bin/"
alias2
    URI = "/tpsvc/",
    RealPath = "/usr/local/webtob/ap/"

12. DIRINDEX 절

요청 주소가 디렉터리까지만 명시된 경우 기본적으로 해당 디렉터리에서 index.html을 찾아 보여주도록 되어 있다. 그러나 index.html이 없는 경우 해당 디렉터리 구조를 보여줄 수 있도록 설정할 수 있다. 또한 그것을 인덱싱하는 방식과 Icon 등을 지정할 수 있다.

12.1. 설정 항목

다음은 DIRINDEX 절의 환경설정 형식이다.

*DIRINDEX
name    # String[32]
    Options = Literal[256],             # "Fancy,EncodeURL", PM.LIST
   #Ignore = Literal[256],              # LIST
   #DefaultIcon = String[32],
   #Description = Literal[256],
   #HeaderFile = String[32],
   #TailFile = String[32],
   #IconExt = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

디렉터리 인덱싱 기능을 사용하기 위해서 DIRINDEX 절에 다음 항목 설정이 필요하다.

항목 설명

Options

“+Index”로 설정하면 디렉터리 정보를 보여준다.

DirIndex

DIRINDEX 이름을 적어준다.

DIRINDEX 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

Options(필수 항목)

  • 종류: Literal

  • 인덱싱하는 방식에 대한 옵션을 사용하여 설정할 수 있다.

  • 다음은 설정 옵션에 대한 설명이다.

    옵션 설명

    {+|-}Fancy

    WebtoB가 제공하는 Fancy Indexing 사용을 결정한다.

    Fancy Indexing은 file name, last modified time, file size 별로 정렬하는 링크를 보여주는 기능이다.

    {+|-}EncodeURL

    생성된 페이지 내부의 URL 중 ASCII가 아닌 글자들에 대한 URL 인코딩 사용을 결정한다. "-EncodeURL"로 설정할 경우 한글 파일의 링크를 한글 그대로 보이게 되며, 브라우저 설정에 따라 해당 파일이 Not Found가 될 수 있기 때문에 주의해야 한다.

Igore

  • 종류: Literal

  • 범위: 255자 이내

  • 인덱싱할 때 필요에 따라 표시하지 않을 파일들이 Index 리스트에 나타나지 않도록 해준다. 인덱싱에서 제외하고 싶은 파일의 리스트를 파일명을 써주거나 애스터리스크(*)를 사용해서 설정한다.

DefaultIcon

  • 종류: String

  • 범위: 31자 이내

  • Unknown File Type에 대한 Icon을 설정한다.

Description

  • 종류: Literal

  • 범위: 255자 이내

  • 디렉터리 내 파일들에 대한 Description을 명시한 파일명을 설정한다. 이 설정은 디렉터리 구조를 표시할 때 각 파일들의 Description을 보여주도록 한다.

    예를 들어 해당 디럭터리에 a.html, b.html, c.html, .. 이 존재할 때 각 파일에 대한 설명을 출력하려면 des.txt 파일 내용을 다음과 같이 작성하고 Descrition = "des.txt"로 설정한다.

    a.html a.html에 대한 설명
    b.html b.html에 대한 설명
    c.html c.html에 대한 설명
    ...

HeaderFile

  • 종류: String

  • 범위: 31자 이내

  • 인덱싱의 가장 윗부분에 집어 넣을 Header를 지정된 파일에서 읽어 올 수 있도록 한다. 파일명은 인덱싱하고 있는 디렉터리에서 상대적인 경로명으로 간주한다.

TailFile

  • 종류: String

  • 범위: 31자 이내

  • 인덱싱의 가장 아래 부분에 집어 넣는 내용을 TailFile에서 지정한 파일에서 읽어 온다. 파일명은 인덱싱하고 있는 디렉터리에서 상대적인 경로명으로 간주한다.

IconExt

  • 종류: Literal

  • 범위: 255자 이내

  • 파일의 Extension 값에 따라 해당 Icon으로 인덱싱을 할 수 있도록 설정한다.

  • Icon 파일의 URL과 MIME-Type을 매칭시킨다.

12.2. 예제

다음은 DIRINDEX 절을 설정한 예제이다.

*DIRINDEX
dindex
    Options = "Fancy"

13. LOGGING 절

클라이언트의 요구 내역을 기록하는 형식을 지정한다. 접근 내역과 에러 내역이 따로 저장되며 저장 형식을 지정할 수 있다. 시스템 로그, 액세스 로그, 에러 로그 모두 LOGGING 절에 설정한다.

13.1. 설정 항목

다음은 LOGGING 절의 환경설정 형식이다.

*LOGGING
name    # String[32]
    FileName = Literal[256],            # $ENV, R.PATH
    Format = Literal[256],
   #Option = Literal[256],              # PM.LIST
   #RotateBySeconds = Numeric,          # 0 (0-)
   #ExcludeByExt = Literal[1024],       # LIST
   #ArchiveFileName = Literal[256],     # $ENV
   #ValidHours = Numeric,               # 0 (0-23)
   #LogHandler = Literali[256]          # LIST[5]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

다음은 LOGGING 절의 설정과 관계되는 NODE 절의 항목이다. SysLog를 제외한 Logging, Errorlog는 NODE 절 외 VHOST 절에서도 설정할 수 있다.

항목 설명

SysLog

시스템 로그 이름을 설정한다.

Logging

액세스 로그 이름을 설정한다.

Errorlog

에러 로그 이름을 설정한다.

LOGGING 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

FileName(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 로그를 저장할 파일의 경로를 설정한다.

  • 상대 경로 ("/"로 시작하지 않는 경로)는 "$WEBTOBDIR/상대 경로"로 자동 대체한다.

  • 파일 이름에 포함된 다음 substitution string은 파일이 생성될 때 실제 값으로 대체된다. FileName에 설정된 값은 "$WEBTOBDIR/log/access_20091105.log"로 변경된다.

    FileName = "log/access_%Y%%M%%D%.log"

    다음은 substitution string의 실제값에 대한 설명이다.

    String 실제값

    %Y%

    년도(year)로 숫자 4개로 설정한다. (예: 2009)

    %M%

    월(month)로 숫자 2개를 설정한다. (예: 11)

    %D%

    일(day)로 숫자 2개를 설정한다. (예: 05)

    %h%

    시(hour)로 숫자 2개를 설정한다. (예: 10)

    %m%

    분(minute)으로 숫자 2개를 설정한다. (예: 30)

    %s%

    초(second)로 숫자 2개를 설정한다. (예: 45)

Format(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 로그 파일에 기록될 메시지의 포맷을 설정한다.

  • *USERLOGFORMAT 절에서 정의한 로그 포맷 이름으로 설정 할 수 있다.

  • 다음 Format string은 액세스 로그, 에러 로그 및 Header 절의 FieldValue에만 적용된다. 시스템 로그는 임의 값을 설정한다.

    포맷 설명

    DEFAULT

    Default Log File Format이다.

    (약자: "%h %t \"%r\" %s %b %D")

    COMMON

    Common Log File Format이다.

    (약자: "%h %l %u %t \"%r\" %s %b")

    COMBINED

    Combined Log File Format이다.

    (약자: "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"")

    COMBINEDIO

    CombinedIO Log File Format이다.

    (약자: "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O ")

    %a

    요청을 보낸 장비의 IP 주소를 표시한다. %h와 동일하다.

    %b

    헤더를 제외한 응답의 Byte를 표시한다.

    %c

    WebtoB 응답 생성 위치를 표시한다.

    • 내부 캐시에서 응답이 생성된 경우 "hc" 로 표시한다.

    • 디스크 캐시에서 응답이 생성된 경우 "dc"로 표시한다.

    • sendfile에서 응답이 생성된 경우 "sf"로 표시한다.

    • sendfile / disk cache 에서 생성된 경우 "sf/dc"로 표시한다.

    • remote 에서 생성된 경우 "hm"로 표시한다.

    %{_attr_name_}C

    HTTP Request의 Cookie Header 값 중 '_attr_name_'에 해당하는 값을 표시한다.

    %d

    응답이 전송된 시간을 표시한다.

    %D

    요청을 처리하는데 소요된 시간을 표시한다. (단위: millisecond)

    %{ENV_NAME}e

    환경변수 ENV_NAME을 출력한다.

    %g

    WebtoB가 내부적으로 사용하는 요청 식별자를 출력한다.

    %h

    요청을 보낸 장비의 IP 주소를 표시한다.

    %H

    사용한 HTTP 버전을 표시한다.

    %{HEADER_FIELD}i

    HTTP Request의 HEADER_FIELD Header 값을 표시한다.

    %{_id_name_}J

    요청을 JEUS로 포워딩하여 처리하는 경우 내부적으로 사용하는 요청의 식별정보를 표시한다.

    • _id_name이 JSVCid이면 Client ID이다.

    • _id_name이 JSVReqSeq이면 Request Sequence이다.

    %l

    원격 로그인명을 표시한다.

    %m

    HTTP Request 메소드를 표시한다.

    %p

    Request가 도착한 서버의 포트 번호를 표시한다.

    %q

    HTTP Request의 query 값을 표시한다.

    %r

    HTTP Request의 Request line 전체를 표시한다.

    %R

    HTTP Request의 Request line 전체를 표시한다. CheckURL이나 URLRewrite 기능에 의해 변경된 Request line을 표시한다.

    %s

    응답에 사용된 HTTP Status Code를 표시한다.

    %t

    요청처리를 마친 시간을 표시한다.

    %T

    Request를 처리하는 데 소요된 시간을 표시한다. (단위: 초)

    %u

    HTTP 인증에 사용된 user 이름을 표시한다.

    %U

    HTTP Request URI를 표시한다.

    %v

    Host Header 필드 값을 표시한다.

    %z

    응답이 압축된 경우 압축 전/후의 응답 크기와 압축률을 표시한다.

    %S

    http와 https를 구분하여 표시한다.

    %A

    서버의 IP 주소를 표시한다.

    %I

    요청의 byte를 표시한다.

    %O

    응답의 byte를 표시한다.

    %o

    뒷단의 서버가 보낸 요청을 read하여 access log로 남긴다.

    %i

    client가 보낸 요청을 read하여 access log로 남긴다.

Option

  • 종류: Literal

  • 범위: 255자 이내

  • Logging 방식에 영향을 주는 옵션들을 설정한다.

    옵션 설명

    Sync

    로그 메시지들이 WebtoB 메모리에 버퍼링되지 않고 바로 파일에 기록되도록 한다. 증권업무나 은행업무 등 사용자의 로그를 바로 확인하여야 하는 곳에서는 이러한 옵션을 주어서 사용하면 문제가 발행하는 경우 쉽게 확인할 수 있는 장점이 있다.

    NoErrorClientAddress

    WebtoB가 로깅하는 에러 메세지에 client의 IP 주소가 포함된 경우 이를 제외한다. 사용자의 IP 정보를 노출하지 않음으로서 보안성을 높일 수 있다는 장점이 있다.

RotateBySeconds

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 이 기능을 사용하지 않는것을 의미한다.)

  • 새로운 로그 메시지 생성할 때 현재 존재하는 로그 파일이 지정된 시간보다 오래되면 새로운 로그 파일을 생성하도록 설정한다.

ExcludeByExt

  • 종류: Literal

  • 범위: 1023자 이내

  • 특정 확장자를 가진 요청 파일에 대해서 액세스 로그를 남기지 않는 경우 해당 확장자 이름을 설정한다.

  • 다음은 설정에 대한 예이다.

    ExcludeByExt = "jpg,png"

ArchiveFileName

  • 종류: Literal

  • 범위: 255자 이내

  • ArchiveFileName을 설정하면 새로운 로그 파일 생성시점에 현재 로그 파일이 설정된 이름으로 이동한다. 그리고 새로운 로그 파일이 FileName에 설정한 형식(파일명+날짜)으로 생성된다. FileName과 같은 형식의 로그 파일 이름을 설정하면 된다.

ValidHours

  • 종류: Numeric

  • 단위: hours

  • 범위: 0 ~ 23

  • 기본값: 0 (0은 이 기능을 사용하지 않는것을 의미한다.)

  • 새로운 로그 파일을 설정된 시간 단위로 생성하도록 설정한다.

LogHandler

  • 종류: Literal

  • 범위: 255자 이내

  • access log를 리모드 서버에 남길 경우 사용할 LOG_HANDLER 절 이름을 설정한다.

  • 콤마(,)로 구분하여 최대 5개까지 설정 가능하다.

13.2. 예제

다음은 LOGGING 절을 설정한 예제이다.

*LOGGING
access_log
    Format = "default", # "%h %l %u %t \"%r\" %s %b" is default format
    Filename = "log/archives/access_%Y%%M%%D%.log"
    Option = "sync"
error_log
    Format = "%r Host=%{HOST}i",
    Filename = "log/archives/error_%Y%%M%%D%.log"
    Option = "sync"
system_log
    Format = "",
    Filename = "log/archives/system_%Y%%M%%D%.log"
    Option = "sync"

14. ACCESS 절

클라이언트에서 접속을 시도할 때 IP 주소, network/netmask, Header 정보들을 기준으로 요청의 허용/제한을 설정한다. 또한 요청 허용/제한이 적용되는 순서를 설정할 수 있다.

ACCESS 절은 DIRECTORY 절, URI 절, EXT 절, TCPGW 절에 적용될 수 있으며, 각각에서 정의한 리소스를 허용/제한하게 된다.

14.1. 설정 항목

다음은 ACCESS 절의 환경설정 형식이다.

*ACCESS
name    # String[32]
   #Method = Literal[256],              # "<all-methods>", PM.LIST
   #MethodExcept = Literal[256],        # PM.LIST
   #Order = Literal[256],               # "deny,allow"
   #Allow = Literal[256*35],            # LIST[256]
   #Deny = Literal[256*35],             # LIST[256]
   #AllowIf = Literal[256],             # MULTI[32]
   #DenyIf = Literal[256]               # MULTI[32]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

ACCESS 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

Method

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: <all-HTTP-methods>

  • 적용할 HTTP 메소드를 설정한다.

MethodExcept

  • 종류: Literal

  • 범위: 255자 이내

  • WebtoB에서 설정할 수 있는 HTTP 메소드(GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK)에서 제외하고 싶은 메소드들을 설정한다. 즉, 설정된 메소드들을 제외한 메소드만 적용된다.

    예를 들면 MethodExcept = "POST"는 Method = "GET, HEAD, ..."(POST 제외한 모든 HTTP 메소드)와 동일하다.

Order

  • 종류: Literal

  • 기본값: "Deny,Allow"

  • Allow, AllowIf, Deny, DenyIf, Method가 적용되는 순서를 설정한다.

  • 다음은 옵션에 대한 설명이다.

    옵션 설명

    Deny, Allow

    Method > Deny > DenyIf > Allow > AllowIf 순서로 매치한다.

    • 요청 메소드가 Method 항목에 포함되지 않을 경우: 요청을 허용한다.

    • Deny, DenyIf와 매치하지만 Allow, AllowIf와 매치하지 않은 경우: 요청을 거절한다.

    • 이외 모든 경우: 요청을 허용한다.

    Allow, Deny

    Method > Allow > AllowIf > Deny > DenyIf 순서로 매치한다.

    • 요청 메소드가 Method 항목에 포함되지 않을 경우: 요청을 거절한다.

    • Allow, AllowIf와 매치하지만 Deny, DenyIf와 매치하지 않은 경우: 요청을 허용한다.

    • 이외 모든 경우: 요청을 거절한다.

Allow

  • 종류: Literal

  • 범위: 8959자 이내

  • 요청이 허용되는 IP 주소나 Network/Netmask들을 설정한다.

  • IP 주소와 Network/Netmask를 다음과 같이 설정한다.

    Allow = "192.168.1.43/255.255.255.0"
  • Allow = "all"은 특수 값으로서 모든 IP 주소를 의미한다.

  • 콤마(,)로 구분하여 최대 256개까지 설정할 수 있다.

Deny

  • 종류: Literal

  • 요청이 거절되는 IP 주소나 Network/Netmask들을 설정한다. 설정 방식은 Allow와 동일하다.

AllowIf

  • 종류: Literal

  • 범위: 255자 이내

  • “<header field name> <regular expression>”으로 설정한다.

  • 요청에 포함된 <header field name> Header 값이 <regular expression>의 패턴과 매치된다. <regular expression>은 Perl compatible regular expression을 사용한다.

  • 1개 이상의 AllowIf 설정도 가능하다.

    AllowIf="Referer http://10.0.0.2/"

DenyIf

  • 종류: Literal

  • 범위: 255자 이내

  • AllowIf와 동일한 방식으로 설정한다.

14.2. 예제

다음은 ACCESS 절을 설정한 예제이다.

*ACCESS
access1
    Order = "allow, deny",
    Allow = "all"

access2
    Order = "allow, deny",
    Allow = "211.1.1.10, 211.1.1.20"

access3
    Order = "allow, deny",
    Allow = "211.1.1.0/255.255.255.0"

access4
    Order = "deny, allow",
    Deny = "211.1.1.30"

access5
    Order = "allow, deny",
    Allow = "all",Deny = "211.1.1.30"

15. AUTHENT 절

클라이언트의 접근을 제한하기 위한 인증 과정을 사용자와 그룹 단위로 통제할 수 있도록 설정한다.

AUTHENT 절은 SVRGROUP 절, URI 절, EXT 절, DIRECTORY 절에 설정되어 인증 과정을 거칠 수 있다.

15.1. 설정 항목

다음은 AUTHENT 절의 환경설정 형식이다.

*AUTHENT
name    # String[32]
    Type = String[32],
    UserFile = Literal[256],            # $ENV, R.PATH
    #AccessName = String[32]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

AUTHENT 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

Type(필수 항목)

  • 종류: String

  • 범위: 31자 이내

  • Authorization control(인가 제어) 방식을 설정한다. Basic과 Digest 방식을 지원한다. 자세한 설정은 인증을 참고한다.

UserFile(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 인증을 실행하기 위한 사용자명과 암호명이 기록되는 파일을 지정한다.

  • WebtoB는 UserFile 관리의 편의를 돕기 위해 'wsmkpw'라는 유틸리티를 제공한다. wsmkpw를 사용하여 사용자명과 암호화(encrypted)된 암호명을 UserFile에 기록할 수 있다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP 대역별로 들어온 요청에 대해 인가 제어를 하는 경우 적용 할 ACCESS 절 이름을 설정한다.

15.2. 예제

다음은 AUTHENT 절을 설정한 예제이다.

*AUTHENT
authent1
    Type = Basic,
    UserFile = "/usr/local/webtob/bin/pwfile"

16. EXT 절

클라이언트가 요구한 파일의 확장자명에 따라 처리 담당 프로세스를 설정한다. WebtoB는 기본적인 모든 MIME-Type에 대한 처리 담당 프로세스가 설정되어 있으나, 필요에 따른 추가적인 설정을 할 경우 이 절에서 할 수 있다.

16.1. 설정 항목

다음은 EXT 절의 환경설정 형식이다.

*EXT
name    # String[32]
   #Mimetype = Literal[128],
   #SvrType = String[32],               # HTML
   #SvrName = String[32],
   #SvcName = String[16],
   #VhostName = String[1024],           # LIST[64], MULTI
   #AccessName = String[32],
   #AuthentName = String[32],
   #Options = Literal[256],             # PM.LIST
   #Charset = Literal[32],
   #SCGI = Boolean,                     # N
   #ScgiServer = Literal[256],
   #Match = Literal[256],               # "exact"
   #RegExp = Literal[512],
   #Priority = Numeric,                 # 50, 0 ~ 100
   #FCGI = Boolean,                     # N
   #Extension = Literal[32]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

EXT 절 이름

  • 종류: String

  • 범위: 31자 이내

  • HTTP Request path의 확장자와 매치할 패턴을 설정한다. 매치되면 해당 요청은 EXT 절의 설정이 적용된다.

  • WebtoB는 여러 가지 패턴 종류를 지원한다. 패턴 종류는 Match 항목에 설정한다.

Mimetype

  • 종류: Literal

  • 범위: 127자 이내

  • 확장자에 해당하는 MIME-Type을 설정한다.

    MimeType = "text/html"

SvrType

  • 종류: String

  • 기본값: HTML

  • 확장자를 처리할 서버의 타입을 설정한다.

SvrName

  • 종류: String

  • 범위: 31자 이내

  • 특정한 서버가 처리하도록 설정할 경우 서버의 이름을 설정한다.

SvcName

  • 종류: String

  • 범위: 15자 이내

  • 특정 서비스에서 처리하도록 설정할 경우 해당 서비스의 이름을 설정한다.

VhostName

  • 종류: String

  • 범위: 1023자 이내

  • EXT가 특정 Virtual Host에 사용될 때 VHOST 절에 정의된 해당 Virtual Host 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP에서 들어온 요청을 허용 또는 거부하는 설정을 EXT 절에 설정할 수 있다.

AuthentName

  • 종류: String

  • 범위: 31자 이내

  • EXT 절에 대해서 인증(Authentication)을 적용할 수 있다. 적용할 EXT에 AUTHENT 절에서 설정한 이름을 설정한다. 단, 서버 타입이 JSV인 경우 SVRGROUP에만 인증을 적용할 수 있다.

Options

  • 종류: Literal

  • 다음은 설정 가능한 옵션에 대한 설명이다.

    옵션 설명

    {+|-}Cache

    Content의 캐시 유무(+|-)를 결정한다.

    SSLRequireSSL

    SSL을 통한 Request만 처리하고, Non-SSL을 통한 Request는 "403 Forbidden"으로 응답한다.

    SSLDenySSL

    Non-SSL을 통한 Request만 처리하고, SSL을 통한 Request는 "403 Forbidden"으로 응답한다.

    UnSet

    기본으로 설정되어 있는 CGI, JSP 등에 대해서 해당 확장자를 EXT 절에서 Unset시킨다. html의 경우 웹 서버의 가장 기본적인 기능이기 때문에 Unset시킬 수 없다.

Charset

  • 종류: Literal

  • Content-Type Header에 추가할 Charset을 설정한다.

    설정 값 설명

    on

    "iso-8859-1"이 사용된다.

    off

    Content-Type Header에 Charset을 추가하지 않는다.

    <custom>

    사용자가 설정한 값을 Charset으로 사용한다.

SCGI

  • 종류: Boolean

  • 기본값: N

  • 'SvrType = CGI’인 경우 요청이 Simple CGI인지 여부를 설정한다.

  • Y로 설정하면 요청을 Simple CGI 방식으로 처리한다. 이때, SCGIServer도 함께 설정해야 한다.

ScgiServer

  • 종류: Literal

  • 범위: 255자 이내

  • Simple CGI 서버 주소를 설정한다.

  • 형식은 "서버 이름(IP 주소):포트 번호"이다.

    SCGIServer = "172.16.1.100:9001"

Match

  • 종류: Literal

  • 기본값: "exact"

  • EXT name에 설정된 패턴의 종류를 설정한다. 패턴 종류에 따라서 HTTP Request path의 확장자와 매치하는 방식이 달라진다.

  • 다음은 설정 가능한 패턴의 종류에 대한 설명이다.

    패턴 종류 설명

    prefix

    설정된 패턴이 확장자의 prefix이다.

    (예: 패턴 "abc"는 "abc", "abc1", "abc12" 등의 확장자와 매치한다.)

    exact

    설정된 패턴이 확장자와 일치한다.

    (예: 패턴 "abc"는 확장자가 "abc"일 경우만 매치한다. 이외 모든 확장자는 매치하지 않는다.)

    regexp

    설정된 패턴이 Perl 스크립트 언어에서 사용되는 Regular expression 이다.

    regexp를 사용하려면 패턴을 RegExp에 설정해야 한다. 이 경우 EXT name의 패턴은 무시된다. (예: 패턴 "jsp[a-z]"은 "jspa", "jspb", "jspx"와 같은 확장자와 매치한다.)

RegExp

  • 종류: Literal

  • 범위: 511자 이내

  • Regular expression을 사용한 패턴을 설정한다.

  • Match = "regexp"인 경우만 적용된다.

Priority

  • 종류: Numeric

  • 범위: 0 ~ 100

  • 기본값: 50

  • 클라이언트의 요구를 처리하는 우선순위 값을 설정한다. 1부터 100까지 설정이 가능하며 숫자가 클수록 높은 우선순위를 갖는다.

FCGI

  • 종류: Boolean

  • 기본값: N

  • 'SvrType = CGI’인 경우 요청이 Fast CGI인지 설정한다.

  • Y로 설정하면 요청을 Fast CGI 방식으로 처리한다.

Extension

  • 종류: Literal

  • 범위: 31자 이내

  • EXT 절 이름이 아닌 다름 값을 확장자로 사용할 경우 설정한다.

16.2. MIME-Type

대부분의 알려진 MIME-Type은 기본으로 제공된다.

다음 리스트에 있는 항목들은 EXT 절에 설정할 필요는 없다. 단, 모두 HTML을 처리하는 Worker Thread 처리하므로, 해당 확장자를 다른 서버에서 처리할 경우 EXT 절에 처리할 SvrType으로 설정해야 한다.

Extension MIME-Type Extension MIME-Type

avi

"video/video-x-msvideo"

asc

"text/plain"

au

"audio/basic"

ai

"application/postscript"

aif

"audio/x-aiff"

aiff

"audio/x-aiff"

af

"audio/x-aiff"

aifc

"audio/x-aiff"

bmp

"image/bmp"

bin

"application/octet-stream"

bcpio

"application/x-bcpio"

cpio

"application/x-cpio"

csh

"application/x-csh"

cpt

"application/mac-compactpro"

class

"application/octet-stream"

cdf

"application/x-netcdf"

css

"text/css"

doc

"application/msword"

dvi

"application/x-dvi"

dms

"application/octet-stream"

dcr

"application/x-director"

dir

"application/x-director"

dxr

"application/x-director"

eps

"application/postscript"

exe

"application/octet-stream"

ez

"application/andrew-inset"

etx

"text/x-setext"

gif

"image/gif"

gtar

"application/x-gtar"

html

"text/html"

htm

"text/html"

hqx

"application/mac-binhex40"

hdf

"application/x-hdf"

hwp

"application/x-hwp"

hif

"application/x-hif"

hpt

"application/x-hpt"

hst

"application/x-hst"

ief

"image/ief"

igs

"model/iges"

iges

"model/iges"

ice

"x-conference/x-cooltalk"

jpg

"image/jpeg"

js

"application/x-javascript"

jpeg

"image/jpeg"

jpe

"image/jpeg"

kar

"audio/midi"

latex

"application/x-latex"

lha

"application/octet-stream"

lzh

"application/octet-stream"

mpg

"video/mpeg"

mpeg

"video/mpeg"

mpe

"video/mpeg"

mid

"audio/midi"

midi

"audio/midi"

mov

"video/quicktime"

mif

"application/vnd.mif"

man

"application/x-troff-man"

me

"application/x-troff-me"

ms

"application/x-troff-ms"

mpga

"audio/mpeg"

mp2

"audio/mpeg"

mp3

"audio/mpeg"

msh

"model/mesh"

mesh

"model/mesh"

movie

"video/video-x-sgi-movie"

nc

"application/x-netcdf"

oda

"application/oda"

pdf

"application/pdf"

ps

"application/postscript"

ppt

"application/vnd.ms-powerpoint"

pgn

"application/x-chess-pgn"

pdb

"chemical/x-pdb"

png

"image/png"

pnm

"image/x-portable-anymap"

pbm

"image/x-portable-bitmap"

pgm

"image/x-portable-graymap"

ppm

"image/x-portable-pixmap"

qt

"video/quicktime"

rtf

"application/rtf"

ra

"audio/x-realaudio"

rgb

"image/x-rgb"

roff

"application/x-troff"

rmm

"audio/x-pn-realaudio"

ram

"audio/x-pn-realaudio"

rm

"application/vnd.rn-realmedia"

rpm

"application/x-rpm"

ras

"image/x-cmu-raster"

rtx

"text/richtext"

rt

"text/vnd.rn-realtext"

rv

"video/vnd.rn-realvideo"

rf

"image/vnd.rn-realflash"

rp

"image/vnd.rn-realpix"

sgm

"text/sgml"

src

"application/x-wais-source"

snd

"audio/basic"

smi

"application/smil"

smil

"application/smil"

spl

"application/x-futuresplash"

skp

"application/x-koan"

skd

"application/x-koan"

skt

"application/x-koan"

skm

"application/x-koan"

sh

"application/x-sh"

shar

"application/x-shar"

swf

"application/x-shockwave-flash"

sit

"application/x-stuffit"

sv4cpio

"application/x-sv4cpio"

sv4crc

"application/x-sv4crc"

silo

"model/mesh"

sgml

"text/sgml"

sdp

"application/sdp"

txt

"text/plain"

tar

"application/x-tar"

tcl

"application/x-tcl"

tex

"application/x-tex"

texinfo

"application/x-texinfo"

texi

"application/x-texinfo"

t

"application/x-troff"

tr

"application/x-troff"

tiff

"image/tiff"

tif

"image/tiff"

tsv

"text/tab-separated-values"

ustar

"application/x-ustar"

vrml

"model/vrml"

vcd

"application/x-cdlink"

wav

"audio/x-wav"

wrl

"model/vrml"

xls

"application/vnd.ms-excel"

xyz

"chemical/x-pdb"

xbm

"image/x-xbitmap"

xpm

"image/x-pixmap"

xwd

"image/x-windowdump"

xml

"text/xml"

zip

"application/zip"

16.3. 예제

다음은 EXT 절을 설정한 예제이다.

*EXT
htm
    Mimetype = "text/html",
    SvrType = HTML
php4
    Mimetype = "text/html",
    SvrType = PHP
do
    Mimetype = "text/html",
    SvrType = JSV

17. SSL 절

WebtoB에서 사용할 SSL의 기능을 설정한다. 해당 절에 정의된 형태로 SSL 서비스를 한다.

17.1. 설정 항목

다음은 SSL 절의 환경설정 형식이다.

*SSL
name    # String[32]
    CertificateFile = Literal[256],     # $ENV, R.PATH
    CertificateKeyFile = Literal[256],  # $ENV, R.PATH
   #CACertificatePath = Literal[256],   # $ENV, R.PATH
   #CACertificateFile = Literal[256],   # $ENV
   #CertificateChainFile = Literal[256], # $ENV, R.PATH
   #VerifyDepth = Numeric,              # 0 (0-)
   #VerifyClient = Numeric,             # 0 (0-3)
   #FakeBasicAuth = Boolean,            # N
   #Protocols = Literal[256],           # LIST
   #RequiredCiphers = Literal[1024],    # LIST
   #RequiredCiphersV1_3 = Literal[1024],# LIST
   #RandomFile = Literal[256],          # $ENV, R.PATH
   #RandomFilePerConnection = Literal[256], # $ENV, R.PATH
   #PassPhraseDialog = Literal[256],    # $ENV, R.PATH
   #CryptoDevice = Literal[256],        # "builtin"
   #RenegotiationLevel = String[256],   # secure (secure, insecure, disable)
   #DHParameter = Literal[256],         # $ENV, R.PATH
   #Options = Literal[256],             # PM.LIST
   #SSLServerCipherPref = Boolean,      # N
   #SSLStapling = Boolean,              # N

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

SSL 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 설정한다.

CertificateFile(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • PEM 방식으로 인코딩된 서버의 인증서를 설정한다. 이것은 DER 규칙으로 인코딩되어 있으며 웹에서 전송하기 위해서 ASCII 코드처럼 이용된다. 만일 인증서 역시 암호화된 상태라면 비밀번호(passphrase)를 물어본다.

  • 콤마(,)로 구분하여 4개까지 설정할 수 있다.

    CertificateKeyFile의 설정 개수와 같아야 한다.

CertificateKeyFile(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 서버에서 쓰이는 PEM 방식으로 인코딩된 인증서의 개인 Key를 설정한다.

  • Key가 인증서와 함께 조합되지 않았다면 이 지시자를 이용하여 Key의 위치를 지정해야 한다. 일반적으로 WebtoB의 SSL 디렉터리에 가져다 두게 된다.

  • 콤마(,)로 구분하여 4개까지 설정할 수 있다.

    CertificateFile의 설정 개수는 같아야 한다.

CACertificatePath

  • 종류: Literal

  • 범위: 255자 이내

  • 인증서를 저장할 디렉터리를 설정한다.

  • 인증서는 받아들이기 위해 준비할 사용자의 인증서를 인증할 내용을 담고 있다. 인증서는 보통 PEM 방식으로 인코딩되어 있어야 한다.

CACertificateFile

  • 종류: Literal

  • 범위: 255자 이내

  • 단일 CA(Certificate Agent: 인증을 대신해 주는 기업)로부터의 사용자 인증만 받고 싶다면 CACertificatePath 지시자가 아닌, 이 지시자를 이용하여 단일 PEM으로 인코딩된 인증 파일을 사용해야 한다.

CertificateChainFile

  • 종류: Literal

  • 범위: 255자 이내

  • 서버 인증서(Certificate)의 인증서 연쇄(Certificate Chain)를 구성할 때 필요한 상위 인증기관들(CAs)의 인증서(Certificate) 경로를 설정한다. 단, 클라이언트의 인증(Authentication)을 사용하기 위해서는 CACertificateFile이나 CACertificatePath에 설정해야 한다.

VerifyDepth

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 실제 업무에 적용되는 경우에 인증에서 개입할 부분은 순서대로 다른 CA에 의해서 서로를 인증하는 CA에 관한 것이다. VerifyDepth 항목은 얼마나 깊은 레벨로 연결된 CA들을 추적하여 인증할 것인지를 설정한다. 단 하나의 인증 CA만 필요하다면 1로 설정한다.

VerifyClient

  • 종류: Numeric

  • 기본값: 0

  • 사용자에게 요청할 인증 레벨을 설정한다.

  • 다음은 인증 레벨에 대한 설명이다.

    레벨 설명

    0

    아무런 인증 요청을 하지 않는다.

    1

    사용자는 사용 가능한 인증을 서버에게 보여 주어야 한다.

    2

    사용 가능한 인증을 반드시 서버에게 보여 주어야 한다.

    3

    사용자는 사용 가능한 인증을 보여 주어야 하며 만일 서버가 인증서를 가지고 있지 않은 상황에서는 인증서 인증 과정이 필요 없다.

FakeBasicAuth

  • 종류: Boolean

  • 기본값: N

  • 사용자 측의 인증 버전인 한 줄짜리 사용자 이름을 배제한 기본 인증 과정을 통해서 마치 인증한 것처럼 보여 준다. 만약 이 지시자를 VerifyClient 지시자와 함께 설정하면 결과는 로그 파일에서 볼 수 있을 것이다. 코드에 미리 정해진 비밀번호를 추가해 둔다.

Protocols

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "TLSv1, TLSv1.1, TLSv1.2, TLSv1.3"

  • 서버가 사용할 수 있는 프로토콜을 설정한다. 특정 TLS 버전에 대한 지원 여부를 설정할 수 있다. "SSLv2", "SSLv3"는 더이상 지원하지 않는다.

  • 특정 프로토콜을 사용하지 않을 경우 프로토콜 이름 앞에 하이픈(-)을 설정한다.

  • 동일한 포트를 사용하는 호스트가 여러 개 설정될 경우 가장 먼저 기재된 호스트의 *SSL.Protocols 설정만 적용될 수 있다.

RequiredCiphers

  • 종류: Literal

  • 범위: 1023자 이내

  • 기본값: "HIGH:!RSA"

  • 서버가 사용할 수 있는 TLS 1.3이하의 cipher를 설정한다. 특정 cipher 및 SSL, TLS 버전에 대한 지원 여부를 설정할 수 있다. WebtoB는 OpenSSL을 사용하기 때문에 cipher 이름은 OpenSSL 설명서를 참고한다 .

RequiredCiphersV1_3

  • 종류: Literal

  • 범위: 1023자 이내

  • 기본값: <OpenSSL default>

  • 서버가 사용할 수 있는 TLS 1.3에 해당하는 cipher를 설정한다. 특정 cipher 및 SSL, TLS 버전에 대한 지원 여부를 설정할 수 있다. WebtoB는 OpenSSL을 사용하기 때문에 cipher 이름은 OpenSSL 설명서를 참고한다 .

RandomFile

  • 종류: Literal

  • 범위: 255자 이내

  • SSL에서 이용할 Random Seed를 위한 파일을 선택하는 것이다. 이 파일을 임의로 선택하면, WebtoB는 SSL을 위한 암호를 만들 때 이 파일에서 임의의 값을 추출하여 Random Seed를 만든다.

RandomFilePerConnection

  • 종류: Literal

  • 범위: 255자 이내

  • RandomFile을 설정할 때 실제 각 SSL을 통한 연결을 맺을 때 몇 개의 파일을 이용하여 Random Seed를 만들 것인지 설정한다.

PassPhraseDialog

  • 종류: Literal

  • 기본값: "builtin"

  • SSL을 사용하는 경우 암호화된 개인키(encrypted private key) 파일들에 대한 암호문을 얻기 위한 방식을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 내용

    builtin

    WebtoB가 기동될 때 암호문을 입력할 것을 요구한다.

    exec:<program path>

    WebtoB가 기동될 때 해당 프로그램을 실행하고, 그 출력 결과를 암호문으로 사용한다. exec로 실행되는 파일은 컴파일된 실행 파일이나 쉘 스크립트가 이용될 수 있다.

    file:<passphrase file path>

    WebtoB가 기동될 때 wsmkppd 툴을 이용하여 생성된 passphrase file을 이용하여 암호문을 사용한다.

CryptoDevice

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "builtin"(OpenSSL에서 구현한 방식을 사용한다.)

  • 외부 암호화 장비를 사용하는 경우 설정한다.

RenegotiationLevel

  • 종류: String

  • 범위: 255자 이내

  • 기본값: secure

  • SSL을 사용하는 경우 재협상(Renetotiation)의 레벨(Level)을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 내용

    secure

    클라이언트와 웹 서버가 모두 안전한 경우 재협상을 진행한다. (예: RFC5746)

    insecure

    클라이언트와 웹 서버가 안전하지 않더라도 재협상을 진행한다. (예: CVE-2009-3555)

    disable

    어떠한 경우에도 재협상을 진행하지 않는다.

    안전하지 않은 경우 재협상이 진행되면 MITM(Man in the Middle) Attack 또는 DoS(Denial of Service) Attack에 취약할 수 있기 때문에 주의해야 한다.

DHParameter

  • 종류: Literal

  • 범위: 255자 이내

  • 암호화 통신 보안 강화를 위해 새롭게 생성한 고유의 Diffie-Hellman group을 사용할 수 있도록 설정한다.

    다음은 Diffie-Hellman group 생성 방법이다. (2048bit)

    wbssl dhparam -out dhparams.pem 2048

SSLServerCipherPref

  • 종류: Boolean

  • 기본값: N

  • SSL 알고리즘을 선택하는 경우 RequiredCiphers에 등록된 순서대로 사용할지 여부를 결정한다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 다음은 설정 가능한 옵션에 대한 설명이다.

    옵션 내용

    StdEnvVars

    SSL Handshake 과정에 사용된 기본 정보를 CGI/PHP, JEUS, Reverse Proxy 내부 서버에서 사용 가능하도록 SSL 환경변수 또는 HTTP Request Header 값을 생성한다.

    • CGI/PHP 서버에서 사용 가능한 환경변수: SSL_SESSION_ID(SSL session id), SSL_CIPHER(사용된 cipher), SSL_CIPHER_USEKEYSIZE(사용된 cipher bit)이다.

    • JEUS 또는 Reverse Proxy 내부 서버에서 사용 가능한 HTTP Request Header: WJP-SSL-SESSION-ID(SSL session id), WJP-SSL-CIPHER(사용된 cipher), WJP-SSL-CIPHER-USEKEYSIZE(사용된 cipher bit)이다.

    다음은 각 언어별 예이다.

    • CGI

      c - getenv("SSL_CIPHER") perl - $ENV{'SSL_CIPHER'}
    • PHP

      $_SERVER['SSL_CIPHER']
    • JSP

      request.getHeader("WJP-SSL-CIPHER")

    ExportClientCert

    클라이언트 인증을 실행하는 경우(VerifyClient = 2 설정을 적용한 경우) 클라이언트 인증서를 CGI/PHP, JEUS, Reverse Proxy 내부 서버에서 사용 가능하도록 SSL 환경변수 또는 HTTP Request Header 값을 생성한다. 클라이언트 인증서의 확장필드(Extension Fields - Key Usage, Certificate Policies, CRL Distribution Points 등)를 처리하기 위해서는 해당 설정으로 클라이언트 인증서 정보를 얻어 파싱 후 사용해야 한다.

    • CGI/PHP 서버에서 사용 가능한 환경변수: SSL_CLIENT_CERT(클라이언트 인증서-PEM 인코딩된 String 값)이다.

    • JEUS 서버 또는 Reverse Proxy 내부 서버에서 사용가능한 HTTP Request Header: WJP-SSL-CLIENT-CERT(클라이언트 인증서-PEM 인코딩된 String 값)이다.

    다음은 각 언어별 예이다.

    • CGI

      c - getenv("SSL_CLIENT_CERT") perl - $ENV{'SSL_CLIENT_CERT'}
    • PHP

      $_SERVER['SSL_CLIENT_CERT']
    • JSP

      request.getHeader("WJP-SSL-CLIENT-CERT")

SSLServerCipherPref

  • 종류: Boolean

  • 기본값: N

  • Apache의 SSLHonorCipherOrder나 nginx의 ssl_prefer_server_ciphers와 유사한 기능으로 *SSL.SSLServerCipherPref를 설정하여 RequiredCiphers에 등록된 순서대로 사용할지 여부를 결정할 수 있다

SSLStapling

  • 종류: Boolean

  • 기본값: N

  • WebtoB SSL이 OCSP(Online Certificate Status Protocol) stapling 방식으로 동작할지 여부를 결정한다.

17.2. CA 명령어 사용

UNIX에서 사용하는 CA 명령어에 대해서 설명한다.

CertificateFile 또는 CertificateKeyFile 등의 항목을 통하여 사용자 인증을 위한 Key 및 인증서가 있는 파일의 위치를 설정할 수 있다. 보통 외부 보안 업체에서 이 Key를 발급 받아서 이용하는 경우도 있으나, 서버의 관리자가 이를 직접 만들어서 접속하는 사용자와 보안에 관한 정보를 직접 주고받는 것도 가능하다. 이때 서버는 CA라는 프로그램을 사용해서 보안에 대한 Key 및 인증서를 생성한다.

CA 프로그램은 WebtoB의 실행 디렉터리(/bin) 아래에 존재한다.

  • 인증서 생성

    실제 서버가 인증서를 만드는 작업으로 CA 명령어를 사용해서 사용자에게 인증에 필요한 정보를 내보낸다. 명령어를 통하여 새로운 인증서를 만들어 내는 경우 개인 Key와 인증서가 생성된다. 인증서를 생성하는 경우 비밀번호를 입력하는데, WebtoB를 기동시킬 때 비밀번호를 물어본다. 인증서를 생성할 때 입력한 비밀번호와 동일한 비밀번호를 입력해야 WebtoB의 기동이 가능하다. 따라서 입력한 비밀번호는 반드시 기억해야 한다.

    $ CA -newcert
  • 인증서 확인

    입력으로 들어온 파일에 대하여 정당한 것인지 확인한다.

    $ CA -newca
  • Certificate Request Form 생성

    특정한 Request Form를 생성하면 Verisign 등에서 인증서를 제작하거나 인증을 하는 기관에서 필요로 하게 된다. 외부 인증 기관에 필요한 인증 Request Form을 만들어 낸다.

    $ CA -newreq
  • Sign 기입

    만들어진 Key에 Sign을 입력한다.

    $ CA -sign

기타 SSL에 관련된 정보를 알고 싶다면 다른 Reference나 관련 사이트를 참고한다. SSL 자체가 상당히 복잡하고 많은 내용을 담고 있기 때문에 이를 자세하게 설명하는 것은 불가능하므로, 가급적 관련 자료를 보기를 권한다.

17.3. 예제

다음은 SSL 절을 설정한 예제이다.

*SSL
ssl1
    CertificateFile = "/user/webtob/ssl/newcert.pem",
    CertificateKeyFile = "/user/webtob/ssl/newcert.pem",
    PassPhraseDialog = "exec: /user/webtob/ssl/pass.sh"

18. PROXY_SSL 절

WebtoB가 Proxy 역할을 할 때 사용할 SSL의 기능을 설정한다. 해당 절에 정의된 형태로 SSL 서비스한다.

18.1. 설정 항목

다음은 PROXY_SSL 절의 환경설정 형식이다.

*PROXY_SSL
name    # String[32]
    Verify = Numeric,                   # 0 (0-3)
   #VerifyDepth = Numeric,              # 0 (0-)
   #CACertificatePath = Literal[256],   # $ENV, R.PATH
   #CACertificateFile = Literal[256],   # $ENV
   #CheckPeerValidPeriod = Boolean,     # N
   #Protocols = Literal[256],           # LIST
   #RequiredCiphers = Literal[1024],    # LIST
   #RequiredCiphersV1_3 = Literal[1024],# LIST
   #CertificateFile = Literal[256],     # $ENV, R.PATH
   #CertificateKeyFile = Literal[256],  # $ENV, R.PATH
   #CertificateChainFile = Literal[256], # $ENV, R.PATH
   #PassPhraseDialog = Literal[256],     # $ENV, R.PATH
   #SSLStapling = Boolean               # N

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

PROXY_SSL 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 설정한다.

Verify

  • 종류: Numeric

  • 기본값: 0

  • 내부 서버의 인증서에 대하여 인증 타입을 설정한다.

  • 다음은 인증 타입에 대한 설명이다.

    레벨 설명

    0

    내부 서버의 인증서 인증 과정을 진행하지 않는다.

    1

    내부 서버는 사용 가능한 인증을 보여 주어야 하며 WebtoB가 내부 서버의 인증서를 받은 경우 인증서 인증 과정을 진행한다.

    2

    내부 서버는 사용 가능한 인증을 반드시 보여 주어야 하며 WebtoB가 내부 서버의 인증서 인증 과정을 진행한다.

    3

    내부 서버는 사용 가능한 인증을 보여 주어야 하며 WebtoB가 인증서를 가지고 있지 않은 상황에서는 내부 서버의 인증서 인증 과정을 진행하지 않는다.

VerifyDepth

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 실제 업무에 적용되는 경우에 인증에서 개입할 부분은 순서대로 다른 CA에 의해서 서로를 인증하는 CA에 관한 것이다. VerifyDepth 항목은 얼마나 깊은 레벨로 연결된 CA들을 추적하여 인증할 것인지를 설정한다. 단 하나의 인증 CA만 필요하다면 1로 설정한다.

CACertificatePath

  • 종류: Literal

  • 범위: 255자 이내

  • 인증서를 저장할 디렉터리를 설정한다.

  • 인증서는 연결하기 위해 준비할 서버의 인증서를 인증할 내용을 담고 있다. 인증서는 보통 PEM 방식으로 인코딩되어 있어야 한다.

CACertificateFile

  • 종류: Literal

  • 범위: 255자 이내

  • 단일 CA(Certificate Agent: 인증을 대신해 주는 기업)로부터의 서버 인증만 받고 싶다면 CACertificatePath 지시자가 아닌 이 지시자를 이용하여 단일 PEM으로 인코딩된 인증 파일을 사용해야 한다.

CheckPeerValidPeriod

  • 종류: Literal

  • 기본값: N

  • 내부 서버의 인증서 인증과정을 진행하는 경우 인증서의 유효기간을 검증할 지 여부를 설정한다 .

Protocols

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "TLSv1, TLSv1.1, TLSv1.2, TLSv1.3"

  • 클라이언트가 사용할 수 있는 프로토콜을 설정한다. 특정 SSL, TLS 버전에 대한 지원 여부를 설정할 수 있다. "TLSv1.1, TLSv1.2"는 WBSSL 1.0.1 이상인 경우에 지원한다. "SSLv2, SSLv3"는 더이상 지원하지 않는다.

  • 특정 프로토콜을 사용하지 않을 경우 프로토콜 이름 앞에 하이픈(-)을 설정한다.

RequiredCiphers

  • 종류: Literal

  • 범위: 1023자 이내

  • 기본값: "HIGH:!RSA"

  • 클라이언트가 사용할 수 있는 TLS 1.3이하의 cipher를 설정한다. 특정 cipher 및 SSL, TLS 버전의 지원 여부를 설정할 수 있다. WebtoB는 OpenSSL을 사용하기때문에, cipher 이름은 OpenSSL 설명서를 참고한다 .

RequiredCiphersV1_3

  • 종류: Literal

  • 범위: 1023자 이내

  • 기본값: <OpenSSL default>

  • 서버가 사용할 수 있는 TLS 1.3에 해당하는 cipher를 설정한다. 특정 cipher 및 SSL, TLS 버전에 대한 지원 여부를 설정할 수 있다. WebtoB는 OpenSSL을 사용하기 때문에 cipher 이름은 OpenSSL 설명서를 참고한다 .

CertificateFile

  • 종류: Literal

  • 범위: 255자 이내

  • PEM 방식으로 인코딩된 클라이언트 인증서를 설정한다. 내부 서버가 클라이언트 인증을 원하는 경우 반드시 설정해야 한다. 이것은 DER 규칙으로 인코딩되어 있으며 웹에서 전송하기 위해서 ASCII 코드처럼 이용된다. 만일 인증서 역시 암호화된 상태라면 비밀번호(passphrase)를 물어본다.

CertificateKeyFile

  • 종류: Literal

  • 범위: 255자 이내

  • 클라이언트로 쓰이는 PEM 방식으로 인코딩된 인증서의 개인 Key를 설정한다. 내부 서버가 클라이언트 인증을 원하는 경우 반드시 설정해야 한다.

  • Key가 인증서와 함께 조합되지 않았다면 이 지시자를 이용하여 Key의 위치를 지정해야 한다. 일반적으로 WebtoB의 SSL 디렉터리에 가져다 두게 된다.

CertificateChainFile

  • 종류: Literal

  • 범위: 255자 이내

  • 클라이언트 인증서(Certificate)의 인증서 연쇄(Certificate Chain)를 구성할 때 필요한 상위 인증기관들(CAs)의 인증서(Certificate) 경로를 설정한다.

PassPhraseDialog

  • 종류: Literal

  • 기본값: "builtin"

  • PROXY_SSL에서 클라이언트 인증(CertificateFile, CertificateKeyFile)을 사용하는 경우 암호화된 개인키(encrypted private key) 파일들에 대한 암호문을 얻기 위한 방식을 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    builtin

    WebtoB가 기동될 때 암호문을 입력할 것을 요구한다.

    exec:<program path>

    WebtoB가 기동될 때 해당 프로그램을 실행하고, 그 출력 결과를 암호문으로 사용한다. exec로 실행되는 파일은 컴파일된 실행 파일이나 셸스크립트가 이용될 수 있다.

    file:<passphrase file path>

    WebtoB가 기동될 때 wsmkppd 툴을 이용하여 생성된 passphrase file을 이용하여 암호문을 사용한다.

SSLStapling

  • 종류: Boolean

  • 기본값: N

  • WebtoB SSL이 OCSP(Online Certificate Status Protocol) stapling 방식으로 동작할지 여부를 결정한다.

18.2. 예제

다음은 SSL 절을 설정한 예제이다.

*PROXY_SSL
proxy_ssl1
    Verify = 2,      # 내부 서버 인증서 인증절차 진행
    VerifyDepth = 1,
    CACertificateFile="/user/webtob/ssl/server.crt",
    CheckPeerValidPeriod = Y

19. ERRORDOCUMENT 절

WebtoB에서 에러 문제가 발생했을 때 다음과 같은 4가지 방법으로 대응할 수 있다.

  1. 소스코드에 정의된 에러 메시지를 출력한다.

  2. 사용자가 정의한 에러 메시지를 출력한다.

  3. 로컬 URL로 재전송한다.

  4. 외부 URL로 재전송한다.

2번째, 3번째, 4번째의 경우엔 ErrorDocument Section을 설정하여 특정 HTTP Response Status Code 값에 대한 특정 페이지로 Redirect를 시켜준다. HTTP 401 Status Code를 제외한 HTTP Status Code를 모두 설정할 수 있다.

19.1. 설정 항목

다음은 ERRORDOCUMENT 절의 환경설정 형식이다.

*ERRORDOCUMENT
name    # String[32]
    Status = Numeric,                   # (HTTP status code)
    #MultiStatus = Literal[256],         # (HTTP status code)
    Url = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

ERRORDOCUMENT 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

Status(필수 항목)

  • 종류: Numeric

  • HTTP Status Code 값을 설정한다.

MultiStatus

  • 종류: Literal

  • 범위: 255자 이내

  • 동일한 url에 대해 여러 개의 HTTP Status Code 값을 설정한다.

  • Status와 MultiStaus 중 반드시 한 개 이상 설정해야 하며 동시에 설정할 수도 있다. 동시에 설정한 경우 명시된 순서대로 적용된다.

Url(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • DocRoot 이하의 상대 경로가 되거나 클라이언트가 해석할 수 있는 전체 경로 값을 설정한다.

19.2. 예제

다음은 ERRORDOCUMENT 절을 설정한 예제이다.

*ERRORDOCUMENT
forbidden403
    Status = 403,
    Url = "err/403.html"
notfound404
    Status = 404,
    Url = "http://www.tmax.co.kr/404.html"

20. EXPIRES 절

EXPIRES 절은 클라이언트 요청에 따라 전송되는 서버 Response Header의 정보를 설정한다.

특정 MIME-Type 문서를 전송할 때 서버 Response Header 내에 전송되는 문서의 Expiry Date를 설정한다. 클라이언트의 브라우저 프로그램이 같은 웹 사이트에 재접속했을 때 이미 캐시에 해당 사이트의 웹 문서가 저장되어 있다면 수정된 문서만을 받으려고 할것이다.

클라이언트의 브라우저는 웹 서버에게 특정 MIME-Type과 해당 MIME의 만료일자를 보내면서 Expiry Date가 경과된 문서만을 재전송해 달라고 웹 서버에게 요청한다. 웹 서버는 클라이언트의 Request Header에 포함된 MIME-Type과 Expiry Date를 분석하고 해당 MIME-Type 문서가 현재 일자보다 기간이 경과되었을 때는 재전송한다.

클라이언트가 웹 서버에게 보내는 Expiry Date는 웹 서버가 설정 파일을 참조해서 클라이언트에게 전송한다. EXPIRES 절은 Expiry Date의 설정과 관계되는 것을 정의한다.

20.1. 설정 항목

다음은 EXPIRES 절의 환경설정 형식이다.

*EXPIRES
name    # String[32]
    ExpiresTime = Literal[256],
   #Mimetype = Literal[128],
   #Url = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

EXPIRES 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

ExpiresTime(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 아래와 같이 2가지 방법으로 Expiry Date를 설정한다. ExpiresTime만 설정한 경우 모든 요청에 대해 Expiry Date를 Response Header에 설정한다.

    • <code><seconds>

      항 목 설명

      <code>

      • 'M': file Modification date + <seconds>로 Expiry Date를 설정한다.

      • 'A': Access time + <seconds>로 Expiry Date를 설정한다.

      <second>

      일반적으로 사용되는 시간 주기(seconds)를 설정한다.

      • 1 hour(3600)

      • 1day(86400)

      • 1week(604800)

      • 1moth(241920)

    • <base> [plus] {<num> <type>}*

      항 목 설명

      <base>

      • 'access' or 'now' : access time

      • 'modification' : file modification date

      [plus]

      optional

      <num>

      integer value

      <type>

      • ‘years’

      • ‘months’

      • ‘weeks’

      • ‘days’

      • ‘hours’

      • ‘minutes’

      • ‘seconds’

      • ‘year’

      • ‘month’

      • ‘week’

      • ‘day’

      • ‘hour’

      • ‘minute’ or ‘second’

Mimetype

  • 종류: Literal

  • 범위: 127자 이내

  • 응답의 MIME-Type에 따라 Expiry Date를 설정할 수 있다.

Url

  • 종류: Literal

  • 범위: 255자 이내

  • Request URL이 일치하면 해당 Expiry Date를 설정할 수 있다.

20.2. 예제

다음은 EXPIRES 절을 설정한 예제이다.

*EXPIRES
exp1
    MimeType = "text/html",
    ExpiresTime = "A604800"
exp2
    MimeType = "image/gif",
    ExpiresTime = "A2419200"
exp3
    ExpiresTime = "A86400"
exp4
    Url = "/news/",
    ExpiresTime = "modification 1 days"
exp5
    MimeType = "text/html",
    ExpiresTime = "access plus 1 weeks"
exp6
    ExpiresTime = "M86400"
exp7
    Url = "/image/",
    MimeType = "image/gif",
    ExpiresTime = "access plus 1 months"
exp8
    MimeType = "text/html",
    ExpiresTime = "M86400"

21. TCPGW 절

TCPGW 절은 특정 Port나 IP 주소로 들어오는 TCP 연결을 다른 서버로 전송하는 중계(proxy)하는 역할을 한다. TCPGW는 전송되는 데이터를 전혀 해석하지 않는다. AccessLog는 남기지 않으며, 클라이언트가 접속하거나 접속을 종료할 때 SysLog를 남긴다.

21.1. 설정 항목

다음은 TCPGW 절의 환경설정 형식이다.

*TCPGW
name    # String[32]
    ServerAddress = Literal[1024],      # LIST[100]
   #Port = Literal[1024],               # (1-65535), LIST[100]
   #Listen = Literal[1024],             # LIST[100]
   #SSLFlag = Boolean,                  # N
   #SSLName = String[32],
   #Timeout = Numeric,                  # 300 (0-)
   #CheckAliveTime = Numeric,           # 0 (0-)
   #ConnectTimeout = Numeric,           # 5 (0-)
   #ConnectDirection = String[256],     # "CS"
   #Schedule = String[256],             # "RR"
   #AccessName = String[32],
   #ClientConnectionLog = Boolean,      # Y
   #ProxyProtocol = Boolean             # Y

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

TCPGW 절 이름

  • 종류: String

  • 범위: 31자 이내

  • 절 이름을 정의한다.

ServerAddress(필수 항목)

  • 종류: Literal

  • 범위: 1023자 이내

  • 클라이언트의 요청을 처리할 서버들의 IP 주소와 포트 번호를 설정한다.

  • 여러 개의 서버 IP 주소와 포트 번호를 설정하는 것도 가능하며, 현재는 최대 100개까지의 서버 IP 주소와 포트 번호를 동시에 설정하는 것이 가능하다. 현재 설정된 서버들 간의 분배규칙은 Round Robin만 지원한다.

Port

  • 종류: Literal

  • 범위: 1023자 이내

  • 웹 서버에서 클라이언트의 요청을 대기하는 포트 번호를 설정한다.

  • 여러 Port를 동시에 정의하는 것도 가능하며, 현재는 최대 100개까지의 포트 번호를 동시에 설정할 수 있다. Port의 설정을 통해서 여러 개의 포트 번호가 동시에 대기하는 것이 가능하다.

    Port와 Listen 항목이 같이 설정된 경우 Port 설정은 무시된다.

Listen

  • 종류: Literal

  • 범위: 1023자 이내

  • 웹 서버에서 클라이언트의 요청을 대기하는 IP 주소와 포트 번호를 설정한다.

  • 여러 개의 IP 주소와 포트 번호를 설정하는 것도 가능하며, 현재는 최대 100개까지의 IP 주소와 포트 번호를 동시에 설정하는 것이 가능하다. 여러 개의 IP 주소를 가진 서버인 경우 특정 IP 주소를 통한 요청만 받아들이기 위해서 사용할 수 있다.

SSLFlag

  • 종류: Boolean

  • 기본값: N

  • SSL을 적용할 경우 설정한다.

SSLName

  • 종류: String

  • 범위: 31자 이내

  • 사용할 SSL 절 이름을 설정한다.

Timeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 300

  • 사용자가 요청 후 해당 서버로부터 지정된 시간 동안 응답이 없는 경우 접속을 종료하기 위한 시간을 설정한다.

  • 해당 시간을 0으로 설정하게 되면, TimeOut을 적용하지 않겠다는 의미이다.

CheckAliveTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • ServerAddress에 설정한 요청을 분배할 서버 중 서버에 장애가 발생한 경우 매 요청할 때마다 그 상태를 확인하지 않고, 최초 한 번만 접속하여 장애가 확인되면 다음 요청할 때에는 분배에서 제외한다.

  • 장애가 발생한 서버를 CheckAliveTime 간격으로 상태를 확인하여 다음 요청할 때 분배에 포함시킬 것인지 아닌지를 결정한다.

  • CheckAliveTime를 0으로 지정한 경우 기존의 방식처럼 매 요청할 때마다 서버 상태를 확인하게 된다.

ConnectTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 5

  • 클라이언트의 요청을 WebtoB TCP 게이트웨이가 받아서 설정된 상대 서버로 접속을 시도할 때 일정시간 동안 접속 요구에 대한 응답이 없으면 다른 서버로 재분배되도록 시간을 설정한다.

  • 해당 시간을 0으로 설정하게 되면, ConnectTimeOut을 적용하지 않겠다는 의미이다.

ConnectDirection

  • 종류: String

  • 범위: CS | SC

  • 기본값: CS

  • 연결 방향이 Client to Server(CS)인지, Server to Client(SC)인지 설정한다.

Schedule

  • 종류: String

  • 범위: RR | FA

  • 기본값: RR

  • 외부 서버를 여러 개 설정하였을 경우 요청을 분배하는 방식을 설정한다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • ACCESS 절의 AccessName에 설정된 규칙에 따라 사용자 접속의 허용 여부를 설정한다.

ClientConnectionLog

  • 종류: Boolean

  • 기본값: Y

  • 클라이언트가 TCP 게이트웨이 포트에 연결을 맺거나 이미 맺어진 연결을 종료하는 경우 해당 정보를 SysLog에 남길지 여부를 설정한다 .

ProxyProtocol

  • 종류: Boolean

  • 기본값: N

  • Y로 설정시 웹투비와 연결된 클라이언트에 대한 정보를 얻어서 proxy protocol 포맷에 맞춰 작성후, TCP data 를 보내기 앞서 proxy protocol 을 먼저 보내도록 한다. (proxy protocol v1)

21.2. 예제

다음은 TCPGW 절을 설정한 예제이다.

*TCPGW
tcpgw1
    Port = "5000",
    ServerAddress = "192.168.1.20:5000, 92.168.1.21:5000"
tcpgw2
    Listen = "192.168.1.10:5050",
    ServerAddress = "192.168.1.20:5050, 92.168.1.21:5050",
    TimeOut = 0,
    AccessName = access1
tcpgw3
    Listen = "192.168.1.10:5060",
    ServerAddress = "192.168.1.20:5060,92.168.1.21:5060",
    ConnectTimeOut = 20,
    AccessName = access2

*ACCESS
access1
    Order = "allow, deny",
    Allow = "all"
access2
    Order = "allow, deny",
    Allow = "211.1.1.10, 211.1.1.20"

22. REVERSE_PROXY_GROUP 절

REVERSE_PROXY_GROUP 절은 REVERSE_PROXY 절 설정을 그룹으로 관리할 필요가 있을 때 사용하며, 다중 서버를 구성할 수 있다. REVERSE_PROXY(내부 서버)를 여러 개 설정하여 그룹으로 묶어 로드 밸런싱 및 Sticky Session routing을 할 수 있으며, WAS 연동에 사용할 수 있다.

22.1. 설정 항목

다음은 REVERSE_PROXY_GROUP 절의 환경설정 형식이다.

*REVERSE_PROXY_GROUP
name    # String[32]
    PathPrefix = Literal[256],
    ServerPathPrefix = Literal[256],
   #RegExp = Literal[512],
   #SetHostHeader = Literal[256],
   #VhostName = String[1024],                 # LIST[64], MULTI
   #RewriteRedirect = Literal[256],           # MULTI[16]
   #RewriteCookieDomain = Literal[256],
   #RewriteCookiePath = Literal[256],
   #RewriteHtmlMaxSize = Numeric,             # 10240 (1-)
   #RewriteHtmlUrl = Literal[256],            # MULTI[32]
   #HtmlUrl = Literal[256],                   # MULTI[64]
   #WBRoutingCookieKey = Literal[256],
   #SessionIdCookieKey = Literal[256],
   #FlexibleStickySessionRouting = Boolean,   # N
   #LBBackup = Literal[256],
   #FailbackCheckTime = Numeric,              # 60 (0-)
   #AccessName = String[32],
   #Headers = Literal[256],                   #LIST[15]
   #SetSslSni = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

REVERSE_PROXY_GROUP 절 이름

  • 종류: String

  • 범위: 31자 이내

  • Reverse Proxy Group 이름을 설정한다.

PathPrefix(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP Request URL이 지정된 값으로 시작하면 해당 요청을 Reverse Proxy로 처리한다.

    PathPrefix = "/internal/"

ServerPathPrefix(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • HTTP Request URL의 PathPrefix에 해당하는 부분이 ServerPathPrefix에 설정된 값으로 교체된 후 수정된 요청이 내부 서버(ServerAddress)로 전달된다.

  • 다음의 설정으로 HTTP Request URL이 "/internal/abc.html"이 "/docs/abc.html"로 변경된 후 요청이 내부 서버로 전송된다.

    ServerPathPrefix = "/docs/"

RegExp

  • 종류: Literal

  • 범위: 511자 이내

  • HTTP Request URL이 Regular expression과 매칭되면 해당 요청을 Reverse Proxy로 처리한다.

  • '!'로 시작하는 경우 exclude를 의미한다.

    RegExp = "\.(do|jsp)$"

SetHostHeader

  • 종류: Literal

  • 범위: 255자 이내

  • Reverse Proxy를 사용하여 내부 서버로 요청을 포워딩할 때 Host Header의 값을 설정한다. 설정하지 않은 경우 Host Header의 값은 ServerAddress에 설정한 값이 설정된다.

    "$BypassHostHeader"로 설정한 경우 클라이언트가 보낸 Host Header의 값을 그대로 사용한다.

    SetHostHeader = "reverseproxy.server.com"

VhostName

  • 종류: String

  • 범위: 1023자 이내

  • Reverse Proxy가 속하는 VHOST 절에 설정된 Virtual Host의 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

RewriteRedirect

  • 종류: Literal

  • 범위: 255자 이내

  • 내부 서버 응답의 Status Code가 301, 302, 303, 307일 경우 (redirect), Location, Content-Location header field의 absolute URL을 수정한다.

  • RewriteRedirect는 흰 공백(whitespace)으로 2개의 string으로 나누어진다.

    첫 번째는 원본 응답의 Location, Content-Location의 URL과 비교된다. URL이 정해진 string으로 시작하면 URL이 수정된다. URL Host 부분은 요청에 사용된 Host, Port로 전환되고, URL Path 부분은 두 번째 string으로 교체된다.

  • 다음의 설정으로 원본 응답의 Location인 "http://internal.server.com:80/docs/abc.html"이 "http://webtob:8100/internal/abc.html"로 변경된다.

    RewriteRedirect = "http://internal.server.com:80/docs/ /internal/"
    RewriteRedirect = "http://internal.server.com:80/docs_kr/ /internal_kr/"
    RewriteRedirect = "http://internal.server.com:80/docs_ch/ /internal_ch/"
  • RewriteRedirect 설정은 최대 16개까지 설정할 수 있다.

RewriteCookieDomain

  • 종류: Literal

  • 범위: 255자 이내

  • 내부 서버 응답의 Cookie Header 필드 값의 "domain=" 값을 수정한다. "domain="에 지정된 domain string이 RewriteCookieDomain에 지정된 string과 일치할 경우 "domain=" 값을 사용자 요청의 domain으로 교체한다.

  • 다음과 같이 설정하면 WebtoB의 domain이 webtob인 경우 원본 응답의 Cookie인 "jsessionid=abc, domain=internal.server.com"는 "jsessionid=abc, domain=webtob"로 변경된다.

    RewriteCookieDomain = "internal.server.com"

RewriteCookiePath

  • 종류: Literal

  • 범위: 255자 이내

  • 내부 서버 응답의 Cookie Header 필드 값의 "path=" 값을 수정한다. "path="에 지정된 string이 RewriteCookiePath 에 지정된 첫 번째 string으로 시작할 경우 두 번째 string으로 교체한다.

  • 다음과 같이 설정하면 원본 응답의 Cookie의 "jsessionid=abc, path=/jeus/application"이 "jsessionid=abc, path=/jeus_proxy/application"으로 변경된다.

    RewriteCookiePath = "/jeus /jeus_proxy"

RewriteHtmlMaxSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 1 ~ INT_MAX

  • 기본값: 10240

  • 응답이 HTML 페이지인 경우(Content-Type: text/html), 페이지 내부의 특정 태그 값들을 수정할 수 있는데, 이때 사용되는 내부 버퍼의 최대 크기를 설정한다.

  • 응답이 설정된 값보다 크면, 수정되지 않은 원본 응답이 클라이언트로 전송된다.

RewriteHtmlUrl

  • 종류: Literal

  • 범위: 255자 이내

  • HTML 페이지에 포함된 URL들을 변경할 때 사용된다.

  • URL이 설정된 첫 번째 string으로 시작하면, 해당하는 부분이 두 번째 string으로 교체된다. URL이 Host를 포함할 경우 Host는 요청에 사용된 WebtoB 서버 주소로 교체된다.

  • URL을 포함하는 tag, attribute은 HtmlUrl을 사용하여 정의한다.

  • 다음 Meta tag의 content는 예외로 항상 URL을 포함한다고 가정한다.

    <meta ... http-equiv="refresh" ... content="http://internal.server.com:80/docs/link3.html" ...>
    RewriteHtmlUrl = "http://test2:80/ /proxy/",
    RewriteHtmlUrl = "/ /proxy/"
  • RewriteRedirect 설정은 최대 32개까지 설정할 수 있다.

HtmlUrl

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 HtmlUrl 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • HTML 문서 내부의 URL을 포함하는 tag, attribute 이름을 정한다. 첫 번째 string은 tag 이름이고, 두 번째부터는 attribute 이름을 설정한다.

  • 하나 이상의 tag를 설정하려면, HtmlUrl을 여러 번 설정하여 최대 64개까지 설정할 수 있다.

    HtmlUrl = "a href",
    HtmlUrl = "img src longdesc usemap"

WBRoutingCookieKey

  • 종류: Literal

  • 범위: 255자 이내

  • 그룹으로 설정된 Reverse Proxy 서버 사이에 자체 routing을 하기 위한 용도로 사용되는 HTTP Cookie의 Key 이름을 설정한다.

  • SessionIdCookieKey 설정보다 우선하며, 해당 설정을 하는 경우 REVERSE_PROXY 절에 설정한 StickySessionRoutingId 값은 무시된다.

  • Routing id는 Reverse Proxy Group Name과 Reverse Proxy Name이 Base64로 인코딩된 값이 사용된다.

  • 아래와 같이 설정한 경우 Response의 Set-Cookie Header에 W2BRID=RPG1.rproxy1 형식으로 추가하여 이후 요청의 Cookie Header를 확인하여 routing에 사용하게 된다.

    WBRoutingCookieKey = "W2BRID"
  • WBRoutingCookieKey의 값을 SessionIdCookieKey의 값과 동일하게 설정할 수 있다. 이 경우 Reverse Proxy 내부 서버로부터 받은 응답(Set-Cookie) 헤더에 설정된 key(예: JSESSIONID)가 있는 경우 해당 key의 value에 자체 routingid를 추가하여 클라이언트에게 전달함으로써 이후 요청에 대한 routingid로 사용한다.

SessionIdCookieKey

  • 종류: Literal

  • 범위: 255자 이내

  • 기본값: "JSESSIONID"

  • Session routing용으로 사용되는 HTTP Cookie의 Key 이름을 설정한다.

FlexibleStickySessionRouting

  • 종류: Boolean

  • 기본값: N

  • Session routing을 할 때 flexible하게 routing할 것인지를 설정한다.

  • 다음은 설정값에 대한 설명이다.

    설정값 설명

    Y

    StickySessionRoutingId를 기준으로 Session routing을 할 때 내부 서버의 MaxPersistentServerConnections가 모두 RUN 상태이면 큐잉(Queuing)하지 않고 다른 StickySessionRoutingId를 가진 내부 서버의 커넥션으로 routing한다.

    N(사용자가 설정하지 않은 경우)

    기본으로 Sticky Session routing이 된다. 이는 동일한 StickySessionRoutingId를 가진 내부 서버의 커넥션으로만 routing하고, 해당 내부 서버의 MaxPersistentServerConnections가 모두 RUN 상태이면 큐잉한다는 의미이다.

    Flexible routing을 하는 경우 동일한 JSESSIONID를 가진 다른 클라이언트의 요청이 각각 다른 서버로 routing될 수 있으므로 주의해야 한다. 기본값 사용을 권장한다.

LBBackup

  • 종류: Literal

  • 범위: 31자 이내

  • 다른 Reverse Proxy 서버들이 모두 READY 상태가 아닐 경우 백업 용도로 사용할 서버를 설정한다.

FailbackCheckTime

  • 종류: Literal

  • 범위: 0 ~ INT_MAX

  • 기본값: 60

  • LBBackup 설정을 사용하지 않을때는 ReverseProxyGroup 하위에 Reverseproxy 중에 Failover되어 연결에 실패한 서버들이 Failback 하기위한 시간을 설정한다. 0일 경우 Failback하지 않는다.

  • LBBackup 설정을 사용할때는 LBBackup에 등록된 백업 서버중에 Failover되어 연결에 실패한 서버들이 Failback하기 위한 시간을 설정한다. 0일 경우 Failback하지 않고, 백업 서버를 계속 사용한다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP 주소에서 들어온 Reverse Proxy 요청에 대하여 허용 또는 거부하는 ACCESS 절 이름을 설정한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

SetSslSni

  • 종류: Literal

  • 범위: 255자 이내

  • 설정시에 설정 값으로 SNI 필드 "server name"을 셋팅한다. 설정하지 않은 경우 "server name" 자체가 표시되지 않는다.

    SetSslSni = "reverseproxy.server.com"

22.2. 예제

다음은 REVERSE_PROXY_GROUP 절을 설정한 예제이다.

*REVERSE_PROXY_GROUP
rpg_internal
    VhostName = "vhost1",
    PathPrefix = "/internal/",
    RegExp = "\.(do|jsp)$",
    ServerPathPrefix = "/docs/",
    RewriteRedirect = "http://internal.server.com:80/docs/ /internal/",
    RewriteCookieDomain = "internal.server.com",
    RewriteCookiePath = "/jeus /jeus_proxy",
    RewriteHtmlUrl = "http://internal.server.com:80/ /internal/",
    RewriteHtmlUrl = "/ /internal/",
    HtmlUrl = "a href",
    HtmlUrl = "img src longdesc usemap",
    RewriteHtmlMaxSize = 4194304,
    SessionIdCookieKey = "JSESSIONID",
    FlexibleStickySessionRouting = N

23. REVERSE_PROXY 절

REVERSE_PROXY 절은 HTTP Proxy 일종으로 외부에서 접근 불가능한 내부 서버로 요청을 전달할 때 설정한다. 클라이언트로부터 온 HTTP 요청을 내부의 서버로 전달하고, 내부 서버로부터 온 HTTP 응답을 클라이언트로 전달한다. 추가적으로 HTTP 요청과 응답을 설정에 따라 조작할 수 있다.

23.1. 설정 항목

다음은 REVERSE_PROXY 절의 환경설정 형식이다.

*REVERSE_PROXY
name    # String[32]
    PathPrefix = Literal[256],
    ServerPathPrefix = Literal[256],
    ServerAddress = Literal[256],
   #ReverseProxyGroupName = Literal[32],
   #RegExp = Literal[512],
   #SetHostHeader = Literal[256],
   #VhostName = String[1024],                 # LIST[64], MULTI
   #HttpInbufSize = Numeric,                  # 16384 (0-)
   #RewriteRedirect = Literal[256],           # MULTI[16]
   #RewriteCookieDomain = Literal[256],
   #RewriteCookiePath = Literal[256],
   #RewriteHtmlMaxSize = Numeric,             # 10240 (1-)
   #RewriteHtmlUrl = Literal[256],            # MULTI[32]
   #HtmlUrl = Literal[256],                   # MULTI[64]
   #StickySessionRoutingId = Literal[256],
   #MinPersistentServerConnections = Numeric, # 0 (0-)
   #MaxPersistentServerConnections = Numeric, # 0 (0-)
   #PersistentServerCheckTime = Numeric,      # 30 (0-)
   #PersistentServerTimeout = Numeric,        # 300 (0-)
   #PersistentServerCheckUrl = Literal[256],
   #ProxySslFlag = Boolean,                   # N
   #ProxySslName = String[32],
   #MaxWebSocketConnections = Numeric,        # 0 (0-)
   #WebSocketSessionTimeout = Numeric,        # 0 (0-)
   #Options = Literal[256],                   # PM.LIST
   #ConnectRetryCount = Numeric,              # 3 (0-)
   #ConnectTimeout = Numeric,                 # 5 (0-)
   #AccessName = String[32],
   #Headers = Literal[256],                   # LIST[15]
   #Compression = Literal[256],               # LIST[32], MULTI
   #CompressionMinSize = Numeric,             # 1 (1-)
   #SetSslSni = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

REVERSE_PROXY 절 이름

  • 종류: String

  • 범위: 31자 이내

  • Reverse Proxy 이름을 설정한다.

PathPrefix(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 PathPrefix 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 PathPrefix 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.

  • HTTP Request URL이 지정된 값으로 시작하면 해당 요청을 Reverse Proxy로 처리한다.

    PathPrefix = "/internal/"

ServerPathPrefix(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 ServerPathPrefix 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 ServerPathPrefix 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.

  • HTTP Request URL의 PathPrefix에 해당하는 부분이 ServerPathPrefix에 설정된 값으로 교체된 후 수정된 요청이 내부 서버(ServerAddress)로 전달된다.

  • 다음의 설정으로 HTTP Request URL이 "/internal/abc.html"이 "/docs/abc.html"로 변경된 후 요청이 내부 서버로 전송된다.

    ServerPathPrefix = "/docs/"

ServerAddress(필수 항목)

  • 종류: Literal

  • 범위: 255자 이내

  • 요청이 전달되는 내부 서버 주소를 설정한다.

    ServerAddress = "internal.server.com:80"

ReverseProxyGroupName

  • 종류: Literal

  • 범위: 31자 이내

  • REVERSE_PROXY_GROUP 절에 정의된 이름을 설정한다.

  • 여러 Reverse Proxy를 Group으로 묶어서 멀티 서버를 구성하고자 하는 경우 사용한다.

    ReverseProxyGroupName = "rproxyGroup1"

RegExp

  • 종류: Literal

  • 범위: 511자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 RegExp 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 RegExp 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.

  • HTTP Request URL이 Regular expression과 매칭되면 해당 요청을 Reverse Proxy로 처리한다.

  • '!'로 시작하는 경우 exclude를 의미한다.

    RegExp = "\.(do|jsp)$"

SetHostHeader

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하고, SetHostHeader 설정을 하지 않은 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • Reverse Proxy를 사용하여 내부 서버로 요청을 포워딩할 때 Host Header의 값을 설정한다. 설정하지 않은 경우 Host Header의 값은 ServerAddress에 설정한 값이 설정된다.

    "$BypassHostHeader"로 설정한 경우 클라이언트가 보낸 Host Header의 값을 그대로 사용한다.

    SetHostHeader = "reverseproxy.server.com"

VhostName

  • 종류: String

  • 범위: 1023자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 VhostName 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 VhostName 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.

  • Reverse Proxy가 속하는 VHOST 절에 설정된 Virtual Host의 이름을 설정한다.

  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.

HttpInBufSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 16384

  • 사용자의 Request를 받을 때 사용하는 버퍼의 크기를 설정한다.

  • 0으로 설정하거나 16777216(16MB)보다 크게 설정할 경우 16777216(16MB)를 사용한다.

RewriteRedirect

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteRedirect 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • 내부 서버 응답의 Status Code가 301, 302, 303, 307일 경우 (redirect), Location, Content-Location header field의 absolute URL을 수정한다.

  • RewriteRedirect는 흰 공백(whitespace)으로 2개의 string으로 나누어진다.

    첫 번째는 원본 응답의 Location, Content-Location의 URL과 비교된다. URL이 정해진 string으로 시작하면 URL이 수정된다. URL Host 부분은 요청에 사용된 Host, Port로 전환되고, URL Path 부분은 두 번째 string으로 교체된다.

  • 다음의 설정으로 원본 응답의 Location인 "http://internal.server.com:80/docs/abc.html"이 "http://webtob:8100/internal/abc.html"로 변경된다.

    RewriteRedirect = "http://internal.server.com:80/docs/ /internal/"
    RewriteRedirect = "http://internal.server.com:80/docs_kr/ /internal_kr/"
    RewriteRedirect = "http://internal.server.com:80/docs_ch/ /internal_ch/"
  • RewriteRedirect 설정은 최대 16개까지 설정할 수 있다.

RewriteCookieDomain

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteCookieDomain 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • 내부 서버 응답의 Cookie Header 필드 값의 "domain=" 값을 수정한다. "domain="에 지정된 domain string이 RewriteCookieDomain에 지정된 string과 일치할 경우 "domain=" 값을 사용자 요청의 domain으로 교체한다.

  • 다음과 같이 설정하면 WebtoB의 domain이 webtob인 경우 원본 응답의 Cookie인 "jsessionid=abc, domain=internal.server.com"는 "jsessionid=abc, domain=webtob"로 변경된다.

    RewriteCookieDomain = "internal.server.com"

RewriteCookiePath

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteCookiePath 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • 내부 서버 응답의 Cookie Header 필드 값의 "path=" 값을 수정한다. "path="에 지정된 string이 RewriteCookiePath 에 지정된 첫 번째 string으로 시작할 경우 두 번째 string으로 교체한다.

  • 다음과 같이 설정하면 원본 응답의 Cookie의 "jsessionid=abc, path=/jeus/application"이 "jsessionid=abc, path=/jeus_proxy/application"으로 변경된다.

    RewriteCookiePath = "/jeus /jeus_proxy"

RewriteHtmlMaxSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 1 ~ INT_MAX

  • 기본값: 10240

  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteHtmlMaxSize 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • 응답이 HTML 페이지인 경우 (Content-Type: text/html), 페이지 내부의 특정 태그 값들을 수정할 수 있는데, 이때 사용되는 내부 버퍼의 최대 크기를 설정한다.

  • 응답이 설정된 값보다 크면, 수정되지 않은 원본 응답이 클라이언트로 전송된다.

RewriteHtmlUrl

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteHtmlUrl 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • HTML 페이지에 포함된 URL들을 변경할 때 사용된다.

  • URL이 설정된 첫 번째 string으로 시작하면, 해당하는 부분이 두 번째 string으로 교체된다. URL이 Host를 포함할 경우 Host는 요청에 사용된 WebtoB 서버 주소로 교체된다.

  • URL을 포함하는 tag, attribute은 HtmlUrl을 사용하여 정의한다.

  • 다음 Meta tag의 content는 예외로 항상 URL을 포함한다고 가정한다.

    <meta ... http-equiv="refresh" ... content="http://internal.server.com:80/docs/link3.html" ...>
    RewriteHtmlUrl = "http://test2:80/ /proxy/",
    RewriteHtmlUrl = "/ /proxy/"
  • RewriteRedirect 설정은 최대 32개까지 설정할 수 있다.

HtmlUrl

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하는 경우 HtmlUrl 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • HTML 문서 내부의 URL을 포함하는 tag, attribute 이름을 정한다.

    첫 번째 string은 tag 이름이고, 두 번째부터는 attribute 이름을 설정한다.

  • 하나 이상의 tag를 설정하려면, HtmlUrl을 여러 번 설정하여 최대 64개까지 설정할 수 있다.

    HtmlUrl = "a href",
    HtmlUrl = "img src longdesc usemap"

StickySessionRoutingId

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하여 여러 내부 서버(WAS)를 연동하는 경우 Sticky Session routing을 사용할 경우 설정한다.

  • 내부 서버(WAS)에서 Set-Cookie 응답 헤더에 Sticky Session id(JSESSIONID)로 넣어주는 값의 엔진명을 사용한다. 예를 들어 Set-Cookie 응답 헤더의 "JSESSIONID" 값이 "Pl1xfBkEVbUu2cj20CUNlHJoWLmU.xxx_servlet_engine1"이라면 점(dot)으로 구분하여 이후 값인 "xxx_servlet_engine1"을 입력한다.

    StickySessionRoutingId = "xxx_servlet_engine1"

MinPersistentServerConnections

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 요청 처리후 내부 서버와의 커넥션을 지속적으로 유지하고자 하는 경우 최소 개수를 설정한다.

  • 신규 요청이 들어오면 내부 서버와의 커넥션이 새로 맺어지고, 내부 서버가 커넥션을 끊지 않는 이상 해당 커넥션을 지속적으로 유지하며 이후 요청에 대하여 이 커넥션을 재사용한다.

  • 내부 서버와의 커넥션을 지속적으로 유지하기 위해 PING 메시지를 보내야 하는데 이를 위해 PersistentServerCheckUrl 설정을 반드시 해야 한다.

MaxPersistentServerConnections

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 요청 처리후 내부 서버와의 커넥션을 지속적으로 유지하고자 하는 경우 최대 개수를 설정한다.

  • 재사용 가능한 커넥션이 모두 다른 요청을 처리 중이라면 내부 서버와의 커넥션을 새로 맺어서 추가하며, 이미 최대 개수가 재사용 중이라면 요청은 큐잉된다.

  • 내부 서버와의 커넥션을 지속적으로 유지하기 위해 PING 메시지를 보내야 하는데 이를 위해 PersistentServerCheckUrl 설정을 반드시 해야 한다.

PersistentServerCheckTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 30

  • 내부 서버와의 커넥션을 체크하는 시간을 설정하며 내부 서버와의 커넥션을 확인 및 지속적으로 유지하는 데 사용된다.

  • 내부 서버와의 커넥션을 지속적으로 유지하기 위해서는 내부 서버의 KeepAliveTimeout보다 작게 설정한다. Ready 상태의 커넥션에 대하여 한 번의 PING 메시지를 보내고 PersistentServerCheckTime이 지나도록 응답이 오지 않으면 해당 커넥션은 이상이 발생했다고 판단하여 끊는다.

  • 0으로 설정한 경우 Ping 메시지를 보내지 않겠다는 의미이다. 이 경우 내부 서버의 KeepAliveTimeout만큼만 커넥션을 지속하게 된다.

PersistentServerTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 300

  • 내부 서버와의 커넥션이 MinPersistentServerConnections보다 많을 경우 Ready 상태가 지속되고 있는 커넥션에 대해 이를 끊고자 하는 경우 설정한다.

  • 0으로 설정한 경우 idle connection에 대한 TimeOut을 체크하지 않는다.

PersistentServerCheckUrl

  • 종류: Literal

  • 범위: 255자 이내

  • 내부 서버와의 커넥션을 지속적으로 유지하기 위해 내부적으로 HTTP HEAD 요청을 PING 메시지로 사용한다.

  • HTTP 요청을 내부 서버로 보내 HTTP 응답을 받아 이를 PONG 메시지로 확인하고 커넥션을 지속적으로 유지한다. 200 응답이 아닌 경우 커넥션은 지속적으로 유지 되지 않는다. 이를 위해 내부 서버에 Ping 요청에 대해 응답할 수 있는 애플리케이션을 만들어놓아야 한다.

    PersistentServerCheckUrl = "/ping.html"

ProxySslFlag

  • 종류: Boolean

  • 기본값: N

  • 내부 서버와 SSL/TLS 프로토콜을 사용하여 연결할지 여부를 설정한다.

  • ProxySslName 설정으로 적용할 PROXY_SSL 절 항목을 지정할 수 있다.

ProxySslName

  • 종류: String

  • 범위: 31자 이내

  • ProxySslFlag를 'Y’로 설정하는 경우 적용되며, 사용할 PROXY_SSL 절 항목을 설정한다.

MaxWebSocketConnections

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • HTTP connection에서 웹 소켓 커넥션으로 업그레이드된 경우 해당 커넥션 수에 대한 제한을 설정한다.

  • 0으로 설정한 경우 웹 소켓 커넥션 수를 제한하지 않는다.

WebSocketSessionTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 0

  • 웹 소켓 커넥션에 대한 TimeOut을 설정한다. 내부 서버의 WebSocket session에 대한 TimeOut 설정과 맞춰서 설정할 것을 권장한다.

  • 0으로 설정한 경우 TimeOut을 체크하지 않는다.

Options

  • 종류: Literal

  • 범위: 255자 이내

  • 해당 서버에 적용된 옵션을 설정한다.

    옵션 설명

    {+|-}Cache

    Content의 캐시 유무(+|-)를 결정한다.

    DynamicServerAddress

    내부 서버와 연결에 실패하는 경우 DNS resolution을 다시 시도한다.

    AlwaysResolveDNS

    서버의 상태와 관계 없이 매 요청마다 DNS Resolution을 수행한다.

    TTLResolveDNS

    매 요청마다 TTL 시간이 만료되었는지 체크하여 DNS Resolution을 수행한다. 추가적으로 첫 요청은 DNS Resolution을 수행한다.

    WithOutXForwarded

    내부 서버로 X-Forwarded header 가 전달되지 않는다.

    이는 기존에 webtob 내부적으로 헤더를 추가하는 동작을 막는 옵션으로, VHOST 절 및 REVERSE_PROXY 절에 Headers 설정이 있는 경우 직접 추가한 header를 다시 제거하지는 않는다.

ConnectRetryCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 3

  • 설정된 내부 서버와 TCP 연결에 실패하는 경우 DNS resolution을 다시 실행 하는 횟수를 지정할 수 있다.

ConnectTimeout

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 5

  • 내부 서버와 TCP 연결을 시도한 후 일정시간 동안 접속 요구에 대한 응답이 없으면 연결을 재시도하도록 시간을 설정한다.

  • 해당 시간 안에 내부 서버로부터 접속 요구에 대한 응답이 오지 않은 경우 DNS resolution 및 TCP 연결을 재시도한다.

AccessName

  • 종류: String

  • 범위: 31자 이내

  • 특정 IP 주소에서 들어온 Reverse Proxy 요청에 대하여 허용 또는 거부하는 ACCESS 절 이름을 설정한다.

Headers

  • 종류: Literal

  • 범위: 255자 이내

  • 적용할 HEADERS 절 이름을 설정한다.

  • 콤마(,)로 구분하여 15개까지 설정할 수 있다.

Compression

  • 종류: Literal

  • 범위: 255자 이내

  • 응답을 압축할 대상을 결정하는 설정이다.

  • 압축할 MIME-Type을 설정하며, 응답의 Content-Type이 사용된다. 해당되는 응답은 클라이언트로 전송되기 전에 GZIP을 사용해서 압축된다.

  • 콤마(,)로 구분하여 최대 32개까지 여러 MIME-Type을 지정할 수 있다.

  • 압축기능을 사용할 경우 네트워크 트래픽을 줄일 수 있지만, 서버의 성능은 저하될 수 있다.

    압축률이 낮은 파일(zip 같은 압축 파일이나 jpeg 같은 압축 이미지 등)을 압축할 경우 서버에 부하만 주기 때문에 해당 MIME-Type이 압축 대상이 되지 않도록 주의해야 한다.

    압축 기능은 HTTP Request Header 중 Accept-Encoding에 GZIP이나 deflate로 지정된 요청에 대해서만 적용된다.

CompressionMinSize

  • 종류: Numeric

  • 범위: 1 ~ INT_MAX

  • 기본값: 1

  • 압축 설정을 통해 응답을 압축하고자 할 때 응답의 최소 크기를 설정한다.

  • Content-Length 응답 헤더의 값이 설정된 값보다 크면 응답을 압축한다. 단, chunked 응답인 경우 응답의 크기를 알기 어려우므로 적용되지 않는다.

SetSslSni

  • 종류: Literal

  • 범위: 255자 이내

  • ReverseProxyGroupName 설정을 사용하고, SetSslSni 설정을 하지 않은 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.

  • 설정시에 설정 값으로 SNI 필드 "server name"을 셋팅한다. 설정하지 않은 경우 "server name" 자체가 표시되지 않는다.

    SetSslSni = "reverseproxy.server.com"

23.2. 예제

다음은 REVERSE_PROXY 절을 설정한 예제이다.

*REVERSE_PROXY
rproxy1
    ReverseProxyGroupName = "rpg_internal",
    VhostName = "vhost1",
    PathPrefix = "/internal/",
    RegExp = "\.(do|jsp)$",
    ServerAddress = "internal.server.com:80",
    ServerPathPrefix = "/docs/",
    RewriteRedirect = "http://internal.server.com:80/docs/ /internal/",
    RewriteCookieDomain = "internal.server.com",
    RewriteCookiePath = "/jeus /jeus_proxy",
    RewriteHtmlUrl = "http://internal.server.com:80/ /internal/",
    RewriteHtmlUrl = "/ /internal/",
    HtmlUrl = "a href",
    HtmlUrl = "img src longdesc usemap",
    RewriteHtmlMaxSize = 4194304,
    MinPersistentServerConnections = 10,
    MaxPersistentServerConnections = 20,
    PersistentServerCheckTime = 50,
    PersistentServerTimeout = 300,
    PersistentServerCheckUrl = "/ping.html",
    ProxySslFlag = Y,
    ProxySslName = proxy_ssl1,
    MaxWebSocketConnections = 20,
    WebSocketSessionTimeout = 300,
    Options = "-cache"

24. LOGLEVEL 절

시스템 로그 메시지 출력을 제어하는 로그 레벨을 설정하는 절이다.

24.1. 설정 항목

다음은 LOGLEVEL 절의 환경설정 형식이다.

*LOGLEVEL
name    # String[256]
    Level = String[256]                # "INFO"
   #Options = String[256],             # PM.LIST
   #RotateBySeconds = Numeric,         # 300 (0-)
   #RotateByFileSize = Numeric,        # 0 (0-)
   #IncludeSslDump = Boolean,          # N
   #InMemory = Boolean,                # N
   #InMemoryCount = Numeric            # 10000 (0-)

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

LOGLEVEL 절 이름

  • 종류: String

  • WebtoB 사용하는 로거 (logger) 이름을 설정한다.

    로거 이름 설명

    . | ROOT

    모든 WebtoB 로거이다.

    .hth | HTH

    HTH 관련 부분의 로그를 담당하는 로거이다.

    .htl | HTL

    HTL 관련 부분의 로그를 담당하는 로거이다.

    .wsm | WSM

    WSM 관련 부분의 로그를 담당하는 로거이다.

    .server | SERVER

    모든 서버 로그를 담당하는 로거이다.

    .server.cgis | CGIS

    CGIS 서버의 로그를 담당하는 로거이다.

    .server.phps | PHPS

    PHPS 서버의 로그를 담당하는 로거이다.

    .server.ssis | SSIS

    SSIS 서버의 로그를 담당하는 로거이다.

    .server.filters | FILTERS

    FILTERS 서버의 로그를 담당하는 로거이다.

Level(필수 항목)

  • 종류: String

  • 기본값: "INFO"

  • 로그 레벨을 설정한다.

  • 시스템 로그 메시지의 레벨이 설정된 값 이상이면 출력된다. 레벨이 낮은 순서대로 "TRACE", "DEBUG", "INFO", "WARN", "FATAL"을 지원한다. 레벨이 낮을수록 자세한 로그 메시지들이 출력된다. 모든 로거의 기본 레벨은 "INFO"이다.

  • 가장 낮은 로그 레벨 "TRACE"인 경우 메시지는 시스템 로그 파일에 저장되지 않고, 환경변수 WEBTOB_TRACE에 설정된 파일(TRACE 파일)에 저장된다.

    WEBTOB_TRACE에 설정되어 있지 않으면 "$WEBTOBDIR/log/trace/ProcessnamePid-dateTtime.trace"에 저장된다.

    WEBTOB_TRACE는 다음의 Format String을 사용할 수 있다.

    Format String 설명

    %N%

    프로세스 이름이다.

    %P%

    프로세스 ID이다.

    %D%

    date이다.

    다음과 같이 설정하면, HTH 메시지는 HTH.trace, CGIS 메시지는 CGIS.trace에 저장된다.

    WEBTOB_TRACE = %N%.trace

Options

  • 종류: String

  • 로거 작동방식에 추가적인 설정을 한다.

  • 다음은 ".hth" 로거에 사용되는 옵션에 대한 설명이다.

    옵션 설명

    dcR

    클라이언트가 보낸 데이터를 TRACE 파일에 출력한다.

    dcW

    클라이언트로 전송된 데이터를 TRACE 파일에 출력한다.

    dsR

    서버가 보낸 데이터를 TRACE 파일에 출력한다.

    dsW

    서버로 전송된 데이터를 TRACE 파일에 출력한다.

  • 다음은 옵션을 설정한 예이다.

    Options = "dcR,dcW,dsR,dsW"

RotateBySeconds

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 300 (0은 이 기능을 사용하지 않는것을 의미한다.)

  • 새로운 로그 메시지 생성할 때 현재 존재하는 로그 파일이 지정된 시간보다 오래되면 새로운 로그 파일을 생성하도록 설정한다.

RotateByFileSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 0 (0은 이 기능을 사용하지 않는것을 의미한다.)

  • 새로운 로그 메시지 생성할 때 현재 존재하는 로그 파일의 크기가 지정된 크기보다 큰 경우 새로운 로그 파일을 생성하도록 설정한다.

IncludeSslDump

  • 종류: Boolean

  • 기본값: N

  • Y로 설정하면 Trace Log에는 SSL 덤프를 포함한다.

InMemory

  • 종류: Boolean

  • 기본값: N

  • Y 로 설정하는 경우, trace log중에 최근에 발생한 일부분의 로그만 저장할 수 있게 rotate되는 inmemory trace log를 활성화 한다.

InMemoryCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 10000

  • InMemory = Y 일경우에만 동작하며, inmemory trace log에 기록할 최대 라인수를 설정한다.

24.2. 예제

다음은 LOGLEVEL 절을 설정한 예제이다.

*LOGLEVEL
.hth
    Level = "DEBUG"
.server.cgis
    Level = "INFO"

25. HEADERS 절

사용자 요청 및 응답에 특정 HTTP Header를 추가하는 경우 HEADERS 절을 정의하여, NODE 절이나 VHOST 절 또는 SERVER 절에 Headers 항목을 설정하면 된다.

25.1. 설정 항목

다음은 HEADERS 절의 환경설정 형식이다.

*HEADERS
name    # String[256]
    Action = String[256],
   #FieldName = String[256],
   #FieldValue = String[1024],
   #FieldRegExp = String[1024],
   #RegExp = Literal[512],
   #StatusCode = String[256]           # (HTTP status code)

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

HEADERS 절 이름

  • 종류: String

  • 범위: 255자 이내

  • 정의한 HEADERS 절 이름을 설정한다.

Action(필수 항목)

  • 종류: String

  • 범위: 255자 이내

  • 다음은 종류별 Action에 대한 설명이다. Action 종류에 따라 FieldValue는 필수 항목일 수 있다.

    Action 설명

    AddRequest

    요청에 설정된 HTTP 헤더를 추가한다. 설정된 헤더가 요청에 이미 존재하는 경우 같은 헤더가 추가되기 때문에 사용에 유의해야 한다.

    AddResponse

    응답에 설정된 HTTP 헤더를 추가한다. 설정된 헤더가 응답에 이미 존재하는 경우 같은 헤더가 추가되기 때문에 사용에 유의해야 한다.

    AddIfAbsentRequest

    요청에 설정된 HTTP 헤더가 없는 경우 헤더를 추가한다.

    AddIfAbsentResponse

    응답에 설정된 HTTP 헤더가 없는 경우 헤더를 추가한다.

    AppendResponse

    이미 존재하는 헤더의 값 뒤에 설정된 FieldValue를 붙인다. 해당 헤더가 없을 경우 action을 취하지 않는다.

    EchoResponse

    요청에 설정된 HTTP 헤더가 존재하는 경우 응답에 같은 헤더 및 값을 추가한다. 해당 Action은 FieldValue를 설정하지 않는다.

    SetResponse

    응답에 설정된 HTTP 헤더가 없는 경우 헤더를 추가한다. 이미 존재하는 경우 헤더의 값을 설정된 FieldValue로 치환한다.

    UnsetResponse

    응답에 설정된 HTTP 헤더가 존재하는 경우 해당 헤더를 삭제한다. 해당 Action은 FieldValue를 설정하지 않는다.

FieldName

  • 종류: String

  • 범위: 255자 이내

  • 추가할 HTTP Header의 이름을 설정한다.

FieldValue

  • 종류: String

  • 범위: 1023자 이내

  • 추가할 HTTP Header의 값을 설정한다.

  • 문자열 혹은 기호를 값으로 사용한다. 사용 가능한 기호와 기능에 대한 자세한 내용은 "*LOGGING.Format 항목"을 참고한다.

FieldRegExp

  • 종류: String

  • 범위: 1023자 이내

  • Action이 AddResponse일 경우를 기준으로 동작한다.

  • 입력받은 문자열은 띄어쓰기를 기준으로 헤더명 정규식을 입력으로 나뉜다. 그리고 타겟이 되는 헤더가 Request 헤더에 존재하고 그 헤더의 밸류값이 정규식에 일치하는 값이라면 FieldValue의 값을 response 헤더에 추가한다. 만약 FieldValue가 존재하지않는다면 입력받은 정규식에서 일치했던값이 response 헤더에 추가된다.

    FieldRegexp="Origin ^https?://(localhost|example\.com|api\.example\.com)"

RegExp

  • 종류: Literal

  • 범위: 511자 이내

  • HTTP Request URL이 Regular expression 패턴과 매칭되는 경우 Header를 추가할 경우 설정한다.

StatusCode

  • 종류: String

  • 범위: 255자 이내

  • 특정 HTTP Status Code일 경우 Header를 추가할 경우 설정한다.

25.2. 예제

다음은 HEADERS 절을 설정한 예제이다.

* HEADERS
header1         Action="AddIfAbsentRequest",
                FieldName="Test_Header",
                FieldValue="test"

header2         Action="AddIfAbsentResponse",
                FieldName="Test_Header",
                FieldValue="test"

header3         Action="AppendResponse",
                FieldName="Test_Header",
                FieldValue=", AppendResponse"

header4         Action="EchoResponse",
                FieldName="Test_Header"

header5         Action = "AddIfAbsentResponse",
                FieldName = "Access-Control-Allow-Origin",
                FieldValue = "%{HEADER_FIELD}i"

26. PRECEDING_COMMAND 절

WebtoB를 기동할 때 WebtoB의 각 프로세스별 CPU Affinity를 지정하는 등의 선행 명령어를 실행하도록 설정한다.

26.1. 설정 항목

다음은 PRECEDING_COMMAND 절의 환경설정 형식이다.

*PRECEDING_COMMAND
name    # String[256]
    Command = Literal[256]             # MULTI[100]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

PRECEDING_COMMAND 절 이름

  • 종류: String

  • WebtoB 프로세스(process) 이름을 설정한다.

    프로세스 이름 설명

    .hth | HTH

    HTH 프로세스이다.

    .htl | HTL

    HTL 프로세스이다.

    .wsm | WSM

    WSM 프로세스이다.

    .server | SERVER

    서버 프로세스이다.

Command

  • 종류: Literal

  • 범위: 255자 이내

  • 프로세스 실행할 때 앞서 수행하기 위한 명령어를 입력한다.

  • 입력할 명령어는 OS마다 다르다. 명령어는 OS에서 위치한 전체 경로를 입력해야 한다.

    OS 명령어

    Linux

    taskset

    AIX

    execrset

    HP-UX

    psrset

    SunOS

    psrset

  • HTH의 경우 명령어를 여러 번 설정할 수 있으며 최대 100개까지 설정할 수 있다. HTH 이외의 프로세스는 명령어를 여러 번 설정하더라도 가장 첫 번째 명령어만 적용된다.

  • NODE 절에 HTH 를 2개 이상 설정한 경우 HTH를 설정한 수보다 명령어 수가 더 많다면 HTH 수만큼의 명령어만 적용된다. 그렇지 않고 HTH 설정한 수가 명령어 수보다 많다면 설정된 명령어를 위에서부터 돌아가면서 순차적으로(마치 Rournd Robin 방식처럼) 적용된다.

    '.hth’에 다음과 같이 2개의 명령어를 설정하고, NODE 절에 HTH를 5로 설정한 경우 hth1/hth3/hth5는 첫 번째 명령어가 적용되고, hth2/hth4는 두 번째 명령어가 적용된다 .

    Command = "/usr/bin/execrset -c 0 -e",
    Command = "/usr/bin/execrset -c 1 -e"
  • 프로세스가 비정상 종료 후 재기동되는 경우에도 해당 명령어가 동일하게 적용된다.

26.2. 예제

다음은 PRECEDING_COMMAND 절을 설정한 예제이다.

*PRECEDING_COMMAND
.wsm
    Command = "/usr/bin/taskset -c 1"
.htl
    Command = "/usr/bin/taskset -c 1"
.hth
    Command = "/usr/bin/taskset -c 2",
    Command = "/usr/bin/taskset -c 3",
    Command = "/usr/bin/taskset -c 4"

27. FILTER 절

Filter 모듈을 사용할 FILTER 절을 정의하여, NODE 절이나 VHOST 절 또는 SVRGROUP 절에 Filter 항목을 설정한다.

27.1. 설정 항목

다음은 FILTER 절의 환경설정 형식이다.

*FILTER
name    # String[256]
    RealPath = Literal[256]             # $ENV, R.PATH

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

FILTER 절 이름

  • 종류: String

  • 범위: 255자 이내

  • 정의한 FILTER 절 이름을 설정한다.

RealPath(필수 항목)

  • 종류: String

  • 범위: 255자 이내

  • 서버 안의 물리적 디렉터리의 Filter 모듈이 위치한 경로명을 설정한다.

27.2. 예제

다음은 FILTER 절을 설정한 예제이다.

*FILTER
sm_filter
    RealPath = "/usr/local/webtob/config/filter/wbSmISAPI.so"

28. USERLOGFORMAT 절

공통으로 사용될 로그 포맷을 설정할 수 있도록 하며 절에서 정의한 포맷은 LOGGING 절에서 사용할 수 있다.

28.1. 설정 항목

*USERLOGFORMAT
name    # String[256]
    Format = Literal[256]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

USERLOGFORMAT 절 이름

  • 종류 : String

  • 범위 : 32자 이내

  • 정의할 로그 포맷의 이름을 설정한다.

  • 설정한 이름을 *LOGGING.Format의 인자로 사용할 수 있다.

Format(필수 항목)

  • 종류 : String

  • 범위 : 255자 이내

  • 로그 메시지의 포맷을 설정한다. 자세한 메시지의 내용은 "*LOGGING.Format 항목"을 참고한다.

28.2. 예제

다음은 USERLOGFORMAT 절을 설정한 예제이다.

*USERLOFGFORMAT
format1
    Format = "%h %l %u %t \"%r\" %s %b"

29. DISK_CACHE 절

WebtoB에서 디스크 캐시 기능을 사용할 경우 설정한다. 디스크 캐시는 파일이 NAS, NFS 등과 같이 로컬이 아닌 경로(네트워크 이용)에 있을 경우 로컬 디스크에 캐시하고자 하는 경우 사용한다. 이 설정을 통해 캐시에 사용 될 디스크 경로, 캐시할 수 있는 파일 크기 등을 설정할 수 있다.

29.1. 설정 항목

*DISK_CACHE
name    # String[32]
    CacheRoot = Literal[256]            # "cache_root/", $ENV, R.PATH
    DirLevels = Numeric                 # 0 (0 - )
    MinFileSize = Numeric               # 1 (1 - )
    MaxFileSize = Numeric               # 1000000
    RefreshTime = Numeric               # 1 (1 - )
    RetryWaitCount = Numeric            # 5

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

DISK_CACHE 절 이름

  • 종류 : String

  • 범위 : 32자 이내

  • 사용할 디스크 캐시의 이름을 설정한다.

CacheRoot (필수 항목)

  • 종류 : String

  • 범위 : 255자 이내

  • 디스크 캐시에 사용할 경로를 설정한다.

  • 환경변수를 사용할 수 있으며, 상대 경로로 설정한 경우 $WEBTOBDIR을 기준으로 절대 경로로 변환하여 설정된다.

DirLevels

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값 : 0

  • 디스크 캐시를 할 때 한 번에 만들 수 있는 디렉터리의 depth를 설정한다.

MinFileSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ INT_MAX

  • 기본값: 1

  • 디스크 캐시할 수 있는 파일의 최소 크기를 설정한다.

MaxFileSize

  • 종류: Numeric

  • 단위: bytes

  • 범위: 0 ~ LONG_MAX

  • 기본값: 1000000

  • 디스크 캐시할 수 있는 파일의 최대 크기를 설정한다.

RefreshTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 1

  • 디스크 캐시된 응답에 대한 유효시간을 설정한다. 즉, 캐시된 후 설정한 시간(초) 동안만 유효하다.

  • 0으로 설정하는 경우 디스크 캐시된 응답은 만료시간 없이 유효하다고 판단한다.

RetryWaitCount

  • 종류: Numeric

  • 범위: 0 ~ INT_MAX

  • 기본값: 5

  • 서로 다른 클라이언트로부터 같은 파일을 요청할 경우 먼저 들어온 요청에 의해 디스크 캐시가 이루어진다.

  • 이럴 경우 이후의 요청은 최초 요청이 디스크 캐시를 하고 응답을 할 때까지 대기-재요청을 반복하게 되고 이러한 대기-재요청의 최대 횟수를 설정한다,

29.2. 예제

다음은 DISK_CACHE 절을 설정한 예제이다.

*DISK_CACHE
dc1
    CacheRoot = "cache/node",
    DirLevels = 5,
    MinFileSize = 8193,
    MaxFileSize = 100000000,
    RefreshTime = 3600

30. LOG_HANDLER 절

WebtoB accesslog를 사용자가 지정한 리모트 서버에 남기고자 하는 경우 설정한다. 이 설정을 통해 리모트 서버의 주소와 로그를 남길 경로, connection timeout 등을 설정할 수 있다.

30.1. 설정 항목

*LOG_HANDLER
name    # String[32]
   ServerAddress = Literal[256],
   #ConnectTimeout = Numeric,      # 3 (0-)
   #ReconnectTime = Numeric,       # 10
   #Timeout = Numeric,             # 60
   Resource = Literal[64],
   Protocol = Literal[64]         # HTTP

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

LOG_HANDLER 절 이름

  • 종류 : Literal

  • 범위 : 32자 이내

  • 사용할 LOG_HANDLER 이름을 설정한다.

ServerAddress (필수 항목)

  • 종류 : Literal

  • 범위 : 255자 이내

  • accesslog를 남길 리모트 서버의 주소를 설정한다.

    ServerAddress = "remote.server.com:80"

ConnectTimeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값 : 3

  • 리모트 서버로 연결 요청 후 연결될 때까지 기다리는 시간을 설정한다.

ReconnectTime

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 10

  • 리모트 서버와 연결 실패시 다시 연결을 요청할 때까지 기다리는 시간을 설정한다.

Timeout

  • 종류: Numeric

  • 단위: 초

  • 범위: 0 ~ INT_MAX

  • 기본값: 60

  • 설정한 시간이 지나도록 accesslog 기록 요청이 발생하지 않으면 리모트 서버와 연결을 끊는다.

Resource (필수 항목)

  • 종류: Literal

  • 범위: 63자 이내

  • 리모트 서버에서 accesslog를 저장할 경로를 설정한다.

Protocol (필수 항목)

  • 종류: Literal

  • 기본값: HTTP

  • 리모트 서버에 accesslog 요청을 보낼 때 사용할 프로토콜을 설정한다.

30.2. 예제

다음은 LOG_HANDLER 절을 설정한 예제이다.

*LOG_HANDLER
lh1
    ServerAddress = "remote.server.com:8080",
    ConnectTimeout = 3,
    ReconnectTime = 10,
    Timeout = 60,
    Resource = "webtob/accesslog",
    Protocol = "HTTP"

31. IPGROUP 절

ACCESS 절에 설정하는 IP가 많은 경우 필요에 따라 이를 그룹화하여 설정할 수 있다.

31.1. 설정 항목

*IPGROUP
name    # String[32]
        IP = Literal[8960]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

IPGROUP 절 이름

  • 종류 : String

  • 범위 : 32자 이내

  • 정의할 IP 그룹의 이름을 설정한다.

  • 설정한 이름을 *ACCESS.Allow, *ACCESS.Deny의 인자로 사용할 수 있다.

IP(필수 항목)

  • 종류 : String

  • 범위 : 8960자 이내

  • 그룹화할 IP의 목록을 설정한다. 각 IP는 콤마(,)로 구분된다.

31.2. 예제

다음은 IPGROUP 절을 설정한 예제이다.

*IPGROUP
ipgroup1
        IP = "localhost, 123.123.123.123"

*ACCESS
access1
        Allow = "100.100.100.100, ipgroup1"

31.3. ADMIN 절

REST API 통신을 위해 사용하고자 하는 경우 설정한다.

31.3.1. 설정 항목

*ADMIN
name    # String[32]
        #Port = Literal[1024],               # (1-65535), LIST[100]
   #Listen = Literal[1024],             # LIST[100]

위의 절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 설명 규약을 참고한다.

ADMIN 절 이름

  • 종류 : String

  • 범위 : 32자 이내

  • 사용할 ADMIN 의 이름을 설정한다.

  • ADMIN 절은 최대 1개 까지만 설정 가능하다.

Port(필수 항목)

  • 종류: Literal

  • 범위: 1023자 이내

  • 웹 서버에서 클라이언트의 요청을 대기하는 포트 번호를 설정한다.

  • 여러 Port를 동시에 정의하는 것도 가능하며, 현재는 최대 100개까지의 포트 번호를 동시에 설정할 수 있다. Port의 설정을 통해서 여러 개의 포트 번호가 동시에 대기하는 것이 가능하다.

    Port와 Listen 항목이 같이 설정된 경우 Port 설정은 무시된다.

Listen

  • 종류: Literal

  • 범위: 1023자 이내

  • 웹 서버에서 클라이언트의 요청을 대기하는 IP 주소와 포트 번호를 설정한다.

  • 여러 개의 IP 주소와 포트 번호를 설정하는 것도 가능하며, 현재는 최대 100개까지의 IP 주소와 포트 번호를 동시에 설정하는 것이 가능하다. 여러 개의 IP 주소를 가진 서버인 경우 특정 IP 주소를 통한 요청만 받아들이기 위해서 사용할 수 있다.

SSLFlag

  • 종류: Boolean

  • 기본값: N

  • 서비스 포트를 SSL/TLS 프로토콜을 사용하여 서비스할지 여부를 설정한다.

  • SSLName 설정으로 적용할 SSL 절 항목을 지정할 수 있다.

SSLName

  • 종류: String

  • 범위: 31자 이내

  • SSLFlag를 'Y’로 설정하는 경우 적용되며, 사용할 SSL 절 항목을 설정한다.

WebStatusPath

  • 종류: Literal

  • 범위: 255자 이내

  • WebStatus 기능을 사용하기 위해 특정 path를 설정할 수 있다.

    해당 설정과 요청 uri가 매치되면 브라우저에서도 wswebadmin 응답을 한개의 JSON응답으로 전달받을 수 있다.

AllowIp

  • 종류: Literal

  • 범위: 8959자 이내

  • 요청이 허용되는 IP 주소나 Network/Netmask들을 설정한다.

  • IP 주소와 Network/Netmask를 다음과 같이 설정한다.

    Allow = "192.168.1.43/255.255.255.0"
  • Allow = "all"은 특수 값으로서 모든 IP 주소를 의미한다.

  • 콤마(,)로 구분하여 최대 256개까지 설정할 수 있다.

31.3.2. 예제

다음은 ADMIN 절을 설정한 예제이다.

*ADMIN
admin1
        port = "9999",
        Listen = "127.0.0.1",
        SSLFlag = "Y",
        SSLName = "ssltest",
        WebStatusPath = "webstat",
        AllowIp = "all"