Sub Domain과 Redirection

ik_13038·2022년 8월 17일
1

라이징캠프 2주차

목록 보기
9/10
post-thumbnail

2주차 과제
Local 서버 구축 / Window/MacOS + Apache PHP MySQL (Bitnami) 👌
AWS 서버 구축 / Linux + Nginx PHP MySQL 👌
Sub Domain에 각각 나만의 페이지 만들기

Sub Domain과 Redirection

dev, prod로 서브 도메인을 붙이고 IP주소로 접속해도 도메인주소로 접속되게 하는 Redirection을 진행 해 볼 것이다.


Sub Domain

cafe.naver.com(카페)와 blog.naver.com(블로그)처럼 서브도메인을 이용해 다중의 사이트를 한 도메인 아래에서 독립적으로 접속할 수 있다. www 또한 인터넷 초창기에는 서브도메인이었으나 인터넷의 보급으로 www가 인터넷의 대명사가 되면서 서브 도메인의 개념이 사라지고 루트 도메인에 연결된 주소로 연결해주는 보조 역할을 하고 있다.

필자는 dev.ikinfo.shop, prod.ikinfo.shop.
두개의 서브 도메인을 설정 할 것이다.

/var/www/ 디렉토리에 dev, prod 각각의 디렉토리를 제작하고 그 안에 주소에서 보여줄 정적 파일 생성 (디렉토리 위치는 상관 없다.)

  1. /var/www/dev/index_dev.html
$ sudo vi /var/www/dev/index_dev.html

  1. /var/www/prod/index_prod.html
$ sudo vi /var/www/prod/index_prod.html

  1. /etc/nginx/sites-available/default 설정 파일에 들어가서 각각dev.ikinfo.shop, prod.ikinfo.shop에 대해 연결 해 준다.


위 캡처본이 저장소 위치 등 다른 점이 있는데 전체적인 포맷은 아래를 유지하면 실행에 큰 지장이 없다. 아래 코드를 참조하여 예시 중 하나를 사용하면 된다.


// 예시1
server {
	listen 80;
    listen [::]:80;	# 80번 포트의 요청을 받겠다
    
    root /var/www/html/화면에 보여줄 파일이 담긴 디렉토리;
    
    index 보여줄 파일 index.htm index.nginx-debian.html;
    server_name 사이트의 도메인 주소
    location / {
    	try_files $uri $uri/ =404;
    }
    if ($host = 도메인 주소) return 301 https:// 도메인 주소 #https 리다이렉트
  //사실 현재 리다이렉션은 굳이 사용할 필요가 없다. (SubDomain을 제작하는 것이므로)
  
// 예시2
  # 기존 server 설정
server {
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html index.php;
  // 이 때 기존 서버 설정의 index는 페이지에 보여줄 index 페이지의 우선순위로, 
 //index.html이 아닌 index.php 파일을 첫 페이지로 보여주고 싶다면 아래와 같이 설정하면 된다.
  
    server_name 도메인 주소;

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

# dev 서브 도메인 server 추가
server {
    root /var/www/html/dev;
    index dev.html;
    server_name dev.도메인주소;
    
    location ~ \.php$ {        
	include snippets/fastcgi-php.conf;
	fastcgi_pass unix:/run/php/php8.1-fpm.sock;    
} //php 파일 사용시 응용
  /*서브 도메인 설정에 사용된 위의 코드는 nginx가 php파일을 다운로드하지 않고 php-fpm 모듈을 통해 
  웹 페이지에 보이게 하는 설정이다. */

    location / {
        try_files $uri $uri/ =404;
    }
}
  • sever_name위치에는 본인의 도메인 이름을 적어주면된다
    index는 기본경로로 들어왔을 때 가장 먼저 보여줄 파일이름이다. php, js등의 파일을 사용하는 경우 index 뒤에 index.php, index.js등을 추가해줄 수 있고, listen 80부분은 http로 받는 부분
    root는 이 도메인으로 들어왔을 때 보여줄 파일 경로이다. var/www이 nginx의 기본 파일 경로이다, var/www/domain.com 위치에 보여줄 파일을 추가하는 것을 추천한다.

참고로 기존 default 설정 파일이 아닌 새로 파일을 /sites-available/에 제작하여 /etc/nginx/sites-enabled/에 직접 연결해주는 방법도 있다.
sites-available에서 파일을 수정하고 sites-enabled에서는 이 파일을 참조하고 있도록한다. 이럴 땐 아래처럼 소프트링크를 사용하여 두 파일을 연결해준다.

$ sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

이처럼 일반적으로는 한 인스턴스에서 여러 도메인을 관리할 수 있기때문에 따로 파일을 만들어 주는 것이 더 좋다고 하나 일단 테스트를 위해 default를 응용하겠다. 링크 참조 default의 경우 따로 소프트링크해줄 필요 없이 기존에 연결되어 있어 nginx를 재시작 시 적용이 된다.

dev와 prod 모두 위의 코드 식으로 열어 주면 된다.

  1. 가비아에 접속해서 CNAME레코드를 추가해준다.

가비아에서 CNAME 타입을 응용해서 subdomain을 열어준다. 이 때 값/위치에 기존 도메인주소와 함께 뒤에 '.'을 붙여야한다.

완료가 되었으면 putty 터미널로 되돌아가자.

$ sudo nginx -t
$ sudo systemctl restart nginx

nginx-t는 nginx를 테스트 하는 과정이다, 테스트에 문제가 없다면 nginx를 재시작해준다.

이후 본인은 굉장히 많이.. 헤맸는데 일단 사유는 아래와 같다.


? 원하는 화면 대신 기존의 nginx index.html만 뜬다..


경로 상의 문제는 없었다..

이후 계속해서 몇 시간 가량 확인한 결과
내부 세팅 등 코드의 문제는 없었고 백신의 문제였다.

현재 본인이 사용한 백신은 Bitdefender로, 해당 사이트가 https가 아닌 http로 접근되는 것을 보고 백신이 이를 초기에 사용자인 본인에게 알렸으나
본인은 무시하고 들어가는 옵션을 통해 들어갔었다.

이러한 옵션 때문에 내부 사이트 로직에 접근하는 게 아닌, 기존에 접근했던 https://ikinfo.shop 사이트의 캐시값만 계속해서 불러왔던 것이다.
휴대전화 삼성 인터넷으로 접속하니 잘 접속되는 것을 확인했다.

https로 암호화하여 연결하는 방법은 이전에 사용했던 방법과 동일하다.

//ssl 인증을 받고 HTTPS를 구축
$ sudo certbot --nginx -d dev.ikinfo.shop -d prod.ikinfo.shop

이제 재시작 후 홈페이지에 들어가보자.

$ nginx -t	#ok받으면 nginx 재시작
$ sudo systemctl reload nginx // 생략가능 (서비스 시작 시 같이 실행)
$ service nginx restart


정상적으로 ssl 처리가 된 http 홈페이지가 로드되는 것을 확인할 수 있다.


IP 주소 -> 도메인 주소 리다이렉션


위에 했던 서버 설정과 비슷하게 서버블록을 작성해주면 된다.

server {
	if($host = 13.125.93.18) {
    return 301 https://ikinfo.shop$request_uri;
    }
    listen 80;
    listen [::]:80;
    server_name 13.125.93.18;
    return 404;
}

검색창에 IP주소를 입력해도 https://ikinfo.shop 으로 접속되는 걸 볼 수 있다.

profile
글 연습, 정보 수집

0개의 댓글