3개의 웹 서버를 위한 OpenBSD 릴레이 SSL 역방향 프록시

3개의 웹 서버를 위한 OpenBSD 릴레이 SSL 역방향 프록시

저는 세 개의 다른 컴퓨터에서 방화벽 뒤에서 가상 서버를 실행하고 있습니다(각 컴퓨터는 클러스터가 아니라 다른 도메인을 제공합니다). Let's Encrypt 인증서를 자동으로 갱신하려면 도메인 이름을 기반으로 세 개의 다른 서버에 요청을 보내는 프록시가 필요합니다.

                        +--------+      +-------------+                      
                        |        +----->| domain1.com | 
                        |        |      +-------------+
                        |        |      +-------------+
domain1,2,3.com-->443-->| proxy  +----->| domain2.com |
                        |        |      +-------------+
                        |        |      +-------------+ 
                        |        +----->| domain3.com |
                        +--------+      +-------------+ 

프록시는 OpenBSD에서 릴레이됩니다. 나는 HTTP를 사용하여 일반 웹 서비스를 설정하기 위해 이 가이드(정확히 동일한 상황)를 따랐습니다. https://serverfault.com/questions/856807/openbsd-how-to-use-relayd-and-httpd-for-redirecting-subdomain-requests

하지만 SSL과 HTTPS는 다른 것 같습니다. 프록시와 서비스 도메인의 웹 서버에 SSL 인증서를 설치해야 하는 것 같습니다.

  1. 누구든지 이에 대한 적절한 구문을 제안할 수 있습니까?
  2. 동일한 시스템에 포트 80과 포트 443을 모두 제공할 수 있나요? 감사해요.

답변1

일반적으로 이러한 유형의 프런트 엔드에서는 프런트 엔드에 SSL 트래픽을 설치하고 암호화되지 않은 일반 HTTP 트래픽을 백엔드로 전달합니다.

          https                           http
       Internet -------->  relayd reverse proxy  ------->  internal LAN web server
                 port 443                        port 80

예를 들면 다음과 같습니다 man relayd.

다음 구성은 로드 밸런싱 모드(TLS 가속 및 레이어 7 로드 밸런싱)를 사용하여 HTTP 웹 서버 풀에 보안 HTTPS 연결을 전달하기 위한 릴레이를 추가합니다. HTTP 프로토콜 정의는 클라이언트 및 서버 주소 정보가 포함된 두 개의 HTTP 헤더를 추가하고 "Keep-Alive" 헤더 값을 구성된 세션 시간 제한으로 설정하며 해시에 "sessid" 변수를 포함하여 대상 호스트를 계산합니다.

http 프로토콜 "https" {
일치 헤더 설정 "X-Forwarded-For" \
값 "$REMOTE_ADDR"
일치 헤더 설정 "X-Forwarded-By" \
값 "$SERVER_ADDR:$SERVER_PORT"
헤더 설정 "Keep-Alive" 값과 일치 "$타임아웃"

일치 쿼리 해시 "sessid"
일치 해시 "sessid"


블록 경로 "/cgi-bin/index.cgi" 값 " 전달명령 ="

tls { TLSv1.0 없음, 비밀번호 "HIGH" }
}

"tlsaccel" 릴레이 {
www.example.com 포트 443 TLS
프로토콜 "https" 에서 수신하여
포트 8080 모드 로드 밸런싱 확인 tcp로 전달
}

ssl또는 tls 가 있으면 key가상 호스트와 연결된 IP 주소를 기반으로 파일을 찾으려고 시도합니다. X.509 인증서의 경우 개인 키와 인증서의 공개 키에서 해당 인증서를 찾으려고 시도합니다 relayd./etc/ssl/private/etc/ssl

~에서릴레이 에이전트

"listen on $relayd_addr port $relayd_port ssl" 줄과 같이 ssl 키워드가 있으면 릴레이는 암호화된 SSL 프로토콜을 사용하여 연결을 수락합니다. 릴레이는 /etc/ssl/private/address.key에서 개인 키를 찾고 /etc/ssl/address.crt에서 공개 인증서를 찾습니다. 여기서 address는 수신할 릴레이의 지정된 IP 주소입니다.

따라서 파일 이름은 릴레이가 수신 대기 중인 주소와 동일해야 합니다. 우리 예에서 Relayd.conf는 "relayd_addr=127.0.0.1"을 수신하고 있으므로 파일~ 해야 하다이름은 127.0.0.1.key, 127.0.0.1.csr 및 127.0.0.1.crt입니다.

포트 80을 제공하려면 위 구성에 HTTP 프록시로 일반 구문을 추가하기만 하면 됩니다. 동시에 공존할 수 있습니다.

관련 정보