NODE 절
NODE 절은 WebtoB 노드에 대한 구체적인 환경에 대해 설정합니다. NODE 절은 노드의 전체적인 동작과 관련된 설정을 정의합니다.
NODE 절에는 'WebtoB 시스템 경로', '기타 시스템의 전체적인 설정’들이 정의될 수 있습니다.
설정 항목
다음은 NODE 절의 환경 설정 형식입니다.
"node": { "name": string "hth_count": integer, # 1 (1-255) #"worker_threads": integer, # 8 (1-100) #"hth_schedule": string, # "RR" #"connection_pool_size": integer, # 8192 (1-INT_MAX) #"graceful_shutdown_timeout": integer # 30 (1-INT_MAX) #"cache_key": string, # "HOST_URI" #"cache_entry": integer # 128 (0-INT_MAX) #"max_cache_memory_size": integer # 100 (0-INT_MAX) #"cache_max_file_size": integer # 8192 (0-INT_MAX) #"listen_backlog": integer # 4096 (0-INT_MAX) #"limit_request_body_size": integer # 0 (0-INT_MAX) #"limit_request_header_field_count": integer # 100 (0-INT_MAX) #"limit_request_header_field_size": integer # 8190 (0-INT_MAX) #"limit_request_line_size": integer # 8190 (0-INT_MAX) #"system_filters": [string] }
절과 설정 항목의 구성에 대한 기호나 내용에 대한 자세한 내용은 설정 항목 값의 형식 및 설정 방법을 참고합니다. |
name (필수 항목)
노드의 이름을 설정합니다.
구분 | 설명 |
---|---|
자료형 |
string |
범위 |
127자 이내 |
다음은 name 설정 예시입니다. 프롬프트에 'user@webtob_node:~$'로 표시되는 경우 아래와 같이 name을 설정합니다.
"node": { "name": "webtob_node", ... }
노드 이름은 호스트 이름과 같아야 합니다. 만약 호스트 이름과 다를 경우 실행할 수 없습니다. |
hth_count
요청을 처리하는 HTH의 수를 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
1 ~ 100 |
기본값 |
1 |
다음은 hth_count 설정 예시입니다. 아래와 같이 hth_count를 3으로 설정하면 'HTH-0', 'HTH-1', 'HTH-2’가 생성됩니다.
"node": { "name": "webtob_node", "hth_count": 3, ... }
로그(webtob.log)를 통해 생성된 HTH를 확인할 수 있습니다.
|
worker_threads
HTH에 할당할 작업 스레드의 수를 설정합니다. 작업 스레드는 정적 파일 처리, SSL/TLS 처리(Handshake, 암호화, 복호화), 압축 처리, HTTP 인증 처리를 하는 스레드입니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
1 ~ 100 |
기본값 |
8 |
다음은 worker_threads 설정 예시입니다. 아래와 같이 worker_threads를 5로 설정하면 'HTMLS-0', 'HTMLS-1', 'HTMLS-2', 'HTMLS-3', 'HTMLS-4’가 생성됩니다.
"node": { "name": "webtob_node", "hth_count": 3, "worker_threads":5, ... }
로그(webtob.log)를 통해 생성된 작업 스레드를 확인할 수 있습니다.
|
hth_count × worker_threads의 수만큼 FD가 사용되기 때문에 hth_count와 worker_threads를 설정할 때 FD를 고려해야 합니다. 만약 설정된 값이 FD의 수를 초과하면 아래와 같은 에러 로그가 발생하며 서버가 종료됩니다.
|
hth_schedule
HTH를 여러 개 설정했을 경우 요청을 처리할 HTH 지정 방법을 설정합니다.
구분 | 설명 |
---|---|
자료형 |
string |
범위 |
"RR" |
기본값 |
"RR" |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
RR |
Round Robin 방식으로 순차적으로 HTH에 요청을 할당합니다. |
다음은 hth_schedule 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 2, "worker_threads":8, "hth_schedule": "RR", ... }
로그(webtob.log)를 통해 hth_count에 설정된 수만큼 순차적으로 요청이 할당되는 것을 확인할 수 있습니다.
|
connection_pool_size
HTH마다 커넥션을 관리하는 풀(Pool)의 크기를 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
1 ~ INT_MAX |
기본값 |
8192 |
hth_count, worker_threads와 마찬가지로 FD 수의 영향을 받기 때문에 설정 시 FD 수를 고려해야 합니다. 만약 설정된 값이 FD 수를 초과하면 아래와 같은 에러 로그가 발생하며 서버가 종료됩니다.
|
graceful_shutdown_timeout
Graceful shutdown 명령 후 강제로 종료할 때까지 대기하는 타임아웃을 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
초 |
범위 |
1 ~ INT_MAX |
다음은 graceful_shutdown_timeout 설정 예시입니다.
{ "node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "graceful_shutdown_timeout":5 }, ...
cache_key
캐시된 데이터를 식별하기 위해 사용하는 키의 형식을 설정합니다.
구분 | 설명 |
---|---|
자료형 |
string |
범위 |
"HOST_URI" | "REAL_PATH" |
기본값 |
"HOST_URI" |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
HOST_URI |
요청 헤더의 HOST 값과 요청 URI를 사용하여 Key를 생성합니다. 동일한 REQUEST_URI라 하더라도 HTTP_HOST에 따라 VHOST가 달라질 수 있으며, 이는 실제 경로가 달라질 수 있음을 의미합니다. 그러나 VHOST가 다르더라도 실제 경로가 같다면 중복으로 캐싱되는 문제가 발생할 수 있습니다. 이 방식은 실제 경로를 계산하지 않으므로 REAL_PATH 방식보다 응답 속도가 빠릅니다. 따라서 VHOST별 DocRoot가 다르다면 HOST_URI 값을 사용하는 것이 좋습니다. JEUS에서 처리되거나 역방향 프록시로 처리되는 응답은 실제 경로를 계산할 수 없으므로 이 값을 사용합니다. |
REAL_PATH |
요청 URI의 실제 경로를 사용하여 Key를 생성합니다. 이 값은 SVRTYPE이 HTML인 경우에만 적용되고, HOST_URI를 사용할 때 발생할 수 있는 문제점을 보완합니다. HTTP_HOST가 다르더라도 동일한 요청 파일의 실제 경로가 같을 수 있다. 이 경우 HTTP_HOST에 상관없이 하나의 파일만 캐싱되므로 메모리 사용을 줄일 수 있습니다. 그러나 실제 경로를 계산해야 하기 때문에 HOST_URI를 사용하는 것보다 응답 속도가 다소 느릴 수 있습니다. |
다음은 cache_key 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "cache_key":"HOST_URI", "cache_entry":128, "max_cache_memory_size":100, "cache_max_file_size":8192 ... "destination": { "htmls": [ { "name": "htmls1", "enable_cache":true } ...
캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_key 설정값이 "HOST_URI"인 경우 192.168.0.1:80/image.jpg, "REAL_PATH"인 경우 /home/tmax/webtob6/docs/image.jpg로 표시됩니다. [wsadmin]>> cache-list ------------------------------------------------------------------ | HTH-0: Cache List Info | ------------------------------------------------------------------ | Cache key | Expired time | Cache size | ------------------------------------------------------------------ | 192.168.0.1:80/image.jpg | 2024-01-01 00:00:00 | 300| ------------------------------------------------------------------ | Cache count : 1 | | Memory usages : 300 | ------------------------------------------------------------------ |
cache_entry
HTH 캐시의 해시 테이블 Key의 크기를 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
0 ~ INT_MAX |
기본값 |
128 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
응답을 캐시하지 않습니다. |
다음은 cache_entry 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "cache_key":"HOST_URI", "cache_entry":128, "max_cache_memory_size":100, "cache_max_file_size":8192 ... "destination": { "htmls": [ { "name": "htmls1", "enable_cache":true } ...
캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_entry 설정값이 2인 경우 최대 2개의 행이 표시됩니다. [wsadmin]>> cache-list ---------------------------------------------------------------------------------- | HTH-0: Cache List Info | ---------------------------------------------------------------------------------- | Cache key | Expired time | Cache size | ---------------------------------------------------------------------------------- | 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 | 345| | 192.168.0.1:80/image1.jpg | 2024-01-01 00:00:21 | 345| ---------------------------------------------------------------------------------- | Cache count : 2 | | Memory usages : 1035 | ---------------------------------------------------------------------------------- |
max_cache_memory_size
HTH 프로세스가 캐시를 위해 사용하는 최대 메모리 사이즈를 설정합니다.
HTH별로 각각 캐시하기 때문에 해당 설정은 HTH 프로세스별로 각각 적용되는 값입니다. (모든 HTH 캐시가 사용하는 총 메모리 사이즈가 아님)
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
Mbytes |
범위 |
0 ~ INT_MAX |
기본값 |
100 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
응답을 캐시하지 않습니다. |
다음은 max_cache_memory_size 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "cache_key":"HOST_URI", "cache_entry":128, "max_cache_memory_size":100, "cache_max_file_size":8192 ... "destination": { "htmls": [ { "name": "htmls1", "enable_cache":true } ...
캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 max_cache_memory_size 설정값이 100인 경우 cache로 저장된 이미지 크기는 100MB를 넘을 수 없습니다. [wsadmin]>> cache-list ---------------------------------------------------------------------------------- | HTH-0: Cache List Info | ---------------------------------------------------------------------------------- | Cache key | Expired time | Cache size | ---------------------------------------------------------------------------------- | 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 | 345| | 192.168.0.1:80/image1.jpg | 2024-01-01 00:00:21 | 345| ---------------------------------------------------------------------------------- | Cache count : 2 | | Memory usages : 1035 | ---------------------------------------------------------------------------------- |
cache_max_file_size
캐시할 수 있는 응답(헤더+본문) 하나의 최대 사이즈를 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
bytes |
범위 |
0 ~ INT_MAX |
기본값 |
8192 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
응답을 캐시하지 않습니다. |
다음은 cache_max_file_size 설정 예시입니다. 이때 캐시를 저장하려면 destination 절에서 "enable_cache"를 true로 설정해야 합니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "cache_key":"HOST_URI", "cache_entry":128, "max_cache_memory_size":100, "cache_max_file_size":8192 ... "destination": { "htmls": [ { "name": "htmls1", "enable_cache":true } ...
캐시 현황은 wsadmin의 cache-list에서 확인할 수 있습니다. 이때 cache_max_file_size 설정값이 8192인 경우 8192byte를 초과하는 이미지는 캐시되지 않습니다. [wsadmin]>> cache-list ---------------------------------------------------------------------------------- | HTH-0: Cache List Info | ---------------------------------------------------------------------------------- | Cache key | Expired time | Cache size | ---------------------------------------------------------------------------------- | 192.168.0.1:80/image.jpg | 2024-01-01 00:00:24 | 345| | 192.168.0.1:80/image1.jpg | 2024-01-01 00:00:21 | 345| ---------------------------------------------------------------------------------- | Cache count : 2 | | Memory usages : 1035 | ---------------------------------------------------------------------------------- |
listen_backlog
서비스 포트 연결 큐(listen backlog)의 크기를 설정합니다. 즉, 서비스 포트에서 동시에 처리할 수 있는 연결 시도 중인 소켓의 수를 제한하는 설정입니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
1 ~ INT_MAX |
기본값 |
4096 |
netstat 명령에서 SYN_RECVD 상태인 소켓의 수와 관련이 있을 수 있습니다. |
다음은 listen_backlog 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "listen_backlog":50 ...
ss 명령어를 통해 변경된 Send-Q를 확인할 수 있습니다. listen_backlog 설정값을 511 이상으로 설정할 경우 Send-Q 값은 511 이상으로 올라가지 않는데, 이는 "sysctl -w net.core.somaxconn=[설정값]"을 통해 시스템 값을 변경할 수 있습니다. user@webtob_node:~/tmax/webtob6/$ ss -lnt | grep 80 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 50 0.0.0.0:80 0.0.0.0:* |
limit_request_body_size
사용자 요청에서 HTTP 요청 본문 크기를 제한할 경우 설정합니다.
HTTP 요청 본문이 2G(Long 타입) 이상인 경우는 JEUS 7 이후 버전부터 처리 가능합니다. |
이 값은 HTTP 요청 헤더의 "Content-Length" 값을 기준으로 판단하며, Chunked-request의 경우 허용할 본문의 최대 크기를 설정합니다. 만약 설정된 값보다 큰 요청 본문이 들어올 경우 서버는 "413 Request Entity Too Large"로 응답합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
bytes |
범위 |
0 ~ INT_MAX |
기본값 |
0 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
요청 본문 크기를 제한하지 않습니다. |
다음은 limit_request_body_size 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "limit_request_body_size":100 ...
limit_request_body_size를 100으로 설정했을 때, Content-Length가 100을 넘으면 아래와 같은 메시지가 출력됩니다.
* Closing connection 0
The body is too large.
limit_request_header_field_count
사용자 요청에서 HTTP 요청 헤더 필드 수를 제한할 경우 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
범위 |
0 ~ INT_MAX |
기본값 |
100 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
헤더 필드의 수를 제한하지 않습니다. |
다음은 limit_request_header_field_count 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "limit_request_header_field_count":1 ...
limit_request_header_field_count를 1로 설정했을 때, 헤더 필드 수가 1을 넘으면 아래와 같은 메시지가 출력됩니다.
* Closing connection 0
The number of request header fields exceeds the server limit.
limit_request_header_field_size
사용자 요청에서 HTTP 요청 헤더 필드 각각의 크기를 제한할 경우 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
bytes |
범위 |
0 ~ 16382 |
기본값 |
8190 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
헤더 필드의 크기를 제한하지 않습니다. |
10,000bytes를 초과하는 요청 헤더를 사용하려면 "WJPv2"를 이용해야 합니다. |
다음은 limit_request_header_field_size 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "limit_request_header_field_size":100 ...
limit_request_header_field_size를 100으로 설정했을 때, 헤더 필드 각각의 크기가 100을 넘으면 아래와 같은 메시지가 출력됩니다.
* Closing connection 0
The size of a request header field exceeds the server limit.
limit_request_line_size
사용자 요청에서 HTTP 요청 라인 크기를 제한할 경우 설정합니다.
구분 | 설명 |
---|---|
자료형 |
integer |
단위 |
bytes |
범위 |
0 ~ 16382 |
기본값 |
8190 |
다음은 설정값에 대한 설명입니다.
설정값 | 설명 |
---|---|
0 |
요청 라인의 길이를 제한하지 않습니다. |
10,000bytes를 초과하는 요청 라인을 사용하려면 "WJPv2"를 이용해야 합니다. |
다음은 limit_request_line_size 설정 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads":8, "limit_request_line_size":100 ...
limit_request_line_size를 100으로 설정했을 때, 요청 라인의 길이가 100을 넘으면 아래와 같은 메시지가 출력됩니다.
* Closing connection 0
Request Uri too Wrong
설정 예시
다음은 NODE 절을 설정한 예시입니다.
"node": { "name": "webtob_node", "hth_count": 1, "worker_threads": 8, "hth_schedule": "RR", "connection_pool_size": 8192, "graceful_shutdown_timeout": 30, "listen_backlog": 4096, "cache_key": "HOST_URI", "cache_entry": 128, "max_cache_memory_size": 100, "cache_max_file_size": 8192, "limit_request_body_size": 0, "limit_request_header_field_count": 100, "limit_request_header_field_size": 8190, "limit_request_line_size": 8190, "system_filters" : [ filter1 ] }