17.4. 서버 구성
서버는 Undertow 인스턴스를 나타내며 다음과 같은 여러 요소로 구성됩니다.
- 호스트
- http-listener
- https-listener
- ajp-listener
호스트 요소는 가상 호스트 구성을 제공하지만 세 리스너는 해당 유형의 연결을 Undertow 인스턴스에 제공합니다.
서버의 기본 동작은 서버가 시작하는 동안 요청을 대기열에 추가하는 것입니다. 호스트에서 queue-requests-on-start
특성을 사용하여 기본 동작을 변경할 수 있습니다. 이 속성이 true
로 설정되면 기본값인 서버 시작 시 도착하는 요청이 서버가 준비될 때까지 유지됩니다. 이 특성이 false
로 설정되면 서버가 완전히 시작되기 전에 도착하는 요청이 기본 응답 코드와 함께 거부됩니다.
특성 값에 관계없이 서버가 완전히 시작될 때까지 요청 처리가 시작되지 않습니다.
Configuration queue-requests-on-start
속성을 구성하고 서버를 선택하고 View (보기) 를 클릭하고 Hosts (호스트) 탭을 선택하여 queue-requests-on-start 특성을 구성할 수 있습니다. 관리형 도메인의 경우 구성할 프로필을 지정해야 합니다.
배포와 서버를 완전히 격리할 수 있도록 여러 서버를 구성할 수 있습니다. 이 기능은 멀티 테넌트 환경과 같은 특정 시나리오에서 유용할 수 있습니다.
JBoss EAP는 기본적으로 서버를 제공합니다.
기본 Undertow 하위 시스템 구성
다음 예제에서는 관리 CLI를 사용하여 서버를 구성하는 방법을 보여줍니다. Configuration
기존 서버 업데이트
기존 서버를 업데이트하려면 다음을 수행합니다.
/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
reload
reload
새 서버 생성
새 서버를 생성하려면 다음을 수행합니다.
/subsystem=undertow/server=new-server:add
/subsystem=undertow/server=new-server:add
reload
reload
서버 삭제
서버를 삭제하려면 다음을 수행합니다.
/subsystem=undertow/server=new-server:remove
/subsystem=undertow/server=new-server:remove
reload
reload
서버 구성에 사용할 수 있는 속성의 전체 목록은 Undertow 하위 시스템 속성 섹션을 참조하십시오.
17.4.1. 액세스 로깅 링크 복사링크가 클립보드에 복사되었습니다!
정의한 각 호스트에서 액세스 로깅을 구성할 수 있습니다.
액세스 로깅 옵션은 표준 액세스 로깅과 콘솔 액세스 로깅의 두 가지입니다.
액세스 로깅에 필요한 추가 처리는 시스템 성능에 영향을 미칠 수 있습니다.
17.4.1.1. 표준 액세스 로깅 링크 복사링크가 클립보드에 복사되었습니다!
표준 액세스 로깅은 로그 항목을 로그 파일에 씁니다.
기본적으로 로그 파일은 standalone/log/access_log.log 디렉터리에 저장됩니다.
표준 액세스 로깅을 활성화하려면 액세스 로그 데이터를 캡처할 호스트에 access-log 설정을 추가합니다. 다음 CLI 명령은 기본 JBoss EAP 서버의 기본 호스트에 대한 구성을 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add
/subsystem=undertow/server=default-server/host=default-host/setting=access-log:add
표준 액세스 로깅을 활성화한 후 서버를 다시 로드해야 합니다.
기본적으로 액세스 로그 레코드에는 다음 데이터가 포함됩니다.
- 원격 호스트 이름
- 원격 논리적 사용자 이름 (항상 -)
- 인증된 원격 사용자
- 요청 날짜 및 시간 (Common Log Format)
- 요청의 첫 번째 줄
- 응답의 HTTP 상태 코드
- HTTP 헤더를 제외하고 전송된 바이트 수
이 데이터 집합은 공통 패턴으로 정의됩니다. 결합된 또 다른 패턴도 사용할 수 있습니다. 공통 패턴에 기록된 데이터 외에도 결합된 패턴에는 수신 헤더의 참조자 및 사용자 에이전트가 포함됩니다.
pattern
특성을 사용하여 기록된 데이터를 변경할 수 있습니다. 다음 CLI 명령은 결합된 패턴을 사용하도록 패턴
속성을 업데이트하는 방법을 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=access-log:write-attribute(name=pattern,value="combined"
/subsystem=undertow/server=default-server/host=default-host/setting=access-log:write-attribute(name=pattern,value="combined"
패턴 특성을 업데이트한 후 서버를 다시 로드해야 합니다.
패턴 | 설명 |
---|---|
%a | 원격 IP 주소 |
%A | 로컬 IP 주소 |
%b |
HTTP 헤더를 제외하고 전송된 바이트 또는 바이트가 없는 경우 |
%B | HTTP 헤더를 제외하고 전송된 바이트 |
%h | 원격 호스트 이름 |
%H | 요청 프로토콜 |
%l |
원격 논리적 사용자 이름 from |
%m | 요청 방법 |
%p | 로컬 포트 |
%q |
쿼리 문자열 ( |
%r | 요청의 첫 번째 행 |
%s | 응답의 HTTP 상태 코드 |
%t | 날짜 및 시간(일반 로그 형식) |
%u | 인증된 원격 사용자 |
%U | 요청된 URL 경로 |
%v | 로컬 서버 이름 |
%D | 요청을 처리하는 데 걸린 시간(밀리초) |
%T | 요청을 처리하는 데 걸리는 시간(초) |
%I | 현재 요청 스레드 이름 (나중에 스택 추적과 비교할 수 있음) |
Common |
|
결합 |
|
쿠키, 수신 헤더 및 응답 헤더 또는 세션에서 정보를 작성할 수도 있습니다. 구문은 Apache 구문 다음에 모델링됩니다.
-
수신 헤더의
%{I,xxx}
-
나가는 응답 헤더의
%{O,xxx}
-
특정 쿠키를 위한
%{C,xxx}
-
%{R,xxx}
여기서xxx
는ServletRequest
의 속성입니다. -
%{s,xxx}
여기서xxx
는HttpSession
의 속성입니다.
이 로그에 추가 구성 옵션을 사용할 수 있습니다. 자세한 내용은 부록의 "access-log 속성"을 참조하십시오.
17.4.1.2. 콘솔 액세스 로깅 링크 복사링크가 클립보드에 복사되었습니다!
콘솔 액세스 로깅은 JSON 데이터로 구성된 stdout에 데이터를 씁니다.
각 액세스 로그 레코드는 한 줄의 데이터 행입니다. 로그 집계 시스템에서 처리하기 위해 이 데이터를 캡처할 수 있습니다.
콘솔 액세스 로깅을 구성하려면 액세스 로그 데이터를 캡처할 호스트에 console-access-log 설정을 추가합니다. 다음 CLI 명령은 기본 JBoss EAP 서버의 기본 호스트에 대한 구성을 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add
기본적으로 콘솔 액세스 로그 레코드에는 다음 데이터가 포함됩니다.
로그 데이터 필드 이름 | 설명 |
---|---|
eventSource | 요청의 이벤트 소스 |
hostName | 요청을 처리하는 JBoss EAP 호스트 |
bytesSent | 요청에 대한 응답으로 전송된 JBoss EAP 서버의 바이트 수 |
dateTime | JBoss EAP 서버에서 요청을 처리한 날짜 및 시간 |
remoteHost | 요청이 시작된 머신의 IP 주소 |
remoteUser | 원격 요청과 관련된 사용자 이름 |
requestLine | 요청이 제출되었습니다 |
responseCode | JBoss EAP 서버에서 반환한 HTTP 응답 코드 |
기본 속성은 항상 로그 출력에 포함됩니다. attributes 속성을
사용하여 기본 로그 데이터의 레이블을 변경하고 경우에 따라 데이터 구성을 변경할 수 있습니다. attributes 속성을
사용하여 출력에 로그 데이터를 추가할 수도 있습니다.
로그 데이터 필드 이름 | 설명 | 형식 |
---|---|---|
authentication-type | 요청과 연결된 사용자를 인증하는 데 사용되는 인증 유형입니다. 기본 레이블: authenticationType 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | authentication-type{} authentication-type={key="authType"} |
bytes-sent | HTTP 헤더를 제외하고 요청에 반환된 바이트 수입니다. 기본 레이블: bytesSent 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | bytes-sent={} bytes-sent={key="sent-bytes"} |
날짜-시간 | 요청이 수신 및 처리된 날짜 및 시간입니다. 기본 레이블: dateTime 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. date-format을 사용하여 날짜-시간 레코드를 포맷하는 데 사용되는 패턴을 정의합니다. 패턴은 Java SimpleDateFormatter 패턴이어야 합니다. time-zone 옵션을 사용하여 date-format 옵션이 정의된 경우 날짜 및/또는 시간 데이터를 포맷하는 데 사용되는 시간대를 지정합니다. 이 값은 유효한 java.util.TimeZone이어야 합니다. | date-time={key="<keyname>", date-format="<date-time format>"} date-time={key="@timestamp", date-format="yyy-MM-dd'T'HH:mm:ssSSS"} |
host-and-port | 요청에서 쿼리한 호스트 및 포트입니다. 기본 레이블: hostAndPort 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | host-and-port{} host-and-port={key="port-host"} |
local-ip | 로컬 연결의 IP 주소입니다. 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. 기본 레이블: localIp 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | local-ip{} local-ip{key="localIP"} |
local-port | 로컬 연결의 포트입니다. 기본 레이블: localPort 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | local-port{} local-port{key="LocalPort"} |
local-server-name | 요청을 처리하는 로컬 서버의 이름입니다. 기본 레이블: localServerName 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | local-server-name {} local-server-name {key=LocalServerName} |
path-parameter | 요청에 포함된 하나 이상의 경로 또는 URI 매개 변수. names 속성은 교환 값을 확인하는 데 사용되는 쉼표로 구분된 이름 목록입니다. 키 접두사 속성을 사용하여 키를 고유하게 만듭니다. key-prefix를 지정하면 접두사가 출력의 각 경로 매개 변수 이름에 앞에 추가됩니다. | path-parameter{names={store,section}} path-parameter{names={stores}, key-prefix="my-"} |
서술자 | 서술자 컨텍스트의 이름입니다. names 속성은 교환 값을 확인하는 데 사용되는 쉼표로 구분된 이름 목록입니다. 키 접두사 속성을 사용하여 키를 고유하게 만듭니다. key-prefix를 지정하면 접두사가 출력의 각 경로 매개 변수 이름에 앞에 추가됩니다. | predicate{names={store,section}} 서술자{names={store,section}, key-prefix="my-"} |
query-parameter | 요청에 포함된 하나 또는 쿼리 매개 변수. names 속성은 교환 값을 확인하는 데 사용되는 쉼표로 구분된 이름 목록입니다. 키 접두사 속성을 사용하여 키를 고유하게 만듭니다. key-prefix를 지정하면 접두사가 출력의 각 경로 매개 변수 이름에 앞에 추가됩니다. | query-parameter{names={store,section}} query-parameter{names={store,section}, key-prefix="my-"} |
query-string | 요청의 쿼리 문자열입니다. 기본 레이블: queryString 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. include-question-mark 속성을 사용하여 쿼리 문자열에 물음표가 포함되어야 하는지 여부를 지정합니다. 기본적으로 물음표는 포함되지 않습니다. | query-string{} query-string{key="QueryString", include-question-mark="true"} |
relative-path | 요청의 상대 경로입니다. 기본 레이블: relativePath 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | relative-path{} relative-path{key="RelativePath"} |
remote-host | 원격 호스트 이름입니다. 기본 레이블: remoteHost 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | remote-host{} remote-host{key=”RemoteHost”} |
remote-ip | 원격 IP 주소. 기본 레이블: remoteIp 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. 난독화된 속성을 사용하여 출력 로그 레코드의 IP 주소를 난독화합니다. 기본값은 false입니다. | remote-ip{} remote-ip{key="RemoteIP", obfuscated="true"} |
remote-user | 인증된 원격 사용자. 기본 레이블: remoteUser 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | remote-user{} remote-user{key="RemoteUser"} |
request-header | 요청 헤더의 이름입니다. 구조화된 데이터의 키는 헤더의 이름입니다. 값은 명명된 헤더의 값입니다. names 속성은 교환 값을 확인하는 데 사용되는 쉼표로 구분된 이름 목록입니다. 키 접두사 속성을 사용하여 키를 고유하게 만듭니다. key-prefix를 지정하면 접두사가 로그 출력의 요청 헤더 이름에 앞에 추가됩니다. | request-header{names={store,section}} request-header{names={store,section}, key-prefix="my-"} |
request-line | 요청 행. 기본 레이블: requestline 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | request-line{} request-line{key="Request-Line"} |
request-method | 요청 메서드입니다. 기본 레이블: requestMethod 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | request-method{} request-method{key=”RequestMethod”} |
request-path | 요청의 상대 경로입니다. 기본 레이블: requestPath 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | request-path{} request-path{key="RequestPath"} |
request-protocol | 요청의 프로토콜입니다. 기본 레이블: requestProtocol key 옵션을 사용하여 이 속성의 레이블을 변경합니다. | request-protocol{} request-protocol{key="RequestProtocol"} |
request-scheme | 요청의 URI 체계입니다. 기본 레이블: requestScheme 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | request-scheme{} request-scheme{key="RequestScheme"} |
request-url | 원래 요청 URI입니다. 클라이언트에 지정된 경우 호스트 이름, 프로토콜 등을 포함합니다. 기본 레이블: requestUrl 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | request-url{} request-url{key="RequestURL"} |
resolved-path | 해결된 경로입니다. 기본 Label: resolvedPath 이 속성의 레이블을 변경하려면 키 옵션을 사용합니다. | resolved-path{} resolve-path{key="ResolvedPath"} |
response-code | 응답 코드. 기본 레이블: responseCode 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | response-code{} response-code{key="Response Code"} |
response-header | 응답 헤더의 이름입니다. 구조화된 데이터의 키는 헤더의 이름입니다. 값은 명명된 헤더의 값입니다. names 속성은 교환 값을 확인하는 데 사용되는 쉼표로 구분된 이름 목록입니다. 키 접두사 속성을 사용하여 키를 고유하게 만듭니다. key-prefix를 지정하면 접두사가 로그 출력의 요청 헤더 이름에 앞에 추가됩니다. | response-header{names={store,section}} response-header{names={store,section}, key-prefix=”my-”} |
response-reason-phrase | 응답 코드의 텍스트 이유. 기본 레이블: responseReasonPhrase 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | response-reason-phrase{} response-reason-phrase{key=”ResponseReasonPhrase”} |
response-time | 요청을 처리하는 데 사용되는 시간입니다. 기본 레이블: responseTime 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. 기본 시간 단위는 MILLISECONDS입니다. 사용 가능한 시간 단위는 다음과 같습니다. * NANOSECONDS * MICROSECONDS * MILLISECONDS * SECONDS | response-time{} response-time{key="ResponseTime", time-unit=SECONDS} |
secure-exchange | 교환이 안전한지 여부를 나타냅니다. 기본 레이블: secureExchange 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | secure-exchange{} secure-exchange{key=”SecureExchange”} |
SSL-cipher | 요청에 대한 SSL 암호입니다. 기본 레이블: sslCipher 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | SSL-cipher{} ssl-cipher{key="SSLCipher"} |
ssl-client-cert | 요청에 대한 SSL 클라이언트 인증서입니다. 기본 레이블: sslClientCert 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | ssl-client-cert{} ssl-client-cert{key=”SSLClientCert”} |
ssl-session-id | 요청의 SSL 세션 ID입니다. 기본 레이블: sslSessionId 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | ssl-session-id{} stored-response |
저장된 응답에서 요청에 대한 응답입니다. 기본 레이블: storedResponse 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | stored-response{} stored-response{key=”StoredResponse”} | thread-name |
현재 스레드의 스레드 이름입니다. 기본 레이블: threadName 키 옵션을 사용하여 이 속성의 레이블을 변경합니다. | thread-name{} thread-name{key=”ThreadName”} | transport-protocol |
metadata
특성을 사용하여 액세스 로그 레코드에 포함되도록 추가 임의 데이터를 구성할 수 있습니다. metadata
속성의 값은 액세스 로그 레코드에 포함할 데이터를 정의하는 key:value 쌍의 집합입니다. 쌍의 값은 관리 모델 표현식일 수 있습니다. 관리 모델 표현식은 서버를 시작하거나 다시 로드할 때 해결됩니다. 키-값 쌍은 쉼표로 구분됩니다.
다음 CLI 명령은 추가 로그 데이터, 로그 데이터의 사용자 지정 및 추가 메타데이터를 포함하여 복잡한 콘솔 로그 구성의 예를 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add(metadata={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}}, attributes={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:add(metadata={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}}, attributes={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
결과 액세스 로그 레코드는 다음과 같은 추가 JSON 데이터와 유사합니다. 참고: 아래 예제 출력은 가독성을 위해 포맷됩니다. 실제 레코드에서는 모든 데이터가 한 줄로 출력됩니다.
다음 명령은 콘솔 액세스 로그를 활성화한 후 로그 데이터에 대한 업데이트를 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=attributes,value={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=attributes,value={bytes-sent={}, date-time={key="@timestamp", date-format="yyyy-MM-dd'T'HH:mm:ssSSS"}, remote-host={}, request-line={}, response-header={key-prefix="responseHeader", names=["Content-Type"]}, response-code={}, remote-user={}})
다음 명령은 콘솔 액세스 로그를 활성화한 후 사용자 정의 메타데이터에 대한 업데이트를 보여줍니다.
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=metadata,value={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}})
/subsystem=undertow/server=default-server/host=default-host/setting=console-access-log:write-attribute(name=metadata,value={"@version"="1", "qualifiedHostName"=${jboss.qualified.host.name:unknown}})