웹사이트 검색

CentOS-RHEL 8에서 Hitch를 사용하여 Varnish 캐시에 대해 HTTPS를 활성화하는 방법


Varnish Cache에는 SSL/TLS 및 포트 443과 관련된 기타 프로토콜에 대한 기본 지원이 부족합니다. 웹 애플리케이션의 성능을 높이기 위해 Varnish Cache를 사용하는 경우 SSL/TLS 종료 프록시라는 또 다른 소프트웨어를 설치하고 구성하여 와 함께 작동해야 합니다. >바니시 캐시를 사용하여 HTTPS를 활성화합니다.

Hitch는 현재 Linux, OpenBSD, FreeBSD 및 MacOSX에서 작동하는 Varnish Cache용으로 설계된 libev 기반의 확장 가능한 무료 오픈 소스 SSL/TLS 프록시입니다. 포트 443(HTTPS 연결의 기본 포트)을 수신하여 TLS/SSL 연결을 종료하고 암호화되지 않은 트래픽을 Varnish Cache로 전달합니다. , 다른 백엔드에서도 작동해야 합니다.

TLS1.2TLS1.3과 레거시 TLS 1.0/1.1을 지원하고 ALPN( >애플리케이션 계층 프로토콜 협상) 및 클라이언트에 신호를 보내는 PROXY 프로토콜인 HTTP/2에 대한 NPN(다음 프로토콜 협상) 백엔드에 대한 IP/포트, 원본에 대한 UNIX 도메인 소켓 연결, SNI(서버 이름 표시), 와일드카드 인증서 유무. 또한 최대 15,000 청취 소켓과 500,000 인증서가 필요한 대규모 설치에도 적합합니다.

NginxApache HTTP 서버용 Varnish Cache 설치에 관한 이전 두 기사에 이어서 이 가이드에서는 HTTPS<를 활성화하는 방법을 보여줍니다. CentOS/RHEL 8에서 Hitch TLS Proxy를 사용하는 Varnish Cache입니다.

이 가이드에서는 Nginx 또는 Apache 웹 서버용 Varnish를 설치했다고 가정합니다. 그렇지 않은 경우 다음을 참조하세요.

  • CentOS/RHEL 8에서 Nginx 웹 서버용 Varnish Cache 6을 설치하는 방법
  • CentOS/RHEL 8에서 Apache 웹 서버용 Varnish Cache 6을 설치하는 방법

1단계: CentOS/RHEL 8에 Hitch 설치

1. Hitch 패키지는 EPEL(Enterprise Linux용 추가 패키지) 저장소에 제공됩니다. 설치하려면 먼저 시스템에서 EPEL을 활성화한 다음 패키지를 설치하세요. OpenSSL 패키지가 설치되어 있지 않은 경우에도 설치하세요.

dnf install epel-release
dnf install hitch openssl

2. 패키지 설치가 완료되면 Hitch가 작동하도록 Varnish Cache를 구성해야 합니다. 또한 SSL/TLS 인증서와 Varnish백엔드로 사용하려면 Hitch를 구성해야 합니다. Hitch의 주요 구성 파일은 /etc/hitch/hitch.conf에 있으며 이에 대해서는 아래에서 설명합니다.

2단계: 장애를 위한 광택 캐시 구성

3. 다음으로 PROXY 프로토콜을 사용하여 추가 포트(이 경우 8443)를 수신하도록 Varnish를 활성화합니다. Hitch와의 통신을 위한 지원입니다.

따라서 편집을 위해 Varnish systemd 서비스 파일을 엽니다.

systemctl edit --full varnish

ExecStart 줄을 찾아 127.0.0.1:8443,proxy 값을 가진 추가 -a 플래그를 추가합니다. 127.0.0.1:8443 값을 사용하면 Varnish가 내부 연결(동일한 서버에서 실행되는 프로세스, 즉 이 경우 장애)만 허용하고 외부 연결은 허용하지 않음을 의미합니다.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

파일을 저장한 다음 Varnish 서비스를 다시 시작하여 최신 변경 사항을 적용합니다.

systemctl restart varnish

3단계: SSL/TLS 인증서 받기

4. 이 섹션에서는 Hitch에서 사용할 SSL/TLS 인증서 번들을 생성하는 방법을 설명합니다. 이 가이드에서는 자체 서명 인증서, 상용 인증서 또는 Let's Encrypt 인증서를 사용하는 방법에 대한 다양한 옵션을 설명합니다.

자체 서명된 인증서(로컬 테스트 환경에서만 사용해야 함)를 만들려면 OpenSSL 도구를 사용할 수 있습니다.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

그런 다음 다음과 같이 인증서와 키의 번들을 만듭니다.

cat tecmint.crt tecmint.key >tecmint.pem

참고: 프로덕션 용도의 경우 상용 인증 기관(CA)에서 인증서를 구입하거나 Let's Encrypt에서 완벽하게 인식되는 자동화된 무료 인증서를 받으세요. 그런 다음 PEM 번들을 생성합니다.

상업용 CA에서 인증서를 구입한 경우 표시된 대로 개인 키, 인증서 및 CA 번들을 병합해야 합니다.

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Let's Encrypt의 경우 인증서, 개인 키 및 전체 체인이 /etc/letsencrypt/live/example.com/에 저장되므로 다음과 같이 번들을 생성합니다. .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

4단계: 히치 구성 및 시작

5. 다음으로 VarnishHitch의 백엔드로 구성하고 사용할 SSL/TLS 인증서 파일을 지정합니다. HTTPSHitch 기본 구성 파일에서 편집을 위해 엽니다.

vi /etc/hitch/hitch.conf

frontend 섹션은 Hitch가 수신할 IP 주소와 포트를 정의합니다. 기본 구성은 서버에 연결된 모든 IPv4IPv6 인터페이스를 수신하고 포트 443에서 실행되며 수신 HTTPS<를 처리하는 것입니다. 요청을 Varnish에 전달합니다.

기본 백엔드 프록시 포트를 6086에서 8443(요청을 Varnish로 전달하는 데 사용되는 포트)으로 변경합니다. backend 매개변수를 사용하는 Hitch 구성 파일. 또한 표시된 대로 pem-file 매개변수를 사용하여 인증서 파일을 지정합니다.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

파일을 저장하고 닫습니다.

6. 이제 히치 서비스를 시작하고 시스템 부팅 시 자동으로 시작되도록 활성화합니다. --now 스위치를 활성화와 함께 사용하면 systemd 서비스도 시작한 다음 상태를 확인하여 다음과 같이 실행 중인지 확인합니다.

systemctl enable --now hitch
systemctl status hitch

7. 웹사이트/애플리케이션이 현재 HTTPS에서 실행되고 있는지 테스트하기 전에 HTTPS 서비스 포트 443을 허용해야 합니다. 서버의 해당 포트로 향하는 요청이 방화벽을 통과하도록 허용합니다.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

5단계: Varnish Cache-Hitch 설정으로 SSL/TLS 종료 테스트

8. 이제 Varnish Cache-Hitch 설정을 테스트할 시간입니다. 웹 브라우저를 열고 도메인이나 서버의 IP를 사용하여 HTTPS를 탐색하세요.

https://www.example.com
OR
https://SERVER_IP/

웹 애플리케이션의 색인 페이지가 로드되면 HTTP 헤더를 확인하여 콘텐츠가 Varnish Cache를 통해 제공되고 있는지 확인하세요.

그렇게 하려면 로드된 웹페이지를 마우스 오른쪽 버튼으로 클릭하고 옵션 목록에서 검사를 선택하여 개발자 도구를 엽니다. 그런 다음 네트워크 탭을 클릭하고 페이지를 새로고침한 다음, 다음 스크린샷에 강조표시된 것처럼 HTTP 헤더 보기 요청을 선택하세요.

6단계: Varnish 캐시에서 HTTP를 HTTPS로 리디렉션

9. HTTPS에서만 웹사이트를 실행하려면 모든 HTTP 트래픽을 HTTPS로 리디렉션해야 합니다. Hitch 구성 파일에 다음 구성을 추가하면 됩니다.

vi /etc/hitch/hitch.conf 

먼저 vlc 4.0; 바로 아래에 import std; 줄을 추가한 다음 즉시 실행되는 첫 번째 VCL 서브루틴인 vlc_recv 서브루틴을 찾습니다. Varnish Cache가 클라이언트 요청을 기본 데이터 구조로 구문 분석한 후입니다. 여기에서 요청 헤더를 수정하고 신디사이저를 실행하여 클라이언트 요청을 리디렉션할 수 있습니다.

이렇게 보이도록 수정하세요.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

PROXY 프로토콜을 사용하면 Varnishserver.ip<에서 Hitch의 수신 포트 443을 볼 수 있습니다. 변수입니다. 따라서 std.port(server.ip) 줄은 클라이언트 연결이 수신된 포트 번호를 반환합니다.

포트가 HTTPS에 대한 443이 아닌 경우((std.port(server.ip) != 443)로 확인), 서브루틴은 요청 HTTP 위치 헤더(set req.http.location)를 보안 요청(“https://” + req.http.host<)으로 설정합니다. + req.url) 단순히 웹 브라우저에 웹 페이지의 HTTPS 버전을 로드하도록 요청합니다(예: URL 리디렉션).

Location 헤더는 HTTP 상태 코드와 함께 vcl_synth 서브루틴(return(synth(301))을 사용하여 호출됨)으로 전송됩니다. 301(영구 이동).

10. 다음으로, 위의 신디사이저를 처리하기 위해 다음 vcl_synth 서브루틴(많은 사용 사례 중 하나가 사용자 리디렉션)을 추가합니다.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

응답 상태가 301인지 확인하고, 응답의 HTTP 위치 헤더가 실제로 HTTPS로 리디렉션되는 요청의 HTTP 위치 헤더로 설정되고 전달 작업을 실행합니다.

전달 작업은 백엔드의 응답으로 응답을 작성하고 캐시에 응답을 저장한 후 클라이언트에 보냅니다.

파일을 저장하고 닫습니다.

11. 서비스를 다시 시작하여 Varnish 구성에 새로운 변경 사항을 다시 적용합니다. 그런 다음 컬 명령줄 도구를 사용하여 HTTP에서 HTTPS로의 리디렉션을 확인하세요.

systemctl restart varnish
curl -I http://eaxmple.com/

브라우저의 응답도 다음 스크린샷과 동일합니다.

지금까지의 모든 일이 잘 진행되기를 바랍니다. 그렇지 않은 경우 아래 피드백 양식을 통해 의견이나 질문을 남겨주세요. 고급 구성 옵션을 보려면 Varnish Cache 문서 및 Hitch 문서로 이동하세요.