가상 호스트 사용
애플리케이션 및 이를 서비스하는 엔드포인트 간에 격리를 원하는 경우에는 가상 호스트를 사용할 수 있습니다.
단일 애플리케이션 서버는 종종 다수의 서로 다른 호스트 및 포트 구성의 요청에 응답합니다. 이는 다수의 이유가 결합되어 발생됩니다(예: 이름이 서로 다른 복수의 네트워크 인터페이스가 있는 시스템에서 실행 중임 또는 http 서버, 프록시 또는 로드 밸런서에서 라우팅됨). 이 경우에는 특정 호스트에서 접속할 수 있는 애플리케이션을 제어하고자 할 수 있습니다. 가상 호스트는 이 기능을 제공합니다. 이는 호스트 별명의 구성된 목록에 대해 요청된 호스트 이름 및 포트 번호(HTTP 호스트 헤더로부터 판별됨)와 일치시킵니다.
WebSphere Application Server Liberty에서는 기본 구성으로 충분합니다. 기본 가상 호스트(default_host)는 수신 호스트 및 포트 조합의 요청을 일치시키며, 이를 기본 애플리케이션 컨테이너에 전달합니다.
- virtualHost 구성 요소 ID 값.
- hostAlias 하위 요소 구성.
- allowFromEndpoint 하위 요소 구성(사용되는 경우).
- WAR의 ibm-web-bnd.xml 또는 ibm-web-bnd.xmi 파일에서 가상 호스트 구성.
- httpEndpoint의 호스트 속성 값.
- httpEndpoint의 ID 속성 값.
두 애플리케이션을 서로 간에 분리
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" />
<httpEndpoint id="alternateEndpoint" host="*" httpPort="9081" />
<virtualHost id="application-1">
<hostAlias>your_host_name:9080</hostAlias>
</virtualHost>
<virtualHost id="application-2">
<hostAlias>localhost:9081</hostAlias>
</virtualHost>
<enterpriseApplication location="myApp.ear" name="App1"/>
<webApplication location="myApp2.war" name="App2" />
defaultHttpEndpoint는 9080 포트의 모든 인터페이스를 표시하며, alternateEndpoint는 9081 포트의 모든 인터페이스를 표시합니다.
App1에 <virtual-host name="application-1"/>을 지정하는 ibm-web-bnd.xml 파일의 WAR 파일이 있는 경우, 이 애플리케이션은 your_host_name:9080/app1_context_root에서만 액세스가 가능합니다.
App2(WAR임)에 <virtual-host name="application-2"/>를 지정하는 ibm-web-bnd.xml 파일이 있는 경우, 이 애플리케이션은 localhost:9081/app2_context_root에서만 액세스가 가능합니다.
특정 가상 호스트를 지정하지 않은 세 번째 애플리케이션이 배치된 경우, 이 구성에서 해당 애플리케이션은 다른 포트를 지정하는 HOST 헤더를 포함하는 프록시 요청인 경우에만 액세스 가능합니다. 예를 들어, 포트 80의 프록시에 대해 요청이 작성된 경우 해당 포트는 hostAlias 스펙에 나열되지 않습니다. 따라서 이 요청은 default_host 가상 호스트로 라우팅됩니다.
요청된 호스트 또는 포트를 기반으로 애플리케이션 격리
- 가상 호스트 이름을 결정하고, 새(비-기본) 호스트를 참조하도록 애플리케이션을 업데이트하십시오.
가상 호스트 요소를 WAR의 ibm-web-bnd.xml 또는
ibm-web-bnd.xmi 파일에 추가하십시오.
<?xml version="1.0" encoding="UTF-8"?> <web-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xmk/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd" version="1.0" /> <virtual-host name="proxiedRequests" /> </web-bnd>
- server.xml 파일에 virtualHost 요소를 추가하십시오.
이름은 애플리케이션에 지정된 이름과 일치되어야 하며, 새 가상 호스트로 라우팅되는 hostAliases를 정의해야 합니다. 참고: 일치되는 호스트 이름 및 포트는 사용자가 원래 요청한 호스트 이름 및 포트이며, 이는 Liberty가 사용 중인 호스트 및 포트와 일치하거나 일치하지 않을 수 있습니다. 다음 예는 server.xml 파일에 추가된 가상 호스트 요소를 보여줍니다.
<virtualHost id="proxiedRequests"> <hostAlias>external.host.name:80</hostAlias> <hostAlias>external.host.name:443</hostAlias> </virtualHost>
요청이 프록시에서 수신되는 경우, 이 구성은 독자적으로 프록시의 호스트 및 포트에 대해 작성된 요청을 "proxiedRequests" 가상 호스트로 라우팅합니다.
시작 엔드포인트를 기반으로 액세스 제한
- 다른 httpEndpoint를 정의하십시오. 다음 예는 다른 httpEndpoint를 보여줍니다.
<httpEndpoint id="localHostOnly" host="localhost" httpPort="9081" httpsPort="9444"/>
이 http 엔드포인트는 host="localhost"임을 지정하며, 이는 9081 및 9444가 localhost 인터페이스에서만 노출됨을 의미합니다.
- allowFromEndpointRef 속성을 지정하도록 virtualHost 정의를 업데이트하십시오.
이 속성이 지정되면 virtualHost가 지정된 엔드포인트에서만 요청을 허용합니다. 예를 들어 다음과 같습니다.
<virtualHost id="default_host" allowFromEndpointRef="localHostOnly"> <hostAlias>*:9081</hostAlias> <hostAlias>*:9444</hostAlias> </virtualHost> </virtualHost id="proxiedRequests"> <hostAlias>*:9080</hostAlias> <hostAlias>*:9443</hostAlias> <hostAlias>external.host.name:80</hostAlias> <hostAlias>external.host.name:443</hostAlias> </virtualHost>
이 구성에서:- 이제 default_host 가상 호스트는 역시 localHostOnly 엔드포인트에서 발생한 localhost:9081 및 localhost:9444에서만 방향 지정된 요청을 수락합니다. 포트 9081 및 9444에 대한 기타 요청은 거절됩니다. localhost:9081을 참조하는 호스트 헤더가 있는 defaultHttpEndpoing의 요청은 거부됩니다.
- 이제 proxiedRequests 가상 호스트는 프록시와 포트 80 또는 443의 외부 호스트 이름을 참조하는 호스트 헤더가 있는 요청과 함께 포트 9080 또는 9443(defaultHttpEndpoint에서 사용하는 기본 포트임)에 발행된 요청을 허용합니다.