* 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로 리다이렉션되는 것을 확인할 수 있다.
참고
aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/
'서버세션 > Server' 카테고리의 다른 글
Spring boot 환경구축 (0) | 2021.05.02 |
---|---|
AWS RDS 구축 (타임존 설정 / 인코딩 방식) (0) | 2021.05.01 |
[HTTPS 적용] Let's Encrypt 를 이용해서 HTTPS 적용하기 (0) | 2021.04.20 |
도메인 구입 후 서버에 도메인 설정하기 (0) | 2021.04.20 |
phpmyadmin 설치 (0) | 2021.04.20 |
댓글