본문 바로가기
Middleware/WebtoB

WebtoB 요청 처리 순서 (http.m 설정파일 보는 법)

by nxCore 2023. 3. 9.

 

 

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 서버로 처리를 넘기고 응답을 받아 처리과정이 종료됩니다.

댓글