워드프레스 도메인 변경하는 법 (AWS Lightsail + Nginx환경) 단계별 완벽 가이드

By: master

워드프레스 도메인 변경 방법을 순서대로 정리합니다. 방법이 어려운 것은 아니지만 빼 먹는 사항이 있을 수 있으니 체크리스트로 써도 좋도록 가이드를 작성합니다.

도메인을 old-domain.com에서 new-domain.com으로 변경하는 것을 기준으로 설명하겠습니다.

이 글에서는 Lightsail + Nginx + 워드프레스 환경을 기준으로, 초보자도 따라할 수 있도록 파일 경로, 명령어, 순서를 하나하나 설명드립니다.


준비 사항

  • AWS Lightsail 인스턴스에 SSH로 접속 가능해야 합니다.
  • 새 도메인을 구매한 상태여야 합니다.
  • 도메인 변경에 따른 사이트 다운을 방지하려면 작업 전 백업을 권장합니다.
    스냅샷을 만들어 새 인스턴스에서 작업을 하는 것도 좋습니다

추가 팁: aws에서 쓰는 경우 고정 아이피를 하나 생성한 후 인스턴스에 붙여서 운영을 하면 나중에 새 인스턴스로 바꿀 때도 고정 아이피만 새 인스턴스에 넣으면 되니까 관리가 편합니다.


1. 도메인 등록 사이트에서 DNS 설정

먼저 새 도메인이 Lightsail 서버를 가리키도록 DNS 설정을 해야 합니다.

방법:

  1. 도메인 구매 사이트(예: 가비아, 카페24, 고대디 등) 로그인
  2. DNS 관리 페이지에서 아래처럼 A 레코드 추가:
유형호스트
A@IP
AwwwIP
도메인 구매 사이트에서 DNS 설정

Lightsail 퍼블릭 IP는 인스턴스 클릭 → 네트워킹 탭에서 확인 가능합니다.


2. SSL 인증서 재발급 (Let’s Encrypt + Bitnami용 스크립트 사용)

Bitnami에서 제공하는 SSL 스크립트를 사용하면 간편하게 새 도메인으로 SSL 인증서를 설치할 수 있습니다.

명령어:

sudo /opt/bitnami/bncert-tool

#또는

sudo certbot --nginx -d new-domain.com -d www.new-domain.com -d old-domain.com -d www.old-domain.com

위의 명령어:

  • 사용할 도메인 입력: new-domain.com
  • HTTP → HTTPS 리디렉션 설정 여부 확인
  • www 없는 도메인도 리디렉션할지 여부 선택
  • 이 도구는 Nginx 설정도 자동으로 수정해줍니다.

아래 명령어:

  • old-domain.com으로 다시 바꿀 가능성도 있어서 new-domain.com도 함께 인증서를 받음

3. wp-config.php 파일 수정 (워드프레스 기본 주소 변경)

워드프레스 경로는 일반적으로 /var/www/html 안에 있습니다.

수정 방법:

sudo vi /var/www/html/wp-config.php

아래 줄을 추가하거나 기존 값 수정:

define('WP_HOME','https://new-domain.com');
define('WP_SITEURL','https://new-domain.com');

로 변경 후 저장


4. Nginx 설정 파일에서 도메인 수정

Nginx 환경에서는 설정 파일이 /etc/nginx/sites-available/default 에 있습니다.

수정 방법:

sudo vi /etc/nginx/sites-available/default

아래 부분을 찾아서 도메인 이름을 새 도메인으로 바꿉니다:

server {
    listen 80;
    server_name www.newdomain.com newdomain.com;

    ...
}

그리고 SSL 관련 설정도 server_name 항목이 있다면 마찬가지로 수정하세요.

변경 후 설정 적용:

sudo nginx -t && sudo systemctl reload nginx

5. 데이터베이스에서 도메인 주소 일괄 변경

워드프레스는 DB 안에 도메인 정보를 직접 저장하기 때문에, 아래처럼 일괄 변경해줘야 합니다.

방법 1: WP-CLI 사용

WP-CLI가 설치되어 있는 경우

sudo -u www-data wp search-replace 'https://old-domain.com' 'https://new-domain.com' --path=/var/www/html --all-tables

방법2: mysql에서 직접 수정

sudo mysql

mysql 들어가기

SHOW DATABASES;

db이름 확인

wordpress_db라는 이름의 db를 쓰고 있으면

USE wordpress_db;
SELECT option_name, option_value FROM wp_options WHERE option_name IN ('siteurl', 'home');

db 데이터 체크

이렇게 예전 도메인이나 아이피가 적힌 경우에 저 내용을 수정해야 합니다.

UPDATE wp_options 
SET option_value = 'https://new-domain.com' 
WHERE option_name IN ('siteurl', 'home');

수정 후 바뀌었는지 다시 확인

SELECT option_name, option_value 
FROM wp_options 
WHERE option_name IN ('siteurl', 'home');

잘 바뀐걸 확인했으면 exit로 종료

방법 2: 플러그인 사용 (Better Search Replace)

  1. 워드프레스 관리자 → 플러그인 > 새로 추가
  2. Better Search Replace 검색 → 설치 → 활성화
  3. 도구 > Better Search Replace에서 다음과 같이 입력:
  • 검색할 문자열: https://old-domain.com
  • 바꿀 문자열: https://new-domain.com
  • 테이블: 전체 선택
  • 시뮬레이션 해제하고 실행

실행 전 백업 필수!


6. 최종 점검

  • https://new-domain.com으로 접속 확인
  • 관리자 페이지 로그인 테스트
  • 이미지, 링크, 메뉴 정상 여부 확인
  • Google Search Console, Analytics 등 새 도메인으로 다시 등록
  • robots.txt 도 sitemaps 바뀐 주소로 변경

전체 작업 순서 요약

단계작업 내용
1도메인 사이트에서 A 레코드 → 인스턴스에 연결된 IP로 설정
2SSL 인증서 재발급
3wp-config.php에서 WP_HOME, WP_SITEURL 수정
4nginx 설정파일에서 server_name 도메인 수정
5DB에서 기존 도메인 주소 → 새 도메인으로 변경
6최종 점검 및 Google 서비스 재등록

도메인 변경 처음 할때 쉽지만은 않습니다. 또 빠뜨릴 수 있는 부분도 존재하기 때문에 이 체크 리스트를 보며 차근차근 하는 것이 중요합니다.

추가내용

SSL 인증서 재발급시 실패하는 경우

경로가 잘못되었다고 재발급이 실패하는 경우가 있음 default파일에 써진 인증서 경로 때문에 설치가 안될 수 있음

/etc/nginx/sites-available/default

그럴 때는 임시로 default파일을 수정해 주는 것이 좋음 기존 파일 내용은 다른 곳에 저장해두고

#####################################
# 1. HTTP 요청: 모두 https://new-domain.com 으로 리디렉션
#####################################
server {
    listen 80;
    listen [::]:80;
    server_name new-domain.com www.new-domain.com old-domain.com www.old-domain.com;

    location ^~ /.well-known/acme-challenge/ {
        allow all;
        root /var/www/html;
    }

    return 301 https://new-domain.com$request_uri;
}

#####################################
# 2. IP 직접 접속 또는 예외 처리: 404
#####################################
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 404;
}

이렇게 임시로 수정해 놓은 다음에 다시 인증서를 설치해 봅니다.

인증서 설치가 잘 되었다면

# Redirect all traffic from old-domain.com (with or without www) to new-domain.com (HTTPS)
server {
    listen 80;
    server_name old-domain.com www.old-domain.com;
    return 301 https://new-domain.com$request_uri;
}

# Redirect HTTP and www.new-domain.com to HTTPS non-www
server {
    listen 80;
    server_name new-domain.com www.new-domain.com;
    return 301 https://new-domain.com$request_uri;
}

# Main HTTPS server block for new-domain.com
server {
    listen 443 ssl http2;
    server_name new-domain.com;

    root /var/www/html;
    index index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/new-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/new-domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # --- 보안 헤더 ---
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "no-referrer-when-downgrade" always;
    add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Optional: Basic Content-Security-Policy (CSP)
    # Note: 이 설정은 필요에 따라 조정하세요. 너무 엄격하면 플러그인 작동을 막을 수 있음.
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:;" always;

    # --- 로그 ---
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # --- 워드프레스 처리 ---
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # PHP 버전에 따라 수정
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

이런식으로 default파일을 작성해주면 좋습니다.

혹시 인증서 삭제하고 싶은 경우는 아래의 방법으로

#인증서 목록 확인
sudo certbot certificates

#인증서 삭제
sudo certbot delete --cert-name <인증서 >
#예시
sudo certbot delete --cert-name old-domain.com
# 인증서 위치 /etc/letsencrypt/live/old-domain.com/
sudo systemctl restart nginx

관련된 내용

워드프레스 플러그인 상세 보기 안되는 문제 해결

워드프레스 SSH 접속 안되는 문제 해결 – 방화벽 잘못 건드렸을 때 lightsail인 경우

Leave a Comment