17.4. 서버 구성


서버는 Undertow 인스턴스를 나타내며 다음과 같은 여러 요소로 구성됩니다.

  • 호스트
  • http-listener
  • https-listener
  • ajp-listener

호스트 요소는 가상 호스트 구성을 제공하지만 세 리스너는 해당 유형의 연결을 Undertow 인스턴스에 제공합니다.

서버의 기본 동작은 서버가 시작하는 동안 요청을 대기열에 추가하는 것입니다. 호스트에서 queue-requests-on-start 특성을 사용하여 기본 동작을 변경할 수 있습니다. 이 속성이 true 로 설정되면 기본값인 서버 시작 시 도착하는 요청이 서버가 준비될 때까지 유지됩니다. 이 특성이 false 로 설정되면 서버가 완전히 시작되기 전에 도착하는 요청이 기본 응답 코드와 함께 거부됩니다.

특성 값에 관계없이 서버가 완전히 시작될 때까지 요청 처리가 시작되지 않습니다.

Configuration Subsystems Web (Undertow) Server 로 이동하여 관리 콘솔을 사용하여 queue-requests-on-start 속성을 구성하고 서버를 선택하고 View (보기) 를 클릭하고 Hosts (호스트) 탭을 선택하여 queue-requests-on-start 특성을 구성할 수 있습니다. 관리형 도메인의 경우 구성할 프로필을 지정해야 합니다.

참고

배포와 서버를 완전히 격리할 수 있도록 여러 서버를 구성할 수 있습니다. 이 기능은 멀티 테넌트 환경과 같은 특정 시나리오에서 유용할 수 있습니다.

JBoss EAP는 기본적으로 서버를 제공합니다.

기본 Undertow 하위 시스템 구성

<subsystem xmlns="urn:jboss:domain:undertow:10.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <http-invoker security-realm="ApplicationRealm"/>
        </host>
    </server>
    ...
</subsystem>
Copy to Clipboard Toggle word wrap

다음 예제에서는 관리 CLI를 사용하여 서버를 구성하는 방법을 보여줍니다. Configuration Subsystems Web (Undertow) Server 로 이동하여 관리 콘솔을 사용하여 서버를 구성할 수도 있습니다.

기존 서버 업데이트

기존 서버를 업데이트하려면 다음을 수행합니다.

/subsystem=undertow/server=default-server:write-attribute(name=default-host,value=default-host)
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

새 서버 생성

새 서버를 생성하려면 다음을 수행합니다.

/subsystem=undertow/server=new-server:add
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

서버 삭제

서버를 삭제하려면 다음을 수행합니다.

/subsystem=undertow/server=new-server:remove
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

서버 구성에 사용할 수 있는 속성의 전체 목록은 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
Copy to Clipboard Toggle word wrap
참고

표준 액세스 로깅을 활성화한 후 서버를 다시 로드해야 합니다.

기본적으로 액세스 로그 레코드에는 다음 데이터가 포함됩니다.

  • 원격 호스트 이름
  • 원격 논리적 사용자 이름 (항상 -)
  • 인증된 원격 사용자
  • 요청 날짜 및 시간 (Common Log Format)
  • 요청의 첫 번째 줄
  • 응답의 HTTP 상태 코드
  • HTTP 헤더를 제외하고 전송된 바이트 수

이 데이터 집합은 공통 패턴으로 정의됩니다. 결합된 또 다른 패턴도 사용할 수 있습니다. 공통 패턴에 기록된 데이터 외에도 결합된 패턴에는 수신 헤더의 참조자 및 사용자 에이전트가 포함됩니다.

pattern 특성을 사용하여 기록된 데이터를 변경할 수 있습니다. 다음 CLI 명령은 결합된 패턴을 사용하도록 패턴 속성을 업데이트하는 방법을 보여줍니다.

/subsystem=undertow/server=default-server/host=default-host/setting=access-log:write-attribute(name=pattern,value="combined"
Copy to Clipboard Toggle word wrap
참고

패턴 특성을 업데이트한 후 서버를 다시 로드해야 합니다.

Expand
표 17.1. 사용 가능한 패턴
패턴설명

%a

원격 IP 주소

%A

로컬 IP 주소

%b

HTTP 헤더를 제외하고 전송된 바이트 또는 바이트가 없는 경우 -

%B

HTTP 헤더를 제외하고 전송된 바이트

%h

원격 호스트 이름

%H

요청 프로토콜

%l

원격 논리적 사용자 이름 from identd (항상 반환 -, Apache 액세스 로그 호환성을 위해 포함됨)

%m

요청 방법

%p

로컬 포트

%q

쿼리 문자열 ( ? 문자 제외)

%r

요청의 첫 번째 행

%s

응답의 HTTP 상태 코드

%t

날짜 및 시간(일반 로그 형식)

%u

인증된 원격 사용자

%U

요청된 URL 경로

%v

로컬 서버 이름

%D

요청을 처리하는 데 걸린 시간(밀리초)

%T

요청을 처리하는 데 걸리는 시간(초)

%I

현재 요청 스레드 이름 (나중에 스택 추적과 비교할 수 있음)

Common

%H %l %u %t "%r" %s %b

결합

%H %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}"

쿠키, 수신 헤더 및 응답 헤더 또는 세션에서 정보를 작성할 수도 있습니다. 구문은 Apache 구문 다음에 모델링됩니다.

  • 수신 헤더의 %{I,xxx}
  • 나가는 응답 헤더의 %{O,xxx}
  • 특정 쿠키를 위한 %{C,xxx}
  • %{R,xxx} 여기서 xxxServletRequest의 속성입니다.
  • %{s,xxx} 여기서 xxxHttpSession의 속성입니다.

이 로그에 추가 구성 옵션을 사용할 수 있습니다. 자세한 내용은 부록의 "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
Copy to Clipboard Toggle word wrap

기본적으로 콘솔 액세스 로그 레코드에는 다음 데이터가 포함됩니다.

Expand
표 17.2. 기본 콘솔 액세스 로그 데이터
로그 데이터 필드 이름설명

eventSource

요청의 이벤트 소스

hostName

요청을 처리하는 JBoss EAP 호스트

bytesSent

요청에 대한 응답으로 전송된 JBoss EAP 서버의 바이트 수

dateTime

JBoss EAP 서버에서 요청을 처리한 날짜 및 시간

remoteHost

요청이 시작된 머신의 IP 주소

remoteUser

원격 요청과 관련된 사용자 이름

requestLine

요청이 제출되었습니다

responseCode

JBoss EAP 서버에서 반환한 HTTP 응답 코드

기본 속성은 항상 로그 출력에 포함됩니다. attributes 속성을 사용하여 기본 로그 데이터의 레이블을 변경하고 경우에 따라 데이터 구성을 변경할 수 있습니다. attributes 속성을 사용하여 출력에 로그 데이터를 추가할 수도 있습니다.

Expand
표 17.3. 사용 가능한 콘솔 액세스 로그 데이터
로그 데이터 필드 이름설명형식

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={}})
Copy to Clipboard Toggle word wrap

결과 액세스 로그 레코드는 다음과 같은 추가 JSON 데이터와 유사합니다. 참고: 아래 예제 출력은 가독성을 위해 포맷됩니다. 실제 레코드에서는 모든 데이터가 한 줄로 출력됩니다.

{
    "eventSource":"web-access",
    "hostName":"default-host",
    "@version":"1",
    "qualifiedHostName":"localhost.localdomain",
    "bytesSent":1504,
    "@timestamp":"2019-05-02T11:57:37123",
    "remoteHost":"127.0.0.1",
    "remoteUser":null,
    "requestLine":"GET / HTTP/2.0",
    "responseCode":200,
    "responseHeaderContent-Type":"text/html"
}
Copy to Clipboard Toggle word wrap

다음 명령은 콘솔 액세스 로그를 활성화한 후 로그 데이터에 대한 업데이트를 보여줍니다.

/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={}})
Copy to Clipboard Toggle word wrap

다음 명령은 콘솔 액세스 로그를 활성화한 후 사용자 정의 메타데이터에 대한 업데이트를 보여줍니다.

/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}})
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat