본문 바로가기
서버세션/Server

Ubuntu Nginx에서 서브도메인(Sub Domain) 적용하기, Domain Redirection 적용

by 김긍수 2021. 4. 20.

* Ubuntu Nginx LEMP(Linux, Nginx, MySQL, PHP)환경

 

개발 시 보통 개발서버 / 실서버 두개로 나누어 진행하게 된다.

앞 전에 구매한 hellosilver.shop 도메인을 이용해서 서브 도메인을 적용시켜볼 것이다.

 

서브 도메인 적용하기

1. 서브 도메인 추가

- 서브 도메인을 적용하기 위해서 가비아 홈페이지로 이동한다.

- My가비아 -> DNS 관리 툴 -> [설정] -> [레코드수정] 을 선택하여 서브도메인을 추가해준다.

- 타입은 CNAME 이고 호스트에는 도메인 주소 앞에 들어갈 서브도메인명을 입력하고 값에는 도메인주소를 입력한다.

 * CNAME : CNAME 레코드는 도메인에 별칭(서브도메인)이름을 연결하는 DNS레코드 유형이고 마침표(.)로 끝나야한다.

나는 dev와 prod로 나누었다.

2. 서브도메인 폴더 추가

위에서 'dev'와 'prod'으로 서브 도메인을 추가하였다.

이제 Nginx의 /var/www/html에 각각 서브도메인에 대한 가진 디렉터리를 생성한 후 인덱스 파일을 생성한다.

$ cd /var/www/html
$ sudo mkdir dev
$ sudo mkdir product

# dev. 파일 생성
$ cd dev
$ sudo vi dev.php

# prod. 파일 생성
$ cd product
$ sudo vi prod.php

 


위 처럼 터미널 상에서 디렉터리를 추가할 수 있지만, WinSPC에서도 디렉터리를 생성하고 확인할 수 있다.

 

 

디렉터리를 생성하면 Permission denied 라는 오류 메시지가 뜨는데 해당 디렉터리에 대한 수정 기능이 없기 때문이다.

 

 

root유저 외에 일반 유저도 디렉터리를 생성할 수 있도록 하기 위해 권한을 부여해준다.

(반드시 권한을 부여할 디렉터리에서 실행해야한다.

특히 홈디렉터리에서 실행할 경우 치명적으로 문제가 발생한다. : 하단 오류 참고)

/var/www/html $ sudo chmod -R 777 .

 

해당 명령어를 실행하였으면 디렉터리 생성이 정상적으로 완료될 것이다.


3. Nginx 설정 파일 수정

- 위에서 설정한 서브도메인에 대한 추가 설정을 Nginx 설정파일에도 추가해야한다.

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

vi 편집기를 이용하여 해당 설정파일에 다음 코드 블럭을 추가해준다.

server_name에는 원하는 서브도메인을, root에는 연결할 디렉토리를, index에는 사용할 우선순위를 정해준다.

 

nginx 설정파일을 수정했으므로 Nginx 서버를 재부팅해준다.

$ sudo service nginx restart

서브 도메인에도 https 를 적용시킨다.

# sudo certbot --nginx -d 서브도메인명

$ sudo certbot --nginx -d dev.도메인.com -d prod.도메인.com

 

4. 서브도메인 접속 확인

 

설정한 dev, prod 서브도메인으로 정상적으로 접근하는 걸 확인할 수 있고 HTTPS 까지 잘 적용된 모습을 확인할 수 있다.

 


오류 1. 인스턴스 권한 문제

no supported authentication methods available (server sent publickey)
사용자명 "ubuntu"를 사용합니다.
서버가 키를 거부하였습니다. 인증에 실패하였습니다.

원인 :

인스턴스에 접속하기 위해서는 아래와 같은 올바른 파일 권한이 필요한데 루트 디렉터리부터 모든 파일의 권한을 777로 변경해버려서 접속할 수 없었다. 

  • Linux 홈 디렉터리(/home)는 (0755/drwxr-xr-x)여야합니다.
  • 사용자의 홈 디렉터리(/home/ec2-user/)는 (0700/drwx------)여야 합니다.
  • .ssh 디렉터리 권한(/home/ec2-user/.ssh)은 (0700/drwx------)여야 합니다.
  • authorized_keys 파일 권한(/home/ec2-user/.ssh/authorized_keys)은 (0600/-rw-------)여야 합니다.

나는 winspc에서 /var/www/html에 디렉터리를 추가하는데 권한이 없어서 모든 사용자에게 해당 디렉터리에 대한 권한을 부여하기 위해 sudo chmod -R 777 . 명령어를 입력하였다. 하지만 이 명령어를 홈디렉터리에서 실행하여 해당 디렉터리와 안에 들어있는 모든 파일의 권한이 777 로 변경되어버린 것이다.

해결 : 

AWS 인스턴스를 종료하고 새로운 인스턴스를 생성해야하는 방법뿐이다. ㅠ_ㅠ

"chmod -R root /" 을 실행했다면 해당 OS는 사용할 수 없게 되어버린다.

777권한은 누구나 이 파일을 읽고, 쓰고, 실행할 수 있다는 의미이다.

보안이 아예 저세상가버린 상태로 심각한 보안 문제가 있으며 다른 많은 파일들이 이미 부셔진 상태라고 볼 수 있다고 한다. 따라서 설계상 해당 명령어를 실행한다면 해당 OS는 사용할 수 없도록 설계된다.

 

 

 


Domain Redirection 적용

네이버에 들어갈 때 "www.naver.com"으로 들어간다.

하지만 주소창에 125.209.222.141 만 치더라도 우리는 "www.naver.com" 으로 접속할 수 있다.

IP주소를 입력하더라도 도메인으로 연결되도록 적용하는 것이 Domain Redirection 이라는 것이다. 

보통 IP to Domain Redirect 이라고도 한다.

 

이것은 Nginx 웹서버에 설정하는 것이므로 Nginx의 설정파일을 수정해야한다.

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

설정을 추가해준다.

 

저장 후 Nginx 서버를 재시작해준다.

$ sudo service nginx restart

 

이제 브라우저에서 해당 IP로 접근하면 설정해준 URL로 리다이렉션되는 것을 확인할 수 있다.

 

 

 

 

참고

velog.io/@banjjoknim

pilot376.tistory.com/56

luminitworld.tistory.com/86

aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/

velog.io/@banjjoknim/리다이렉션

댓글