웹사이트 검색

Rocky Linux 8에서 Nginx 웹 서버로 Varnish SSL 종료를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. Nginx 웹서버 설치
  3. Certbot으로 SSL 생성
  4. 기본 Nginx 포트 설정
  5. Nginx 웹 서버로 SSL 종료 설정
  6. Varnish를 사용한 자동 HTTP에서 HTTPS로\n
  7. Varnish SSL 종료 확인\n
  8. 결론

광택 캐시 소프트웨어는 기본적으로 SSL/TLS를 지원하지 않습니다. Varnish에서 SSL/TLS 지원을 활성화하려면 추가 소프트웨어가 필요합니다.

SSL 종료는 Varnish에서 SSL/TLS를 활성화하는 방법입니다. Hitch, Nginx 또는 Apache를 사용하여 Varnish HTTP 가속기에 대한 SSL 종료를 활성화할 수 있습니다.

SSL 종료 소프트웨어는 HTTPS 포트 443에서 실행되며 클라이언트의 모든 HTTPS 요청을 처리합니다. 그 후 모든 요청은 광택 캐시 소프트웨어로 전달된 다음 원본 백엔드 서버로 전달됩니다.

전제 조건

이 기사에서는 Nginx 웹 서버로 Varnish SSL Termination을 설정하는 방법을 배웁니다.

시작하기 전에 다음 요구 사항을 충족하는지 확인하십시오.

  • Varnish가 설치된 Linux 서버.
  • 루트 권한\n
  • 도메인 이름

이 예에서는 Rocky Linux 서버에 Varnish가 설치된 상태로 사용했습니다. 그리고 도메인 이름 example.io를 사용하겠습니다.

이제 시작하겠습니다.

Nginx 웹서버 설치

Nginx를 Varnish 백엔드로 사용하는 경우 이 첫 번째 단계를 건너뜁니다.

이 첫 번째 단계에서는 Linux 시스템에 Nginx를 설치합니다.

1. Debian/Ubuntu 기반 배포의 경우 아래의 apt 명령을 실행하여 Nginx 웹 서버를 설치합니다.

sudo apt install nginx -y

2. CentOS/RockyLinux/AlmaLinux 운영 체제의 경우 아래 DNF 명령을 실행하여 Nginx 웹 서버를 설치합니다.

sudo dnf install nginx -y

3. Nginx 설치가 완료되면 다음 명령을 사용하여 Nginx 웹 서버를 시작하고 활성화합니다.

sudo systemctl enable --now nginx

오류가 발생하면 그대로 두십시오. 다음 단계에서 Nginx를 구성하게 됩니다.

Certbot으로 SSL 생성

이 단계에서는 도메인 example.io에 대해 Letsencrypt에서 cerbot 도구를 설치하고 SSL 인증서를 생성합니다.

1. 먼저 시스템 방화벽에 HTTP 및 HTTPS 포트를 추가합니다.

Debian/Ubuntu 시스템의 경우 아래 ufw 명령을 실행하여 HTTP 및 HTTPS 포트를 엽니다.

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

CentOS/RockyLinux/AlmaLinux 시스템의 경우 아래의 firewall-cmd 명령을 실행합니다.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. 다음으로 다음 명령을 사용하여 certbot 도구를 설치합니다.

아래의 apt 명령을 사용하여 Debian/Ubuntu 시스템에 certbot 도구를 설치합니다.

sudo apt install certbot -y

아래 DNF 명령을 사용하여 CentOS/RockyLinux/AlmaLinux 시스템에 certbot 도구를 설치합니다.

sudo dnf install certbot -y

3. SSL Letsencrypt를 생성하기 전에 기본 HTTP 포트에서 실행 중인 Varnish 서비스를 중지합니다.

sudo systemctl stop varnish
sudo systemctl stop nginx

4. 이제 아래의 certbot 명령을 실행하여 SSL Letsencrypt를 생성합니다. 그리고 도메인 이름과 이메일 주소를 변경했는지 확인하십시오.

sudo certbot certonly --agree-tos --email  --standalone --preferred-challenges http -d example.io

certbot 프로세스가 완료되면 /etc/letsencrypt/live/DOMAIN.COM/ 디렉토리에서 인증서를 사용할 수 있습니다.

인증서 fullchain.pem은 SSL 공개 키이고 privkey.pem은 SSL 개인 키입니다.

기본 Nginx 포트 설정

Nginx 웹 서버를 Varnish HTTP 가속기의 백엔드로 사용하는 경우 이 단계를 건너뜁니다.

다른 백엔드 웹 서버를 사용하는 경우 Nginx의 기본 포트를 구성해야 합니다.

1. nano 편집기를 사용하여 기본 nginx 구성을 편집합니다.

sudo nano /etc/nginx/nginx.conf

기본 server { ... } 섹션에서 아래와 같이 listen 옵션을 8081 포트로 변경합니다.

....

    server {
        listen       8081 default_server;
        listen       [::]:8081 default_server;

        ...trim...
    }

....

구성을 저장하고 종료합니다.

2. 이제 Nginx 서비스를 다시 시작하여 새 구성을 적용합니다.

sudo systemctl restart nginx

이제 기본 Nginx 서비스가 8081 포트에서 실행됩니다.

Nginx 웹 서버로 SSL 종료 설정

Nginx로 SSL 종료를 설정하려면 HTTPS 포트 443에서 실행될 새 가상 호스트/서버 블록 구성을 생성해야 합니다.

이 가상 호스트는 클라이언트의 모든 HTTPS 요청을 처리하고 모든 요청을 Varnish HTTP 가속기로 전달합니다.

1. 다음 명령을 사용하여 새 Nginx 서버 블록 구성을 생성합니다.

Debian/Ubuntu 기반 시스템을 사용하는 경우 새 구성 /etc/nginx/sites-available/example.io를 만듭니다.

sudo nano /etc/nginx/sites-available/example.io

CentOS/RockyLinux/AlmaLinux 시스템의 경우 새 구성 /etc/nginx/conf.d/example.conf를 만듭니다.

sudo nano /etc/nginx/conf.d/example.conf

다음 구성을 복사하여 붙여넣습니다. 그리고 SSL 인증서의 도메인 이름과 경로를 변경해야 합니다.

server {

    listen 443 ssl http2;
    server_name example.io;
    ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/example.io_access.log;
    error_log             /var/log/nginx/example.io_error.log;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

  }

구성을 저장하고 종료합니다.

2. 다음으로 Debian/Ubuntu 시스템의 경우 다음 명령을 사용하여 서버 블록 구성을 활성화합니다.

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. 이제 다음 명령을 실행하여 Nginx 구성을 확인한 다음 Nginx 서비스를 다시 시작하여 새 구성을 적용합니다.

sudo nginx -t
sudo systemctl restart nginx

4. 이제 다음 명령을 사용하여 Nginx 서비스 및 HTTPS 포트 443을 확인합니다.

아래의 systemctl 명령을 사용하여 Nginx 서비스 상태를 확인합니다.

sudo systemctl status nginx

Nginx 서비스가 활성화되어 실행 중인지 확인하십시오.

아래의 ss 명령을 사용하여 시스템에서 HTTPS 포트 443을 확인하십시오.

ss -antpl | grep 443

LISTEN 상태에서 HTTPS 포트 443을 확인하십시오.

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

이제 Nginx 웹 서버로 SSL 종료의 기본 구성을 완료했습니다.

Varnish를 사용한 자동 HTTP에서 HTTPS로

이 단계에서는 HTTP를 HTTPS 프로토콜로 자동 리디렉션하도록 Varnish를 설정합니다. 이는 구성 default.vcl에서 새 광택 규칙을 생성하여 달성할 수 있습니다.

1. nano 편집기를 사용하여 바니시 구성 /etc/varnish/default.vcl을 편집합니다.

nano /etc/varnish/default.vcl

sub vcl_recv { ... } 옵션 안에 다음 구성을 복사하여 붙여넣습니다. 그리고 귀하의 도메인으로 도메인 이름을 변경했는지 확인하십시오.

sub vcl_recv {

    ...trim...

    if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
       set req.http.x-redir = "https://example.io" + req.url;
       return(synth(850, ""));
    }

    ...trim...
{

그런 다음 줄 맨 아래에 다음 구성을 추가합니다. 이렇게 하면 HTTP 301에 대한 리디렉션 방법이 결정됩니다.

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

바니시 구성을 저장하고 종료합니다.

2. 그런 다음 Varnish 서비스를 다시 시작하여 다음 명령을 사용하여 새 구성을 적용합니다.

sudo systemctl restart varnish

그리고 Varnish 규칙을 사용하여 자동 HTTP 및 HTTPS 리디렉션을 완료했습니다.

Varnish SSL 종료 확인

Varnish SSL 종료를 테스트하려면 웹 브라우저를 사용하거나 curl 명령을 사용할 수 있습니다.

1. 웹 브라우저를 열고 주소 표시줄에 도메인 이름을 입력합니다. 이 예에서는 Firefox 웹 브라우저를 사용했습니다.

http://example.io

자동으로 HTTPS 프로토콜로 리디렉션됩니다.

웹 페이지를 마우스 오른쪽 버튼으로 클릭하고 검사 메뉴를 클릭합니다.

네트워크 탭으로 이동하고 다시 로드 버튼을 클릭합니다.

루트 URL 요청을 클릭하면 아래와 유사한 출력이 표시됩니다.

http://example.io에 대한 요청은 자동으로 상태 코드가 301인 HTTPS 프로토콜 https://example.io로 리디렉션됩니다.

Varnish 서버는 모든 클라이언트 요청을 처리합니다.

2. curl로 varnish SSL 종료를 확인하려면 다음 명령을 사용하십시오.

curl -I http://example.io

아래와 같이 자세한 HTTP 헤더가 표시됩니다.

요청은 HTTP 상태 코드 301과 함께 HTTPS 프로토콜 https://example.io로 리디렉션됩니다. 광택 서버는 클라이언트의 모든 요청을 처리합니다.

결론

축하합니다! Nginx 웹 서버로 Varnish SSL 종료 구성을 배웠습니다.

또한 무료 SSL Letsencrypt를 생성하기 위한 기본 certbot 명령과 HTTP에서 HTTPS로 자동 리디렉션하기 위한 기본 광택 규칙을 배웠습니다.