nginx 웹서버 라우팅 설정하기 – 도메인 IP 연결, www 리다이렉팅

26

전 단계에 이어서 이번 글에서는 nginx(엔진엑스)를 사용하는 서버에 도메인을 구매해 연결하고 nginx 설정파일을 세팅해봅시다. 그런김에 www 서브도메인 리다이렉팅도 할겁니다. 이번 글을 잘 이해한다면 하나의 서버에 여러개의 도메인과 서브도메인을 연결해서 폴더별로 나눠려고 하는 일도 할 수 있을 겁니다.

 

이 글은  LEMP 스택에 WordPress 설치하기 시리즈 연재작의 일환으로 작성되었지만 nginx 설정은 공통사항이므로 서버구성은 딱히 상관없습니다.  아래내용 중 nginx 라우팅설정은 워드프레스를 쓰지 않는 서버인 경우에도 적용됩니다.

nginx가 아닌 아파치 서버를 사용하는 경우의 리다이렉팅 설정은 아래링크의 bitnami 워드프레스 시작 시리즈 연재글을 참고하시기 바랍니다.

 

 

이번 글에서는 아래와 같은 내용들을 살펴봅니다.

 

 

도메인 구매 및 nginx 서버에 연결

먼저 도메인을 구매해야하는데 도메인 구매하기에 대한내용은 아래 링크를 참고하세요.

DNS에서 도메인에 IP 연결하기는 아래 링크를 참고하여 자신의 도메인을 서버에 연결하세요.

고정IP를 연결하고 싶다면 위 링크에나온 것처럼 Static IP를 생성해서 연결하고 고정IP가 필요없다면 Public IP를 자신의 DNS에서 설정하면 됩니다. 모든 컴퓨터에서 새로운 DNS 설정이 제대로 동작하기위해서는 TTL로 설정한 시간만큼이 소요됩니다.

 

URL, URI 라우팅? 

도메인이 마련되고 DNS에서 자신의 서버IP로 연결시켰다면 이제 웹서버(여기서는 nginx)에서 나눠줘야합니다. 라우팅이라고 하는 건데요. 애초에 DNS(도메인 네임 서비스)와 자신의 서버는 별개라서 여러개의 도메인 및 서브도메인이 같은 서버를 향하게 네임서버에서 설정할 수 있습니다.

 

 심지어 내가 아닌 전혀 다른사람이 그사람이 사용하는 DNS에서 그 자신의 도메인을 제 서버로 향하도록 할 수도 있습니다. 이런경우 응답을 거부할 수는 있어도 애초에 들어오는 요청을 못하게 할 수 있는게 아닙니다.

웹서버는 그렇게 여러 형태로 요청을 받을 수 있고 그에 맞게 응답하게 되어있는데 그렇게 나눠서 응답하는게 라우팅 설정입니다. 라우팅 단계에서 리다이렉팅을 할 수도 있죠

  • swiftcoding.org 및 다른 모든 요청은 /var/www/html/ 폴더로 보내고,
  • www.swiftcoding.org로 들어온 사람은 swiftcoding으로 보내고,
  • http 로 들어온 사람은 https로 보내고
  • kr.swiftcoding.org로 들어온 사람은 /var/www/korean/ 폴더로 보내고
  • 서버기록을 보다 보니 이상한 도메인이 과부하를 일으키네? 알게되면 이 특정도메인, 주소에 대해선 응답을 거부하도록 설정하고
  • 특정파일에 대해서 거부하고…

이런 저런요청들을 나누고 돌려주는게 웹서버의 라우팅입니다.

 

그런데 이런 라우팅, 리다이렉팅을 웹서버 단계에서만 할 수 있는 건 아닙니다.  DB 테이블로 정리해둔 데이터기반으로 돌려줄수도 있고 특정페이지에 php코드로, 자바스크립트 코드로도 할 수 있죠.

예를 들어 웹서버에서는 요청을 전부 /var/www/html 로 보내고 그 폴더에있는 index.php 파일이 코드상으로 모든걸 처리해서 나누고 돌려주고 거부하고 할 수도 있습니다. 극적으로는 10만개의 URI 주소를 각기 다르게 처리한다고 하면 DB에 데이터를 넣어두고 요청과 데이터를 비교해서 그에 맞는 처리를 하게도 가능하겠죠. 웹서버 처리단계에서는 어떤 것까지 다룰것인가? 그건 여러분 마음입니다.

 

이걸 하나의 파일에만 몰아두면 문제를 찾기 쉬울 텐데 서버관리자 사정상 이 파일 저파일 또는 최종 웹페이지에서 나누다보니 설정이 중복되거나 하면 찾아내기 어려워지기도 합니다.

 

nginx 라우팅 설정파일 내용에 대한 이해

엔진엑스의 라우팅 설정파일은 LEMP 스택 구성하기 시리즈 연재작에서 다뤘던 default 라는 이름의 파일을 재수정할 건데요. 저를 따라 LEMP 스택을 구성한 서버라면 /etc/nginx/sites-available/default 위치에 있습니다.

default 파일 위치

 

참고로, 엔진엑스의 라우팅설정 파일이 항상 default  하나인 건 아닙니다. 누군가는 사이트별로 파일을 나누고 다른 이름으로 지을 수 도 있습니다. site-available 폴더내에 라우팅 설정파일을 여러개 마련해둘 수 있죠.

그런다음 해당 라우팅설정을 활성화하려면 그 아래에있는 /etc/nginx/sites-enabled 안에도 해당파일들의 심볼링 링크파일을 만들어야한다는 겁니다. 현재 sites-enabled 폴더내용물을 살펴보면 sites-available 폴더에있는 default 파일로 향하는 심볼릭링크파일(바로가기)이 있는 걸 알 수 있습니다.

 

sites-enabled에 파일이 없으면 라우팅 설정이 활성화 되지 않습니다. 다시말해서 nginx는 site-enabled 에있는 라우팅 설정파일을 읽어들여 동작할 뿐이니 여러분은 sites-available에 설정 파일들을 미리 작성만 해놨다가 sites-enabled에 바로가기 파일을 만들어서 활성화 시키는 것이죠.

참고: etc/nginx/snippets 폴더에는 다른 공통된 설정문을 담은 파일들을 담고 그 내용들을 라우팅설정파일에 include 하여 쓰게 됩니다.

 

현재로선 nginx를 처음 설치하면 나오는대로 default 파일만 있고 default 파일만 활성화 된상태입니다. 우린 사이트구조가 그리 복잡하지 않으므로 기존에있던 default 파일을 수정해서 사용하면 됩니다. 앞서 LEMP 스택을 구성하면서 저를 따라 수정했다면 default 파일 내용이 아래와 같을 겁니다.

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    root /var/www/html; 
    index  index.php index.html index.htm index.nginx-debian.html; 
    server_name _;

    location / {
      try_files $uri $uri/ =404; 
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php7.2-fpm.sock;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params; 
       fastcgi_read_timeout 300;
    }

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

 

이 파일내용은 일종의 프로그래밍 코드와 비슷해서 개인마다 여러가지 형태로 작성해 사용할 수 있습니다. 같은 동작을 하는 라우팅설정을 누군가는 장황하게(그렇지만 한번에 보고 이해하기 쉽게) 긴 내용을 작성할 테고, 누군가는 최대한 간결하게(하지만 사전지식없이 이해하기 어려게) 짧게 작성할테죠.

보통 설정문의 줄 끝은 중괄호 {, } 나 세미콜론;으로 끝나게 됩니다. #(샵, 해쉬) 뒤로는 주석문입니다. 

 

server 블록과 location 블록

nginx 라우팅 설정에서 서버 블록과 로케이션 블록을 구분할 줄 알면 이해하기 쉬워집니다. 위에서는 라우팅  설정이 딱 하나인데요. 처음 server { 로 시작해서 마지막 중괄호 } 로 끝나는 구문까지입니다. 이런 server{...} 구문을 여러개 만들 수 있습니다. 그리고 그 안에서 또다른 중괄호설정이 있는데요. location block( location ...{...}) 들은 좀더 상세한 리다이렉팅 설정들일 뿐입니다. 

예를 들어 아래의 문구는 요청된 상세 주소 위치에 웹페이지를 만드는 php,html등의 파일이 있는지 확인해보고 없다면 404 not found (페이지 없음) 에러를 응답한다는 설정이죠.

 location / {
    try_files $uri $uri/ =404; 
    # 워드프레스 고유주소(permalink)를 기본(plain)에서 글이름(post name)등 다른걸로 바꾸었을 때 기존 글들이 404페이지가 되는 것 우회
     if (!-e $request_filename) { 
         rewrite ^.*$ /index.php last; 
     }
 }

이런 location block 을 이용해서 응답을 거부하거나, www 서브도메인을 리다이렉팅할 수도 있겠습니다.

 

 

도큐먼트 루트(root) 폴더 및 server_name 지정

원래있던 server_name _;server_name 도메인이름 처럼 바꿔주게 되는데 방문자가 어떤 주소로 들어오냐에따라 해당 도메인 이름을 가진 server{...} 블록이 처리합니다. 요청된 도메인을 처리하는 server_name을 가진 블록이 없다면 잠시후 아래에서 설명할 디폴트 서버(default_server)로 지정된 블록이 처리합니다.

 

server블록 내의 내용에서 root /var/www/html; 라고 쓰여진 부분이 해당 도메인을 어디로 보낼까하는 설정입니다. 제경우 /var/www/html 위치에 첫번째 워드프레스 사이트의 index.php 파일이 있으므로 첫 번째 워드프레스 사이트가 보여지게 되죠.

 

여러분들이 여러 워드프레스, 도메인에 대해 라우팅 설정한다면 server 블록마다 root 구문에 폴더를 그에 맞게 지정해주면 됩니다. 두 개의 사이트를 설정할 때 저처럼  첫번째 사이트 파일은 /var/www/html에 두번째 사이트파일은 /var/www/두번째루트 폴더에 나누는 사람이 있겠고,  누군가는 /var/www/html 하위에 또 두개의 새로운 폴더를 넣어두고 각각의 사이트파일을 나누는 사람도 있을 겁니다.

그렇다면 두개의 server 블록을 아래와 같은 식으로 작성할테죠.

server { 
...
...
    root /var/www/html/첫번째사이트_루트폴더; 
    server_name 첫번째_사이트_도메인;
...
...
}



server {
...
... 
    root /var/www/html/두번째사이트_루트폴더; 
    server_name 두번째_사이트_도메인;
 ...
 ... 
}

 

server블록 포트설정과 디폴트 서버(default_server)

listen 80 default_server;
listen [::]:80 default_server; 

인터넷 통신엔 사용되는 서버는 포트번호가 존재하는데 우리가 흔히 사용하는 http 의 경우 80번 포트, https의 경우 443번 포트, ssh는 22번,  mySQL은 3306, 이런식으로 되어있습니다. 그래서 위내용은 이 서버블록이 http:// 통신 프로토콜로 들어오는 요청에대한 처리를 하는 설정입니다.

 

그리고 위 코드처럼 nginx의 server 블락중에는 default_server; 라는설정이 붙는게 하나 있는데요. 여러개의 server 블록을 작성할때 default_server는 프로토콜(http, https, ftp등) 별로 단 하나의 server 블록에만 존재해야합니다. 이 디폴트 설정은 여러분이 별도로 지정하지 않은 도메인으로 들어오는 다른 모든 요청에대해선 해당 server 블록이 처리합니다.

 현재의 default 파일 내용으로선 단하나의 server 블록만 있고 그것이 default_server 이므로 모든 요청이 /var/www/html 폴더를 가리키게 되어 메인도메인으로 접속하든 서브도메인으로 접속하든 모두 다 같은 사이트 내용을 보여주게 됩니다.

 

www 서브도메인 리다이렉팅

서브도메인에 대해서는 제 블로그 이전 글을 참고하시기 바랍니다. 그리고 이전에 아파치를 사용할 때의 리다이렉 방법 글도 단순히 참고할 수 있겠습니다.

 

이 글의 위 내용대로라면 현재의 default 파일 만으로도 메인도메인과 www 서브 도메인 모두를 처리할 수 있고 같은 워드프레스 블로그의 내용을 보여주게 됩니다. 그런데 저는 굳이 www 도메인으로 들어온걸 메인도메인으로 돌려줄까요?

그건 도메인 포워딩 때문입니다. 위 설정은 방문자가 http://www.swiftcoding.org 로 들어온대로 웹브라우저 주소표시줄에도 그대로 나타나게 되는데 같은 내용의 사이트를 보여준다고 해도  http://swiftcoding.org로 접속한 사람이나 http://www.swiftcoding.org 사람이나 웹주소가 최종적으로 http://swiftcoding.org 처럼 메인도메인으로 보이도록 하려면 www 를 메인도메인으로 돌려주는 리다이렉팅 설정을 해야하겠습니다.

 

최종도메인이 서브도메인과 메인도메인 중 어느쪽으로 할건지, 애초에 이런 포워딩 설정을 할건지 말건지는 모두 여러분의 선택입니다. 

 

 

FTP에서 편집을 위한 파일권한 변경

ubuntu 사용자로 접속한 FTP 프로그램을 통해서 /etc/nginx/sites-available/default 이파일을 읽을 수 없거나 편집, 수정, 저장할 수 없다면 리눅스 파일의 권한 문제입니다.

해당 파일의 사용자그룹으르 ubuntu 그룹으로 변경하는 chgrp 명령어와

sudo chgrp ubuntu /etc/nginx/sites-available/default

그룹 멤버들이 수정할 수 있는 권한인 664 또는 775 같은 권한으로 변경해주는 chmod 명령어를 사용해줍니다.

sudo chmod 664 /etc/nginx/sites-available/default

 

chgrp과 chmod 명령어를 사용함

 

그러면 FTP 프로그램을 이용해서도 해당파일을 열어 수정할 수 있을 겁니다.

 

 

NGiNX 설정파일로 www 도메인 리다이렉팅하기

  •  메인도메인인 http://swiftcoding.org로 요청이 들어오면 /var/www/html 폴더로 돌려줘서 그곳에 설치된 워드프레스 블로그 사이트를 볼 수 있습니다.
  • 그리고 서브도메인인 www (http://www.swiftcoding.org)로 요청이 들어오면 메인 도메인으로 리다이렉팅 해주겠습니다.

참고: 이번 연재작을 따라서 HTTPS 까지 계속해서 설정할거라면 거기서도 리다이렉팅을 위해 설정파일을 다시 수정할테니 굳이 리다이렉팅 안해줘도 됩니다만 따라해서 나쁠건 없겠죠.

 

첫번째 서버블록의 내용중에  server_name _; 이던 부분에 자신이 구매한 메인도메인 이름을 지정해줍시다. 저는 http://swiftcoding.org 라서 언더바(_) 대신 아래처럼 swiftcoding.org 라고 작성했습니다.default_server 인 서버블록은 server_name에 도메인주소를 꼭 적어줄 필욘없겠지만 적어줍시다.

    server_name swiftcoding.org;

 

그런다음 맨아래에 새로운 server{...} 블록을 아래처럼 추가합니다. 

################## HTTP www.
server {
    listen 80;
    listen [::]:80;
    server_name www.swiftcoding.org;
    location / {
        return 301 http://swiftcoding.org$request_uri;       ### http://swiftcoding.org 로 리다이렉팅
    }
}

참고: 같은줄에서 #기호 뒷부분은 주석문으로서, 아무런 영향을 미치지 않습니다.

 

그러면 /etc/nginx/sites-available/default 파일의 전체내용은 아래와 같습니다.

중요: 아래내용중 swiftcoding.org는 제  도메인이름이므로 여러분은 여러분의 도메인에 맞춰서 입력하시기 바랍니다. 주석문 제외 3군데 있습니다.

################## HTTP  swiftcoding.org
server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 
    root /var/www/html; 
    index index.php index.html index.htm index.nginx-debian.html; 
    server_name swiftcoding.org;

    location / { 
        try_files $uri $uri/ =404; 
        # 워드프레스 고유주소(permalink)를 기본(plain)에서 글이름(post name)등 다른걸로 바꾸었을 때 기존 글들이 404페이지가 되는 것 우회
       if (!-e $request_filename) { 
         rewrite ^.*$ /index.php last; 
       }
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params; 
        fastcgi_read_timeout 300;
    }

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


################## HTTP www.swiftcoding.org to swiftcoding.org
 server {
    listen 80;
    listen [::]:80; 
    server_name www.swiftcoding.org;

    location / { 
        return 301 http://swiftcoding.org$request_uri;     ### http://swiftcoding.org로 리다이렉팅 
    }
}

 

이제 www.swiftcoding.org로 들어오면 server_name 이 www.swiftcoding.org 인 server 블록이 담당하게 되고 그안에적힌 location 블록이 301응답코드와 함께 리다이렉팅으로 메인도메인인 http://swiftcoding.org + 하위 나머지 URL slug($request_uri) 인곳으로 보내게 됩니다.

그러면 윗쪽 server 블락이 root 폴더인 /var/www/html 로 보낼테고 html 폴더에 있는 index 파일(index, index.php, index.html 등)이 여러분의 웹사이트를 보여주게 될 겁니다.

 

 

위 내용대로 저장했다면 nginx를 재시작해줘야합니다. 

sudo nginx -t 

위 명령어로 설정파일 문법이 이상없는지 확인해봐서 …syntax is ok…test is successful 메시지가 나오는지 먼저 확인한다음 아래 재시작 명령어를 통해 재시작해주세요.

sudo service nginx restart

nginx 재시작 명령어 입력

 

 

 

 

워드프레스 사이트 주소 (홈페이지 URL ) 설정

참고: 이번 글처럼 도메인 연결을 먼저 하지 않고  서버IP만으로 접속해서 이전 글처럼 워드프레스 첫 설치화면을 통해 먼저 설치했다면 아래 작업이 필요할 것입니다.  이번글을 따라 먼저 도메인을 연결했을뿐 아직 첫 관리자 ID를 만들지 않았다면 이전 글을 따라 ID를 만든뒤 아래의 다음 단계로 이어가시면 됩니다.

 

이 설정은 매우 중요한 설정입니다. 나중에 워드프레스를 설치하고 관리자 페이지에 접속해서 설정 -> 일반 에 보면 아래그림처럼 워드프레스 주소와 사이트주소를 설정할 수 있게 되어있습니다. 

 

중요:  아래 값을 잘못 바꾸면 애석하게도 자신의 워드프레스 관리자 페이지로 영영 접속을 못하는 사태에 이르게 되곤 합니다. (왜 이런 위험한 물건을 여기 뒀어?)  아래 그림에 나온대로 자신의 도메인을 작성해주면 되는데요. 위에 nginx 라우팅설정 파일을 수정하면서 www 리다이렉팅을 했을 때의 최종 도메인과 맞춰줘야 겠습니다. 그렇지않으면 무한 리다이렉팅되어 접속할 수 없게 되거나 관리자화면에 재접속이 불가능하게 될 수도 있습니다. 

워드프레스 사이트 URL 세팅화면

 

이전단계에서 언급했듯이 이번 글처럼 도메인연결을 하지 않고 서버IP주소로 접속한채로 첫 워드프레스 설치화면에 접속해 ID를 만드는 것부터 했다면 워드프레스 주소(URL)사이트 주소(URL)에 위그림처럼 도메인대신 IP 주소가 작성되어있을 것입니다. 관리자ID 만들때 DB에 기록된 것이죠.

 

 

다음단계

이제 사용하시는 웹브라우저의 브라우저 캐시데이터 삭제 또는 인터넷 사용기록 삭제를 해가면서 의도한대로 도메인 리다이렉팅이 되는지 확인해보세요.

이렇게 nginx 라우팅 설정파일에 대해서 알아보고 http 도메인 리다이렉팅 방법을 알아봤습니다. 시리즈 연재작 다음에서 nginx에서의 HTTPS 사용하는 방법을 계속 알아보겠습니다. 자신의 사이트에서 HTTPS를 지원할 것인가는 자유지만 점점 필수가 되어가고 있습니다.

 

참고자료: nginx wiki 

26 댓글

  1. 안녕하세요.
    설정 후 24시간이 경과 했는데도 리다이렉팅이 안되고 있습니다.
    default 파일도 문제가 없고, DNS도 설정을 해놓았으며, 쿠키고 삭제했습니다.

    어디서 문제가 발생한 걸까요..?
    여기서 막혀서 HTTPS로 진도를 못나가고 있습니다..:)

  2. 좋은글 감사합니다.
    그런데 다 설치하고 잘 되는데 글을 쓰고 그 글에 들어가면
    404 not found 라는 에러가 뜹니다.
    혹시 어떻게 해결해야할까요?

    • 안녕하세요. 방금 글을 수정했는데요. nginx 라우팅 설정에서 아래부분을 찾아

      location / { 
              try_files $uri $uri/ =404; 
          }
      

      아래처럼 바꾸고 nginx를 재시작해보세요.

      location / { 
              try_files $uri $uri/ =404; 
              # 워드프레스 고유주소(permalink)를 기본(plain)에서 글이름(post name)등 다른걸로 바꾸었을 때 기존 글들이 404페이지가 되는 것 우회
             if (!-e $request_filename) { 
               rewrite ^.*$ /index.php last; 
             }
          }
      
  3. 저만 그런것인지 모르겠지만…
    여기까지하고나서 모든게 잘 됩니다.
    테마를 워프에서 선택해서 활성화하는것도 잘 되는데요.
    문제는 제가 복원을 위해 기존테마를 ftp로 업로드 한뒤 워프에서 활성화를 시키면 그때부터 워프가 먹통이됩니다.
    브라우저에 “페이지가 작동하지 않습니다”라는 메세지가 나오면서 관리자페이지로도 들어갈 수 없게 되는데 혹시 왜이럴까요??

      • 아 ftp로 차일드테마 만들었기 때문에 이러는건 아니겠죠..?
        새로 테마 적용해서 해보겠습니다.

        • 혹시 모르니 FTP로 업로드 후 아래링크를 따라 권한을 다시 설정해보시기 바랍니다.
          https://swiftcoding.org/downloading-wp#permission
          올렸던 테마의 폴더, 파일들의 소유자가 FTP로 올리면 ubuntu가 되니까요. www-data로 만들어주세요.

          그리고 다른 방법으로는 차일드테마를 zip 파일로 압축해서 관리자페이지를 통해 테마를 설치해보는 겁니다.
          https://swiftcoding.org/install-themes#zip
          이렇게 올리는건 워드프레스가 설치하기때문에 차일드테마 하위의 폴더 파일 소유자가 www-data가 됩니다.

          • 아, 네
            안그래도 ftp로 올리니까 ubuntu로 되어서 다시 www-data로 사용자 변경해서 수정했었거든요. zip파일로 테마설치해보겠습니다.
            감사합니다

  4. 감사합니다.
    덕분에 잘 따라하고 있고, 실력도 늘고 있습니다^^

    “중요: 아래 값을 잘못 바꾸면 애석하게도 자신의 워드프레스 관리자 페이지로 영영 접속을 못하는 사태에 이르게 되곤 합니다. (왜 이런 위험한 물건을 여기 뒀어?)”

    관련해서… 저 부분이 잘 못 수정되어 접속이 안 될 경우, phpMyAdmin으로 접속하여 워드프레스 DB의 wp-options 테이블에서 주소를 직접 고쳐주면 해결되지 않을까요?

  5. 도메인을 구매해야만 할 수 있는건가요?
    server_name에 임의적으로 example.com , www.example.com을 입력했는데

    IMPORTANT NOTES:
     - The following errors were reported by the server:
    
    Domain: example.com
       Type:   unauthorized
       Detail: Invalid response from
       `http://example.com/.well-known/acme-challenge/KAVKqJC-746qbrMImGDyIQeNnwfMcqqARU-2LS7fJaM:
       "\n\n\n    Example
       Domain\n\n    \n    <meta
       http-equiv=\"Content-type"
    
    Domain: www.example.com
       Type:   unauthorized
       Detail: Invalid response from
       http://www.example.com/.well-known/acme-challenge/B3s-8GxTm5ktrbZ9Rp34ii_CECgQiVkuuwihQBNR-wA:
       "\n\n\n    Example
       Domain\n\n    \n    <meta
       http-equiv=\"Content-type"
    
    To fix these errors, please make sure that your domain name was
       entered correctly and the DNS A/AAAA record(s) for that domain
       contain(s) the right IP address.
    

    다음과 같은 오류가 출력됩니다…

    • 자기소유의 도메인을 구매하셔야합니다. example.com 은 공공의 목적을 위해 등록된 다른 이의 도메인입니다. 다른 서버로 연결되죠.

  6. 진행하다가 궁금한 게 있어서 글을 남겨봅니다.

    워드프레스 관리자 페이지 ‘설정 > 일반’에서
    워드프레스와 사이트 주소(URL)를 이 연재물의 마지막 글인
    ‘HTTPS 라우팅 설정’까지 해서 HTTPS로 접속이 되더라도
    여기서 설정해줬던 ‘HTTP://my.domain’으로 두는 게 맞겠지요?

    별다른 문제는 없는데, 한 번씩 설정하려고 들어가 보면
    한눈에 거슬려서 ‘이거 고쳐야 하나?’ 하는 생각이 들더군요.
    말씀처럼 왜 위험한 걸 저기 뒀는지, 참. (땀)

    많은 도움 받고 있습니다.
    연재하신 글들 보면서 차근차근 제 공간을 만들어 볼게요.
    고맙습니다. ^^

    • 저부분은 DB에 기록되는 건데요. 그대로 둬도 큰 문제 없겠지만 자신이 다시 수정할 수 있다면 https://로 적어주는 게 더 좋습니다.

      다만 서버를 옮기는 과정에서 도메인연결전이거나, 인증서를 다시 받아야할 때 등 과정 중간에 DB에 적힌 https:// 때문에 접속이 불가할 수 있는데요. 자신이 phpMyAdmin 같은 걸로라도 DB에 접속해 잠시 http://로 바꿀 수 있다면 해결할 수 있습니다.
      https://swiftcoding.org/installing-phpmyadmin

      • 어떤 차이가 있을까요?

        말씀하신 거처럼 중간중간 접속이 되지 않는 일이
        발생할 각이길래 그대로 두는 게 맞겠다 싶었던 건데요….
        더 좋다고 하시니까 또 팔랑팔랑하게 되네요. ^^

        보안상 큰 차이가 있다고 하면 당연히 수정하겠지만,
        가능하다면 phpMyAdmin 설치-사용은 안 하고 싶어서요.
        보안 우려도 그렇지만, 관리하는 게 하나 더 느는 것만 같고….

        일단, 답변 들어보고 결정해야 할 거 같습니다.

        • 도메인 리다이렉팅은 웹서버에서 설정한대로 이루어지지만 그것이 워드프레스에 닿았을 때, 워드프레스는 홈으로 보내게되는데 이때 워드프레스에 정의된 사이트 URL로 리다이렉팅 합니다.
          웹서버에 https 리다이렉팅이 설정되어있는 경우를 예를 들자면 웹서버가 트래픽을 https://로 보내서 워드프레스가 동작하게되었더니 워드프레스는 http://로 리다이렉팅을 하게되면 다시 웹서버가 그걸 받게되고 웹서버는 또다시 https://로 보내게되고, 또다시 워드프레스는 http://로… 이런식으로 무한리다이렉팅이 일어나서 접속을 못하는 경우도 생깁니다.

          워드프레스의 사이트 URL은, wp-config.php에 SITE URL이 정의 되어있다면 그것을 우선으로하고 DB에 적힌값을 무시하며, wp-config.php에 정의되지 않는다면 DB에 적힌 URL을 사용합니다. 그러므로 wp-config.php 만 알맞게 수정한다면 접속을 못하는 일은 없을 겁니다.

          추가로 URL과 관련이 있는 플러그인이나 테마(특히 CSS나 JS 파일주소를 다루는 것들)가 이 사이트 URL을 홈주소를 사용하게 되는데, 보통은 워드프레스 코어에 홈주소를 가져오는 함수를 사용하지만, 많은 경우 wp-config.php에 사이트URL이 적혀있더라도 DB에 기록된 값을 직접 가져와 사용하기도합니다. 그래서 DB에 http://로 적혀있을때 HTML을 까보면 css, js, 이미지파일 태그의 src 속성이 http:// 인경우도 있죠. 그렇다 하더라도 http를 https로 리다이렉팅하는 웹서버 설정이 되어있다면 이런 리소스의 로딩을 큰 문제없이 https://를 통하게 됩니다.
          하지만 가장 좋은건 처음부터 https://로 리소스파일을 요청하는게 웹서버의 부담을 조금이라도 줄여주죠.

          • 사이트 URL을 https로 바꾸고,
            DB 관리 툴 설치를 결정했습니다.
            번거롭게 하는 거 같아서 정말 미안하지만,
            마지막으로 한 가지만 여쭈어볼게요.

            말씀하신 부분이,
            ① wp-config.php 안에서 https 수정하고
            (https://swiftcoding.org/https-cert#wp-config)
            ② wp-admin에서 사이트 URL을 https로 수정해라,
            이 말씀인 거 같습니다.

            그런데, 연재해주신 LEMP 구성을 따라 하면서
            ‘비트나미 WP + 아파치’ 구성이 아니다 보니,
            wp-config.php 안에 아래 폼 자체가 없습니다.

            if ( defined( 'WP_CLI' ) ) {
                $_SERVER['HTTP_HOST'] = 'localhost';
            }
            
            define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
            define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');
            

            위 양식이 없으면 추가해주면 되는 걸까요?

            그리고 말씀하신 대로라면 테마와 플러그인의 구성하기 전에
            WP_admin에서 사이트 URL을 https 설정을 하고,
            그 뒤에 테마와 플러그인을 구성해서 최초 속성이
            https로 잡히도록 하는 게 가장 좋을 거 같습니다.
            그런데, 이미 테마와 플러그인을 구성한 이후에
            ‘wp-config.php + 사이트 URL 수정’을 했을 때,
            이후에 테마나 플러그인이 자동으로 홈 주소를 따라
            다시 수정이 되는 부분일까요?
            설마, 최적화를 위해서 DB 수정 뒤에
            테마와 플러그인을 재설치해야 하는 건 아니겠쬬?

        • define('WP_SITEURL',..
          define('WP_HOME', ....
          

          두 문구는 없으면 추가하면 됩니다. 이 문구를 추가하고나면 아마도 관리자화면에서 입력하는 부분이 막힐 거예요.

          우선은 관리자화면 그부분을 띄우고, wp-config.php에서는 저 문구 없이 저장한 뒤, 관리자화면을 새로고침해서 입력후 다시 wp-config.php에 저 문구를 넣는 식으로 수정이 가능한 경우도 있습니다.

          안되면 phpMyAdmin같은걸로 접속해서 wp_options 테이블을 찾아 사이트 URL과 홈 URL을 바꿀 수 있습니다.

          플러그인을 재 설치할 필요는 없습니다. 캐싱 플러그인을 사용한다면 캐시를 초기화하면 되고요.

          • 감사합니다. ^^

            캐시 플러그인은 ‘W3 Total Cache’ 같은 걸 말씀하시는 거 같네요.
            때에 따라서는 몇 개씩 같이 사용하시는 분들도 계신 거 같던데,
            사용하고 계신 캐시 플러그인은 어떤 건지 여쭈어봐도 될까요?

          • Cache Enabler 라는 플러그인을 사용했지만 지금은 활성화 상태가 아닙니다.그리고 캐싱 플러그인을 여럿 사용하는 건 별 의미가 없을 것같네요.

  7. 너무 잘보고 있습니다.
    궁금한점이
    nginx서버에 워드프세스 설치를 dongnesikdang.co.kr도메인을 통해 설정을 다해서 ssl인증서까지 받았는데요.

    같은 사이트에 보유하고 있는 dongnesikdang.com도메인을 추가하려고하는데 이런경우는 안나와 있더군요. .com으로 들어온 사용자도 전부 .co.kr로 보내려고하는데요
    라우팅설정이라던지 ssl인증서 발급확장을 어떻게 하는지 모르겠습니다. 추후에 한글도메인 동네식당.com과 동네식당.co.kr도 같은 사이트로 연결하려고하면 ssl인증서등이 어찌되는지 궁금합니다.

    • 다른도메인으로 보내주는건 도메인 포워딩이라고 하는데요. nginx 설정의 server 블락에서 server_name에 도메인을 넣는데 쉼표를 넣어서 여러개 넣을 수 있습니다.

      그런데 인증서는 해당 도메인에대해 또 추가로 발급받고나면 인증서 경로가 달라지므로 같은 서버블락에 넣기 곤란할 겁니다. 그래서 새로운 server 블락을 추가해서 설정하면 되겠습니다.
      처음부터 여러 도메인에대한 인증서를 발급받는다면 하나의 인증서로 여러 도메인을 인증받거나 또는 와일드카드 인증서 설정이란게 있는데 그걸로 할 수 있을 거예요.

  8. 궁금한게 있어 한가지 질문드립니다 ssl 인증서 발급을 위해 찾아다니다가 이 글을 보고 ssl 인증서를 발급받고 nginx routing 설정을 하려고 보니 sites-available 라는 디렉터리와 default 파일이 없어서 설정이 불가능합니다

댓글은 익명이나 SNS, wordpress.com 로그인 지원). 마크다운 문법 사용가능(Shift+~ 키로 특정문구 혹은 위아래 ~~~으로감싸서 여러줄을 코드블락으로 작성)