모든 배포 가이드 배포

HTTP를 HTTPS로 리다이렉트하는 방법

SSL 인증서를 설치한 후에는 모든 HTTP 트래픽을 HTTPS로 리다이렉트해야 합니다. 리다이렉트가 없으면 http://yourdomain.com에 접속하는 방문자는 HTTPS를 사용할 수 있더라도 암호화된 연결을 사용하지 않게 됩니다.

검색 엔진이 모든 순위 신호를 HTTPS URL로 전달하도록 301 (영구) 리다이렉트를 사용하세요.

Nginx

포트 80에 대한 별도의 server 블록을 추가하여 모든 요청을 리다이렉트합니다:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

이 설정은 전체 URL 경로를 유지합니다: http://example.com/page?q=1https://example.com/page?q=1.

편집 후 테스트하고 리로드합니다:

sudo nginx -t && sudo systemctl reload nginx

Apache

옵션 1: VirtualHost 리다이렉트 (권장)

Apache 설정에 추가합니다:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

옵션 2: .htaccess (공유 호스팅)

VirtualHost 설정에 접근할 수 없는 경우(공유 호스팅), 사이트의 .htaccess에 추가합니다:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

mod_rewrite가 활성화되어 있어야 합니다.

변경 후:

sudo apachectl configtest && sudo systemctl reload apache2

리다이렉트 확인

# 301과 Location: https://...을 반환해야 함
curl -I http://yourdomain.com

예상 출력:

HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/

HSTS: 이중 잠금

리다이렉트가 정상 작동하는 것을 확인한 후, HSTS(HTTP Strict Transport Security)를 추가합니다. 이는 사용자가 http://를 입력해도 브라우저가 항상 HTTPS를 사용하도록 지시합니다:

Nginx:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

Apache:

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

처음에는 짧은 max-age(예: 300초)로 테스트한 후, 모든 것이 정상 작동하면 2년(63072000)으로 늘리세요.

경고:max-age로 HSTS가 활성화되면, HTTPS를 제거해도 브라우저가 HTTP를 통한 연결을 거부합니다. 긴 기간을 설정하기 전에 HTTPS 설정이 안정적인지 확인하세요.

일반적인 리다이렉트 패턴

www를 non-www + HTTPS로 리다이렉트

# Nginx: www → non-www, HTTP + HTTPS → HTTPS
server {
    listen 80;
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate     /etc/ssl/fullchain.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;
    return 301 https://example.com$request_uri;
}

non-www를 www + HTTPS로 리다이렉트

server {
    listen 80;
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /etc/ssl/fullchain.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;
    return 301 https://www.example.com$request_uri;
}

전체 이전 도메인 리다이렉트

server {
    listen 80;
    listen 443 ssl;
    server_name olddomain.com www.olddomain.com;
    ssl_certificate     /etc/ssl/old-fullchain.pem;
    ssl_certificate_key /etc/ssl/old-privkey.pem;
    return 301 https://newdomain.com$request_uri;
}

이전 도메인에도 유효한 SSL 인증서가 필요합니다 — 브라우저가 리다이렉트를 받기 전에 HTTPS를 설정해야 하기 때문입니다. 두 도메인을 모두 포함하는 SAN 인증서를 사용하거나, 이전 도메인에 별도의 인증서를 사용하세요.

문제 해결

리다이렉트 루프 (ERR_TOO_MANY_REDIRECTS)

HTTPS 서버 블록도 HTTPS로 리다이렉트하고 있는 경우에 주로 발생합니다. 포트 80 블록에만 리다이렉트가 있는지 확인하세요 — 포트 443 블록은 정상적으로 콘텐츠를 제공해야 합니다.

또 다른 원인: 로드 밸런서나 프록시(Cloudflare, AWS ALB)가 SSL을 종료하고 서버에 HTTP를 전달합니다. 서버는 HTTP를 감지하고 리다이렉트합니다. X-Forwarded-Proto 헤더를 확인하여 수정합니다:

# 프록시/로드 밸런서 뒤에 있는 경우
if ($http_x_forwarded_proto = "http") {
    return 301 https://$host$request_uri;
}

검색 엔진에 캐시된 이전 HTTP URL

리다이렉트를 설정한 후 Google에 변경 사항을 알립니다:

  1. <link rel="canonical">https://로 업데이트
  2. 사이트맵 URL을 https://로 업데이트
  3. Google Search Console에서 HTTPS 속성을 추가

Google은 301 리다이렉트를 따라가면서 점진적으로 색인된 URL을 업데이트합니다.

자주 묻는 질문

www를 non-www로(또는 그 반대) 동시에 리다이렉트해야 하나요?

네. 하나의 정규 형식을 선택하고 나머지를 리다이렉트하세요. 이렇게 하면 검색 엔진에서 중복 콘텐츠를 방지할 수 있습니다:

# www를 non-www로 리다이렉트 (Nginx)
server {
    listen 80;
    listen 443 ssl;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

리다이렉트가 SEO에 영향을 미치나요?

301 리다이렉트는 대상 URL에 순위 신호를 전달합니다. Google은 HTTP에서 HTTPS로의 마이그레이션에 301 리다이렉트를 권장합니다. 일시적으로 약간의 변동이 있을 수 있지만, HTTPS 순위 신호 덕분에 장기적으로 SEO가 개선됩니다.

리다이렉트 후 혼합 콘텐츠는 어떻게 하나요?

리다이렉트는 페이지 URL을 처리하지만, HTML에서 리소스(이미지, 스크립트, CSS)를 http:// URL로 참조하면 브라우저가 차단하거나 경고를 표시합니다. 혼합 콘텐츠 해결 가이드를 참고하세요.

리다이렉트가 올바르게 작동하는지 테스트하려면?

# 리다이렉트 체인 확인
curl -ILs http://yourdomain.com | grep -E '^HTTP|^Location'

예상 출력:

HTTP/1.1 301 Moved Permanently
Location: https://yourdomain.com/
HTTP/2 200

첫 번째 응답은 HTTPS Location이 포함된 301이어야 하고, 마지막 응답은 200이어야 합니다.

DNS 수준에서 리다이렉트해야 하나요, 서버 수준에서 해야 하나요?

서버 수준(Nginx/Apache 설정 또는 .htaccess)에서 하세요. DNS 수준 리다이렉트(예: Cloudflare의 Page Rules)는 작동하지만 네트워크 홉이 추가되고 리다이렉트 동작에 대한 제어가 적습니다. 서버 수준 리다이렉트가 더 빠르고 안정적입니다.

관련 기사

배포 2026-05-08
Nginx에 SSL 인증서를 설치하는 방법
Nginx에 SSL 인증서를 설치하는 단계별 가이드. 파일 업로드, 전체 서버 블록 설정, TLS 모범 사례, HTTP/2, HSTS, 리다이렉트 설정, 테스트, 6가지 일반 오류 문제 해결을 다룹니다.
배포 2026-05-08
Apache에 SSL 인증서를 설치하는 방법
mod_ssl을 사용하여 Apache에 SSL 인증서를 설치하는 단계별 가이드. 파일 업로드, VirtualHost 설정, TLS 모범 사례, HSTS, HTTP 리다이렉트, 5가지 일반 오류 문제 해결을 다룹니다.
시작하기 2026-05-08
무료 SSL 인증서 받는 방법 (단계별 가이드)
5분 만에 Let's Encrypt에서 무료 SSL 인증서를 발급받으세요 - 소프트웨어 설치 불필요, 계정 생성 불필요. 4가지 방법, 두 가지 챌린지 유형, 6개 플랫폼 설치, 문제 해결을 포함하는 완전 가이드입니다.
브라우저에서 무료 SSL 인증서 받기
설치 불필요, 계정 불필요. 개인키는 항상 기기에 남습니다.
인증서 발급