WebtoB http.m 설정파일을 봤을 때 어떻게 요청을 받고 어떤 순서로 요청이 처리되는지 이해가 어려우신 분들을 위한 포스트입니다.
WebtoB 가 요청을 받았을 때 설정파일 기준 어떠한 순서로 처리가 되는지 기본 동작에 대한 Workflow Chart를 작성해 보았는데, 다음과 같습니다.
1. *VHOST.Port 에 선언된 포트 번호로 요청이 들어온다. (네트워크 레벨에서 선택됨)
2. 들어온 요청은 Host 헤더를 확인하여 *VHOST.HostName, *VHOST.HostAlias 설정과 비교, VHOST 하나가 선택되어 처리됩니다.
3. 선택된 VHOST에 설정되어 있는 ServiceOrder 순서에 따라 다음 처리가 선택됩니다. "uri, ext" 설정인 경우, *REVERSE_PROXY 설정으로 이동, "ext,uri" 설정인 경우 *EXT 설정으로 이동합니다.
4-1. "uri,ext" 설정으로 *REVERSE_PROXY로 이동된 경우, 해당 VHOST 와 연결된 프록시가 존재하는 경우 PathPrefix 를 확인, 일치하는 경우 프록시로 처리. 없는 경우 *URI 설정으로 이동.
4-2. *URI 절에 설정된 경로들을 위에서 아래 순으로 체크하면서 해당되는 경우, 서버 처리단계로 이동. 단, GotoEXT 옵션이 Y 로 설정되어 있는 경우, 우선 *EXT 절 처리로 이동. *EXT 절에 설정이 존재하는 경우, *EXT 절 설정에 따라 처리. *EXT 절 설정에 해당되지 않는 경우, 원래 *URI 설정대로 처리.
4-3. *URI 설정에 해당되지 않는 경우 *EXT 절 처리로 이동.
5-1. "ext, uri" 설정으로 *EXT로 이동된 경우, *EXT 절에 설정된 확장자 대로 처리. *EXT 절 설정에 해당되지 않는 경우 *REVERSE_PROXY 절 처리로 이동.
6. *REVERSE_PROXY에 해당된 경우, 프록시로 연결된 서버로 처리를 넘기고 응답을 받아 서비스 처리 완료.
7. *URI에 해당된 경우, SvrType에 설정된 것과 일치하는 SVRGROUP을 선택. 해당 SVRGROUP에 설정된 SERVER로 처리를 넘기고 응답을 받아 서비스 처리 완료. SvrName 옵션이 설정되어 있는 경우 해당 서버로 처리를 바로 넘기고 응답을 받아 서비스 처리 완료.
8. *EXT에 해당된 경우, *URI와 동일한 방식으로 서버를 선택하여 처리를 넘기고 응답을 받아 서비스 처리 완료. 대부분 *EXT 절 설정에 해당되는 경우는 WebtoB 처리 (정적 자원) 이므로 WebtoB에서 응답 처리를 합니다.
설정 예시를 토대로 어떻게 처리가 되는지 추가 설명을 드리겠습니다.
[webtob5@CentOS7-WAS1 config]$ cat http.m
*DOMAIN
webtob1
*NODE
CentOS7-WAS1 WEBTOBDIR = "/sw/webtob5",
DOCROOT = "/sw/webtob5/docs",
PORT = "80",
SHMKEY = 54000,
HTH = 1,
ServiceOrder = "uri,ext",
UpperDirRestrict = Y,
ERRORDOCUMENT = "400,401,403,404,405,503",
JSVPORT = 9900,
LOGPERM = 0600,
LOGGING = "acc_node",
ERRORLOG = "err_node",
SYSLOG = "syslog"
*VHOST
v_http DOCROOT = "/sw/webtob5/docs",
HOSTNAME = "www.nxcore.com",
HOSTALIAS = "192.168.1.11",
PORT = "80",
ServiceOrder = "uri,ext",
ERRORDOCUMENT = "400,401,403,404,405,503",
URLRewrite = Y,
URLRewriteConfig = "config/rewrite.conf",
LOGGING = "acc_http",
ERRORLOG = "err_http"
v_https DOCROOT = "/sw/webtob5/docs",
HOSTNAME = "www.nxcore.com",
PORT = "443",
ServiceOrder = "uri,ext",
ERRORDOCUMENT = "400,401,403,404,405,503",
SSLFLAG = Y,
SSLNAME = "ssl1",
LOGGING = "acc_https",
ERRORLOG = "err_https"
v_https_erp DOCROOT = "/sw/webtob5/docs",
HOSTNAME = "erp.nxcore.com",
PORT = "443",
ServiceOrder = "uri,ext",
ERRORDOCUMENT = "400,401,403,404,405,503",
SSLFLAG = Y,
SSLNAME = "ssl1",
LOGGING = "acc_https_erp",
ERRORLOG = "err_https_erp"
*SSL
ssl1 CertificateFile = "/sw/webtob5/ssl/cert.pem",
CertificateKeyFile = "/sw/webtob5/ssl/privkey.pem",
CertificateChainFile = "/sw/webtob5/ssl/chain.pem",
CACertificateFile = "/sw/webtob5/ssl/fullchain.pem",
PassPhraseDialog = "file:/sw/webtob5/ssl/passwd",
Protocols = "-SSLv2, -SSLv3, -TLSv1, -TLSv1.1, TLSv1.2, TLSv1.3",
RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP:!RC4:!IDEA:!3DES"
*HTH_THREAD
hth_worker SendfileThreads = 4,
AccessLogThread = Y,
SendfileThreshold = 0,
WorkerThreads = 8
*SVRGROUP
g_svrg SVRTYPE = JSV, VhostName = "v_http, v_https"
g_erpg SVRTYPE = JSV, VhostName = "v_https_erp"
*SERVER
hello SVGNAME = g_svrg, MinProc = 50, MaxProc = 50
erp SVGNAME = g_erpg, MinProc = 50, MaxProc = 50
*URI
u_hello Uri = "/hello", Svrtype = JSV, VhostName = "v_http, v_https", SvrName = "hello"
u_erp_root Uri = "/", Svrtype = JSV, VhostName = "v_https_erp", GotoEXT = Y
*LOGGING
syslog Format = "SYSLOG", FileName = "/sw/webtob5/log/system/system_%Y%%M%%D%.log", Option = "sync"
acc_node Format = "COMBINED", FileName = "/sw/webtob5/log/node/access_%Y%%M%%D%.log", Option = "sync"
err_node Format = "ERROR", FileName = "/sw/webtob5/log/node/error_%Y%%M%%D%.log", Option = "sync"
acc_http Format = "COMBINED", FileName = "/sw/webtob5/log/http/access_%Y%%M%%D%.log", Option = "sync"
err_http Format = "ERROR", FileName = "/sw/webtob5/log/http/error_%Y%%M%%D%.log", Option = "sync"
acc_https Format = "COMBINED", FileName = "/sw/webtob5/log/https/access_%Y%%M%%D%.log", Option = "sync"
err_https Format = "ERROR", FileName = "/sw/webtob5/log/https/error_%Y%%M%%D%.log", Option = "sync"
acc_https_erp Format = "COMBINED", FileName = "/sw/webtob5/log/erp/access_%Y%%M%%D%.log", Option = "sync"
err_https_erp Format = "ERROR", FileName = "/sw/webtob5/log/erp/error_%Y%%M%%D%.log", Option = "sync"
*ERRORDOCUMENT
400 status = 400, url = "/error.html"
401 status = 401, url = "/error.html"
402 status = 402, url = "/error.html"
403 status = 403, url = "/error.html"
404 status = 404, url = "/error.html"
405 status = 405, url = "/error.html"
503 status = 503, url = "/error.html"
*EXT
jsp SvrType = JSV, MimeType = "application/jsp", Options = "unset"
htm SvrType = HTML, MimeType = "text/html"
html SvrType = HTML, MimeType = "text/html"
css SvrType = HTML, MimeType = "text/css"
js SvrType = HTML, MimeType = "application/x-javascript"
txt SvrType = HTML, MimeType = "text/plain"
ico SvrType = HTML, MimeType = "image/x-icon"
gif SvrType = HTML, MimeType = "image/gif"
jpg SvrType = HTML, MimeType = "image/jpeg"
png SvrType = HTML, MimeType = "image/png"
위와 같은 설정파일로 구성된 WebtoB를 운영한다고 가정해 보겠습니다.
요청 URL 은 다음과 같습니다.
https://www.nxcore.com/hello/index.do
443 포트에 대한 요청이므로 *VHOST.Port 에 443 이 선언된 v_https와 v_https_erp 가 선택 후보가 됩니다.
여기서 요청 도메인 주소는 www.nxcore.com 이므로 v_https에 설정된 HostName과 일치하므로 v_https 가 선택됩니다.
ServiceOrder = "uri, ext" 설정이므로 *REVERSE_PROXY로 이동하나, 현재 설정되어 있지 않으므로 *URI 절로 이동합니다.
u_hello 설정에 의해 /hello 경로와 일치, VhostName 조건도 일치하므로 해당 Uri 설정으로 처리가 진행됩니다.
SvrName 옵션에 "hello"로 설정되어 있으므로 hello와 연결된 JEUS 서버로 처리를 넘기고 응답을 받아 처리과정이 종료됩니다.
다음 요청 URL 은 다음과 같습니다.
https://erp.nxcore.com/image.png
마찬가지로 443 포트 요청이나 요청 도메인 주소가 erp.nxcore.com 에 대한 요청이므로 v_https 가 아닌 v_https_erp 가 선택되며, *URI 절로 이동합니다.
u_hello 조건과 일치하지 않으므로 다음 설정인 u_erp_root로 이동합니다.
u_erp_root 조건과 일치하므로 해당 Uri 설정으로 처리가 진행됩니다.
다만, GotoEXT = Y 옵션 설정이 되어 있으므로 *EXT 절로 이동합니다.
*EXT 절 설정에 의해 png 파일 처리가 HTML 타입으로 처리하도록 되어 있으므로 WebtoB에서 image.png 에 대한 응답을 보내고 처리과정이 종료됩니다.
마지막으로 하나 더 보겠습니다.
요청 URL 은 다음과 같습니다.
https://erp.nxcore.com/action/index.jsp
마찬가지로 443 포트 요청에 erp.nxcore.com 에 대한 요청이므로 v_https_erp 가 선택되며, *URI 절로 이동합니다.
u_hello 조건과 일치하지 않으므로 다음 설정인 u_erp_root로 이동합니다.
u_erp_root 조건과 일치하므로 해당 Uri 설정으로 처리가 진행됩니다.
다만, GotoEXT = Y 옵션 설정이 되어 있으므로 *EXT 절로 이동합니다.
*EXT 절에 jsp 확장자가 선언되어 있으나 Options = "unset"으로 비활성화되어 있으므로 해당되지 않고 *EXT 절 처리가 종료되어 다시 *URI 절로 돌아옵니다.
SvrType 이 JSV 이므로 *SVRGROUP에 선언된 JSV 타입 그룹이며, VhostName 조건과 일치하는 g_erpg 그룹이 선택, 해당 그룹에 속한 erp 서버 설정과 연결된 JEUS 서버로 처리를 넘기고 응답을 받아 처리과정이 종료됩니다.
'Middleware > WebtoB' 카테고리의 다른 글
WebtoB Access 로그 포맷 변경 방법 (COMBINED 포맷 등) (0) | 2023.03.16 |
---|---|
WebtoB SSL/TLS 인증서 적용 방법 (+사설인증서 생성 방법) (0) | 2023.03.15 |
WebtoB 설정파일 구조 (http.m) (1) | 2023.03.06 |
WebtoB - Linux 에서 1024 이하 well-known 포트를 사용하도록 설정하기 (0) | 2023.03.03 |
WebtoB 기본 운영 가이드 (설정파일 컴파일, 기동 및 종료) (1) | 2023.03.03 |
댓글