8.3. 로드 밸런서 또는 프록시 설정


이 섹션에서는 클러스터형 Red Hat Single Sign-On 배포 앞에 역방향 프록시 또는 로드 밸런서를 배치하기 전에 구성해야 하는 여러 사항에 대해 설명합니다. 또한 클러스터된 도메인 예제 를 사용한 로드 밸런서의 구성을 설명합니다.

8.3.1. 클라이언트 IP 주소 식별

Red Hat Single Sign-On의 몇 가지 기능은 인증 서버에 연결하는 HTTP 클라이언트의 원격 주소가 클라이언트 시스템의 실제 IP 주소입니다. 예를 들면 다음과 같습니다.

  • 이벤트 로그 - 실패한 로그인 시도가 잘못된 소스 IP 주소로 기록됨
  • SSL 필요 - 필요한 SSL이 외부(기본값)로 설정된 경우 모든 외부 요청에 대해 SSL이 필요합니다.
  • 인증 흐름 - IP 주소를 사용하여 외부 요청에 대해서만 OTP를 표시하는 사용자 정의 인증 흐름
  • 동적 클라이언트 등록

이는 Red Hat Single Sign-On 인증 서버 앞에 역방향 프록시 또는 로드 밸런서가 있는 경우 문제가 될 수 있습니다. 일반적인 설정은 부하 분산 및 요청을 사설 네트워크에 있는 백엔드 Red Hat Single Sign-On 서버 인스턴스로 전달하는 공용 네트워크에 프런트 엔드 프록시가 있다는 것입니다. 이 시나리오에서는 실제 클라이언트 IP 주소가 Red Hat Single Sign-On 서버 인스턴스에서 전달 및 처리하도록 몇 가지 추가 구성이 있습니다. 특히 다음 내용에 유의하십시오.

  • 역방향 프록시 또는 로드 밸런서를 구성하여 X-Forwarded-ForX-Forwarded-Proto HTTP 헤더를 올바르게 설정합니다.
  • 원래 'Host' HTTP 헤더를 유지하도록 역방향 프록시 또는 로드 밸런서를 구성합니다.
  • X-Forwarded-For 헤더에서 클라이언트의 IP 주소를 읽도록 인증 서버를 구성합니다.

X-Forwarded-ForX-Forwarded-Proto HTTP 헤더를 생성하고 원래 Host HTTP 헤더를 보존하도록 프록시를 구성하는 것은 이 가이드의 범위를 벗어납니다. 프록시를 통해 X-Forwared-For 헤더가 설정되어 있는지 확인하기 위해 추가 예방 조치를 취합니다. 프록시가 올바르게 구성되지 않은 경우 악성 클라이언트는 이 헤더를 설정하고 Red Hat Single Sign-On을 사용하여 클라이언트가 실제와 다른 IP 주소에서 연결된다고 생각할 수 있습니다. IP 주소의 검정색 또는 흰색 목록을 수행하는 경우 이는 실제로 중요합니다.

프록시 자체 외에도 Red Hat Single Sign-On 측에서 구성해야 하는 몇 가지 사항이 있습니다. 프록시가 HTTP 프로토콜을 통해 요청을 전달하는 경우 네트워크 패킷 대신 X-Forwarded-For 헤더에서 클라이언트의 IP 주소를 가져오도록 Red Hat Single Sign-On을 구성해야 합니다. 이렇게 하려면 운영 모드에따라 프로필 구성 파일(standalone.xml,standalone-ha.xml 또는 domain.xml )을 열고 urn:jboss:domain:undertow:6.0 XML 블록을 찾습니다.

X-Forwarded-For HTTP Config

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
   <buffer-cache name="default"/>
   <server name="default-server">
      <ajp-listener name="ajp" socket-binding="ajp"/>
      <http-listener name="default" socket-binding="http" redirect-socket="https"
          proxy-address-forwarding="true"/>
      ...
   </server>
   ...
</subsystem>
Copy to Clipboard Toggle word wrap

http-listener 요소에 proxy-address-forwarding 속성을 추가합니다. 값을 true 로 설정합니다.

프록시가 HTTP 대신 requests(즉, Apache HTTPD + mod-cluster)를 사용하는 경우 약간 다르게 구성해야 합니다. http-listener 를 수정하는 대신, 이 정보를 패킷에서 가져오기 위해 필터를 추가해야 합니다.

X-Forwarded-For Cryostat Config

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
     <buffer-cache name="default"/>
     <server name="default-server">
         <ajp-listener name="ajp" socket-binding="ajp"/>
         <http-listener name="default" socket-binding="http" redirect-socket="https"/>
         <host name="default-host" alias="localhost">
             ...
             <filter-ref name="proxy-peer"/>
         </host>
     </server>
        ...
     <filters>
         ...
         <filter name="proxy-peer"
                 class-name="io.undertow.server.handlers.ProxyPeerAddressHandler"
                 module="io.undertow.core" />
     </filters>
 </subsystem>
Copy to Clipboard Toggle word wrap

8.3.2. 역방향 프록시로 HTTPS/SSL 활성화

역방향 프록시에서 SSL에 포트 8443을 사용하지 않는 경우 리디렉션되는 포트 HTTPS 트래픽을 구성해야 합니다.

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
    ...
    <http-listener name="default" socket-binding="http"
        proxy-address-forwarding="true" redirect-socket="proxy-https"/>
    ...
</subsystem>
Copy to Clipboard Toggle word wrap

http-listener 요소에 redirect-socket 속성을 추가합니다. 값은 또한 정의해야 하는 소켓 바인딩을 가리키는 proxy-https 여야 합니다.

그런 다음 socket-binding - group 요소에 새 socket-binding 요소를 추가합니다.

<socket-binding-group name="standard-sockets" default-interface="public"
    port-offset="${jboss.socket.binding.port-offset:0}">
    ...
    <socket-binding name="proxy-https" port="443"/>
    ...
</socket-binding-group>
Copy to Clipboard Toggle word wrap

8.3.3. 설정 확인

역방향 프록시를 통해 /auth/realms/master/.well-known/openid-configuration 경로를 열어 역방향 프록시 또는 로드 밸런서 구성을 확인할 수 있습니다. 예를 들어 역방향 프록시 주소가 https://acme.com/ 인 경우 URL https://acme.com/auth/realms/master/.well-known/openid-configuration 을 엽니다. 그러면 Red Hat Single Sign-On의 여러 끝점이 나열된 JSON 문서가 표시됩니다. 끝점이 역방향 프록시 또는 로드 밸런서의 주소(scheme, 도메인 및 포트)로 시작하는지 확인합니다. 이렇게 하면 Red Hat Single Sign-On이 올바른 엔드포인트를 사용하고 있는지 확인합니다.

또한 Red Hat Single Sign-On에 요청에 대한 올바른 소스 IP 주소가 표시되는지 확인해야 합니다. 잘못된 사용자 이름 및/또는 암호를 사용하여 관리자 콘솔에 로그인할 수 있는지 확인합니다. 서버 로그에 다음과 같은 경고가 표시됩니다.

08:14:21,287 WARN  XNIO-1 task-45 [org.keycloak.events] type=LOGIN_ERROR, realmId=master, clientId=security-admin-console, userId=8f20d7ba-4974-4811-a695-242c8fbd1bf8, ipAddress=X.X.X.X, error=invalid_user_credentials, auth_method=openid-connect, auth_type=code, redirect_uri=http://localhost:8080/auth/admin/master/console/?redirect_fragment=%2Frealms%2Fmaster%2Fevents-settings, code_id=a3d48b67-a439-4546-b992-e93311d6493e, username=admin
Copy to Clipboard Toggle word wrap

ipAddress 값이 역방향 프록시 또는 로드 밸런서의 IP 주소가 아닌 로그인하려는 시스템의 IP 주소인지 확인합니다.

8.3.4. Built-In Load Balancer 사용

이 섹션에서는 클러스터형 도메인 예에 설명된 기본 로드 밸런서 구성에 대해 설명합니다.

Clustered Domain Example 은 하나의 시스템에서만 실행되도록 설계되었습니다. 다른 호스트에 슬레이브를 가져오려면 다음을 수행해야 합니다.

  1. 새 호스트 슬레이브를 가리키도록 domain.xml 파일을 편집합니다.
  2. 서버 배포를 복사합니다. domain.xml,host.xml 또는 host-master.xml 파일이 필요하지 않습니다. 또한 standalone/ 디렉터리도 필요하지 않습니다.
  3. host-slave.xml 파일을 편집하여 사용된 바인드 주소를 변경하거나 명령줄에서 재정의합니다.

8.3.4.1. 로드 밸런서를 사용하여 새 호스트 등록

먼저 domain.xml 의 로드 밸런서 구성에 새 호스트 슬레이브를 등록합니다. 이 파일을 열고 load-balancer 프로필의 undertow 구성으로 이동합니다. reverse-proxy XML 블록 내에 remote- host 3 이라는 새 호스트 정의를 추가합니다.

domain.xml reverse-proxy config

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
  ...
  <handlers>
      <reverse-proxy name="lb-handler">
         <host name="host1" outbound-socket-binding="remote-host1" scheme="ajp" path="/" instance-id="myroute1"/>
         <host name="host2" outbound-socket-binding="remote-host2" scheme="ajp" path="/" instance-id="myroute2"/>
         <host name="remote-host3" outbound-socket-binding="remote-host3" scheme="ajp" path="/" instance-id="myroute3"/>
      </reverse-proxy>
  </handlers>
  ...
</subsystem>
Copy to Clipboard Toggle word wrap

output-socket-bindingdomain.xml 파일에서 나중에 구성된 socket-binding 을 가리키는 논리 이름입니다. instance-id 특성은 로드 밸런싱 시 고정 세션을 활성화하기 위해 쿠키에서 이 값을 사용하므로 새 호스트에 고유해야 합니다.

다음으로 load-balancer-sockets socket-binding-group 으로 이동하고 remote-host3 에 대한 outbound-socket-binding 을 추가합니다. 이 새 바인딩은 새 호스트의 호스트와 포트를 가리켜야 합니다.

domain.xml outbound-socket-binding

<socket-binding-group name="load-balancer-sockets" default-interface="public">
    ...
    <outbound-socket-binding name="remote-host1">
        <remote-destination host="localhost" port="8159"/>
    </outbound-socket-binding>
    <outbound-socket-binding name="remote-host2">
        <remote-destination host="localhost" port="8259"/>
    </outbound-socket-binding>
    <outbound-socket-binding name="remote-host3">
        <remote-destination host="192.168.0.5" port="8259"/>
    </outbound-socket-binding>
</socket-binding-group>
Copy to Clipboard Toggle word wrap

8.3.4.2. 마스터 바인딩 주소

다음으로 해야 할 일은 마스터 호스트의 공용관리 바인딩 주소를 변경하는 것입니다. 주소 바인딩 장에 설명된 대로 domain.xml 파일을 편집하거나 다음과 같이 명령줄에서 이러한 바인딩 주소를 지정합니다.

$ domain.sh --host-config=host-master.xml -Djboss.bind.address=192.168.0.2 -Djboss.bind.address.management=192.168.0.2
Copy to Clipboard Toggle word wrap

8.3.4.3. 호스트 슬라브 바인딩 주소

다음으로 공용,관리 및 도메인 컨트롤러 바인딩 주소 (jboss.domain.master-address)를 변경해야 합니다. host-slave.xml 파일을 편집하거나 다음과 같이 명령줄에서 지정합니다.

$ domain.sh --host-config=host-slave.xml
     -Djboss.bind.address=192.168.0.5
      -Djboss.bind.address.management=192.168.0.5
       -Djboss.domain.master.address=192.168.0.2
Copy to Clipboard Toggle word wrap

jboss.bind.addressjboss.bind.addres.management 의 값은 호스트 슬레이브의 IP 주소와 관련이 있습니다. jboss.domain.master.address 의 값은 마스터 호스트의 관리 주소인 도메인 컨트롤러의 IP 주소여야 합니다.

8.3.5. 다른 로드 밸런서 구성

다른 소프트웨어 기반 로드 밸런서 사용 방법에 대한 자세한 내용은 JBoss EAP 구성 가이드 의 로드 밸런싱 섹션을 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat