본문 바로가기
MiddleWare(상용 미들웨어)/WebtoB

[WebtoB] Reverse Proxy 설정하기

by wonkidoki 2025. 1. 21.
반응형

- Reverse Proxy는 보통 Websoket을 사용하는 경우 많이 사용한다.

- WebtoB Reverse Proxy -> Http Listener 를 통해 WAS로 요청 전달하는 방식이다.

- 기타 옵션을 통해 Proxy SSL 인증서를 태우거나 Check URL 호출 등을 할 수 있다.

 


1. Reverse Proxy 절

*REVERSE_PROXY
rp_erp     PathPrefix = "/",
                ServerPathPrefix = "/",
                VhostName = "v_erp",
                ServerAddress = "IP:PORT",
                Options = "DynamicServerAddress",
                MinPersistentServerConnections = 20,
                MaxPersistentServerConnections = 20,
                PersistentServerCheckUrl ="/app/test.jsp"
                ProxySslFlag = Y,
                ProxySslName = rp_ssl

Vhost에 설정된 도메인 or IP 호출시 해당 Reverse Proxy 절을 태워 다른 서버로 전달한다.

 

다음은 각 옵션들에 대한 설명이다.(이외에도 여러 설정값이 있다.)

PathPrefix(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • ReverseProxyGroupName 설정을 사용하는 경우 PathPrefix 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 PathPrefix 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.
  • HTTP Request URL이 지정된 값으로 시작하면 해당 요청을 Reverse Proxy로 처리한다.
  • PathPrefix = "/internal/"
 

ServerPathPrefix(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • ReverseProxyGroupName 설정을 사용하는 경우 ServerPathPrefix 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 ServerPathPrefix 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.
  • HTTP Request URL의 PathPrefix에 해당하는 부분이 ServerPathPrefix에 설정된 값으로 교체된 후 수정된 요청이 내부 서버(ServerAddress)로 전달된다.
  • 다음의 설정으로 HTTP Request URL이 "/internal/abc.html"이 "/docs/abc.html"로 변경된 후 요청이 내부 서버로 전송된다.
  • ServerPathPrefix = "/docs/"
 

ServerAddress(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • 요청이 전달되는 내부 서버 주소를 설정한다.
  • ServerAddress = "internal.server.com:80"
 

ReverseProxyGroupName

  • 종류: Literal
  • 범위: 31자 이내
  • REVERSE_PROXY_GROUP 절에 정의된 이름을 설정한다.
  • 여러 Reverse Proxy를 Group으로 묶어서 멀티 서버를 구성하고자 하는 경우 사용한다.
  • ReverseProxyGroupName = "rproxyGroup1"
 

VhostName

  • 종류: String
  • 범위: 1023자 이내
  • ReverseProxyGroupName 설정을 사용하는 경우 VhostName 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다. ReverseProxyGroupName 설정을 사용하는 경우 VhostName 설정은 REVERSE_PROXY_GROUP 절에 설정한 값과 동일해야 한다.
  • Reverse Proxy가 속하는 VHOST 절에 설정된 Virtual Host의 이름을 설정한다.
  • 콤마(,)로 구분하여 64개까지 동시에 설정할 수 있다.
 

RewriteRedirect

  • 종류: Literal
  • 범위: 255자 이내
  • ReverseProxyGroupName 설정을 사용하는 경우 RewriteRedirect 설정을 하지 않아도 되며 이 경우 REVERSE_PROXY_GROUP 절에 설정한 값을 사용한다.
  • 내부 서버 응답의 Status Code가 301, 302, 303, 307일 경우 (redirect), Location, Content-Location header field의 absolute URL을 수정한다.
  • RewriteRedirect는 흰 공백(whitespace)으로 2개의 string으로 나누어진다.
  • 첫 번째는 원본 응답의 Location, Content-Location의 URL과 비교된다. URL이 정해진 string으로 시작하면 URL이 수정된다. URL Host 부분은 요청에 사용된 Host, Port로 전환되고, URL Path 부분은 두 번째 string으로 교체된다.
  • 다음의 설정으로 원본 응답의 Location인 "http://internal.server.com:80/docs/abc.html"이 "http://webtob:8100/internal/abc.html"로 변경된다.
  • RewriteRedirect = "http://internal.server.com:80/docs/ /internal/" RewriteRedirect = "http://internal.server.com:80/docs_kr/ /internal_kr/" RewriteRedirect = "http://internal.server.com:80/docs_ch/ /internal_ch/"
  • RewriteRedirect 설정은 최대 16개까지 설정할 수 있다.
 
 

PersistentServerCheckUrl

  • 종류: Literal
  • 범위: 255자 이내
  • 내부 서버와의 커넥션을 지속적으로 유지하기 위해 내부적으로 HTTP HEAD 요청을 PING 메시지로 사용한다.
  • HTTP 요청을 내부 서버로 보내 HTTP 응답을 받아 이를 PONG 메시지로 확인하고 커넥션을 지속적으로 유지한다. 200 응답이 아닌 경우 커넥션은 지속적으로 유지 되지 않는다. 이를 위해 내부 서버에 Ping 요청에 대해 응답할 수 있는 애플리케이션을 만들어놓아야 한다.
  • PersistentServerCheckUrl = "/ping.html"
 

ProxySslFlag

  • 종류: Boolean
  • 기본값: N
  • 내부 서버와 SSL/TLS 프로토콜을 사용하여 연결할지 여부를 설정한다.
  • ProxySslName 설정으로 적용할 PROXY_SSL 절 항목을 지정할 수 있다.
 

ProxySslName

  • 종류: String
  • 범위: 31자 이내
  • ProxySslFlag를 'Y'로 설정하는 경우 적용되며, 사용할 PROXY_SSL 절 항목을 설정한다.

2. Reverse Proxy Group 절

- 해당 설정은 WebtoB 라이선스를 Enterprise로 해야 사용 가능하다.

- Reverse Proxy를 묶어 분기 처리한다고 보면 된다.

 

REVERSE_PROXY_GROUP 절 이름

  • 종류: String
  • 범위: 31자 이내
  • Reverse Proxy Group 이름을 설정한다.
 

PathPrefix(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • HTTP Request URL이 지정된 값으로 시작하면 해당 요청을 Reverse Proxy로 처리한다.
  • PathPrefix = "/internal/"
 

ServerPathPrefix(필수 항목)

  • 종류: Literal
  • 범위: 255자 이내
  • HTTP Request URL의 PathPrefix에 해당하는 부분이 ServerPathPrefix에 설정된 값으로 교체된 후 수정된 요청이 내부 서버(ServerAddress)로 전달된다.
  • 다음의 설정으로 HTTP Request URL이 "/internal/abc.html"이 "/docs/abc.html"로 변경된 후 요청이 내부 서버로 전송된다.
  • ServerPathPrefix = "/docs/"

3. Proxy SSL 절

- WebtoB가 Proxy 역할을 할 때 사용할 SSL의 기능을 설정한다. 해당 절에 정의된 형태로 SSL 서비스한다.

*PROXY_SSL    rp_ssl Verify = 0

 

다음은 Proxy SSL 절에서 주로 사용하는 옵션이다.

Verify

  • 종류: Numeric
  • 기본값: 0
  • 내부 서버의 인증서에 대하여 인증 타입을 설정한다.
  • 다음은 인증 타입에 대한 설명이다.
  • 레벨설명
    0 내부 서버의 인증서 인증 과정을 진행하지 않는다.
    1 내부 서버는 사용 가능한 인증을 보여 주어야 하며 WebtoB가 내부 서버의 인증서를 받은 경우 인증서 인증 과정을 진행한다.
    2 내부 서버는 사용 가능한 인증을 반드시 보여 주어야 하며 WebtoB가 내부 서버의 인증서 인증 과정을 진행한다.
    3 내부 서버는 사용 가능한 인증을 보여 주어야 하며 WebtoB가 인증서를 가지고 있지 않은 상황에서는 내부 서버의 인증서 인증 과정을 진행하지 않는다.
 

VerifyDepth

  • 종류: Numeric
  • 범위: 0 ~ INT_MAX
  • 기본값: 0
  • 실제 업무에 적용되는 경우에 인증에서 개입할 부분은 순서대로 다른 CA에 의해서 서로를 인증하는 CA에 관한 것이다. VerifyDepth 항목은 얼마나 깊은 레벨로 연결된 CA들을 추적하여 인증할 것인지를 설정한다. 단 하나의 인증 CA만 필요하다면 1로 설정한다.
 

CACertificatePath

  • 종류: Literal
  • 범위: 255자 이내
  • 인증서를 저장할 디렉터리를 설정한다.
  • 인증서는 연결하기 위해 준비할 서버의 인증서를 인증할 내용을 담고 있다. 인증서는 보통 PEM 방식으로 인코딩되어 있어야 한다.
 

CACertificateFile

  • 종류: Literal
  • 범위: 255자 이내
  • 단일 CA(Certificate Agent: 인증을 대신해 주는 기업)로부터의 서버 인증만 받고 싶다면 CACertificatePath 지시자가 아닌 이 지시자를 이용하여 단일 PEM으로 인코딩된 인증 파일을 사용해야 한다.
 

CheckPeerValidPeriod

  • 종류: Literal
  • 기본값: N
  • 내부 서버의 인증서 인증과정을 진행하는 경우 인증서의 유효기간을 검증할 지 여부를 설정한다 .
 

Protocols

  • 종류: Literal
  • 범위: 255자 이내
  • 기본값: "SSLv3, TLSv1, TLSv1.1, TLSv1.2"
  • 클라이언트가 사용할 수 있는 프로토콜을 설정한다. 특정 SSL, TLS 버전에 대한 지원 여부를 설정할 수 있다. "TLSv1.1, TLSv1.2"는 WBSSL 1.0.1 이상인 경우에 지원한다. "SSLv2"는 더이상 지원하지 않는다.
  • 특정 프로토콜을 사용하지 않을 경우 프로토콜 이름 앞에 하이픈(-)을 설정한다.
 

RequiredCiphers

  • 종류: Literal
  • 범위: 1023자 이내
  • 기본값: "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP:!RC4:!IDEA:!3DES"
  • 클라이언트가 사용할 수 있는 cipher를 설정한다. 특정 cipher 및 SSL, TLS 버전의 지원 여부를 설정할 수 있다. WebtoB는 OpenSSL을 사용하기때문에, cipher 이름은 OpenSSL 설명서를 참고한다 .
 

CertificateFile

  • 종류: Literal
  • 범위: 255자 이내
  • PEM 방식으로 인코딩된 클라이언트 인증서를 설정한다. 내부 서버가 클라이언트 인증을 원하는 경우 반드시 설정해야 한다. 이것은 DER 규칙으로 인코딩되어 있으며 웹에서 전송하기 위해서 ASCII 코드처럼 이용된다. 만일 인증서 역시 암호화된 상태라면 비밀번호(passphrase)를 물어본다.
 

CertificateKeyFile

  • 종류: Literal
  • 범위: 255자 이내
  • 클라이언트로 쓰이는 PEM 방식으로 인코딩된 인증서의 개인 Key를 설정한다. 내부 서버가 클라이언트 인증을 원하는 경우 반드시 설정해야 한다.
  • Key가 인증서와 함께 조합되지 않았다면 이 지시자를 이용하여 Key의 위치를 지정해야 한다. 일반적으로 WebtoB의 SSL 디렉터리에 가져다 두게 된다.
 

CertificateChainFile

  • 종류: Literal
  • 범위: 255자 이내
  • 클라이언트 인증서(Certificate)의 인증서 연쇄(Certificate Chain)를 구성할 때 필요한 상위 인증기관들(CAs)의 인증서(Certificate) 경로를 설정한다.
 

PassPhraseDialog

  • 종류: Literal
  • 기본값: "builtin"
  • PROXY_SSL에서 클라이언트 인증(CertificateFile, CertificateKeyFile)을 사용하는 경우 암호화된 개인키(encrypted private key) 파일들에 대한 암호문을 얻기 위한 방식을 설정한다.
  • 다음은 설정값에 대한 설명이다.
  • 설정값설명
    builtin WebtoB가 기동될 때 암호문을 입력할 것을 요구한다.
    exec:<program path> WebtoB가 기동될 때 해당 프로그램을 실행하고, 그 출력 결과를 암호문으로 사용한다. exec로 실행되는 파일은 컴파일된 실행 파일이나 셸스크립트가 이용될 수 있다.
    file:<passphrase file path> WebtoB가 기동될 때 wsmkppd 툴을 이용하여 생성된 passphrase file을 이용하여 암호문을 사용한다.