저는 세 개의 다른 컴퓨터에서 방화벽 뒤에서 가상 서버를 실행하고 있습니다(각 컴퓨터는 클러스터가 아니라 다른 도메인을 제공합니다). 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 인증서를 설치해야 하는 것 같습니다.
- 누구든지 이에 대한 적절한 구문을 제안할 수 있습니까?
- 동일한 시스템에 포트 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 프록시로 일반 구문을 추가하기만 하면 됩니다. 동시에 공존할 수 있습니다.