새 프로젝트를 시작하면서 또다시 반복되는 서버 세팅...^-^
매번 같은 작업을 반복하다보니 따로 정리해두면 좋을거 같다고 생각이 들었다
도메인연결
가비아에서 도메인은 구입해둔 상태이다!
가비아에서 서비스관리 -> DNS툴을 들어간다
구매한 도메인 리스트 중, 연결할 도메인을 체크하고 DNS설정을 누른다
A레코드를 추가해준다
호스트에 각각 www, @를 입력하고, 값/위치에는 연결할 인스턴스의 ip주소를 적어준다
확인, 저장을 눌러준다.
이렇게 하면 domain.com과 www.domain.com이 사용가능하다
이제 Nginx에서 도메인을 설정해주자
etc/nginx/sites-available 경로에 들어가면 default라는 파일이 있다
default 파일을 사용해도 가능하지만, 한 인스턴스에서 여러 도메인을 관리할 수 있기때문에 따로 파일을 만들어 주는 것이 더 좋다
cd /etc/nginx/sites-available
$ sudo vi {domain.com}
# sudo vi suyeon.com
domain.com 파일에 아래 서버블록을 입력해준다!
server {
listen 80;
listen [::]:80;
root /var/www/domain.com/html;
index index.html index.htm index.nginx-debian.html;
server_name www.domain.com domain.com;
location / {
try_files $uri $uri/ =404;
}
}
- sever_name위치에는 본인의 도메인 이름을 적어주면된다
- index는 기본경로로 들어왔을 때 가장 먼저 보여줄 파일이름이다. php, js등의 파일을 사용하는 경우 index 뒤에 index.php, index.js등을 추가해줄 수 있고, node.js, spring을 사용하는 경우 신경쓰지 않아도 된다.
- listen 80부분은 http로 받는 부분
- root는 이 도메인으로 들어왔을 때 보여줄 파일 경로이다. var/www이 nginx의 기본 파일 경로이다, var/www/domain.com 위치에 보여줄 파일을 추가하는 것을 추천한다.
sites-available에 파일을 추가했는데, 실제로 이 파일을 적용시키려면 sites-enabled에도 작성해주어야한다.
하지만 같은 내용을 두 폴더에 나눠서 관리할 경우 동기화가 어려우므로
주로 sites-available에서 파일을 수정하고 sites-enabled에서는 이 파일을 참조하고 있도록한다.
이럴 땐 소프트링크를 사용하여 두 파일을 연결해준다.
$ sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/
domain.com위치에는 방금 sites-available에 만들었던 파일이름을 적어준다
기존에 있던 sites-available/default 파일을 사용했다면, 이 과정은 생략가능하다
nginx.conf 파일을 수정해준다
이건 nginx설치 후 한번만 수행하면 된다
$ cd /etc/nginx
$ sudo vi nginx.conf
http {
...
server_names_hash_bucket_size 64; #주석해제
...
}
$ sudo nginx -t
$ sudo systemctl restart nginx
nginx -t는 nginx를 테스트 하는 과정이다, 테스트에 문제가 없다면 nginx를 재시작해준다
만약 서버블록 등에 오타가 있다면 테스트를 통과하지 못한다! (특히 세미콜론이나 중괄호 오타 조심!)
successful이 보이면 성공!
https 적용
https는 lets encrypt를 이용하여 발급받으면 된다.
lets encrypt는 발급절차가 간단하고, 무료라는 장점이 있기때문에
https를 이용하려면 인증서를 발급받은 뒤, 서버블록에 listen 443(https포트)을 추가하고, http로 접속했을 때 https로 리다이렉션 하는 등의 과정을 수행해야하는데, 인증서만 발급받으면 알아서 서버블록을 수정해주는 모듈이 있다!
certbot설치
sudo snap install certbot --classic
certbot으로 도메인 인증서 발급
$ sudo certbot --nginx -d domain.com -d www.domain.com
certbot을 이용하여 각 도메인에 인증서를 발급해준다
-d 뒤에 도메인을 붙여서 한번에 여러개를 등록가능하다
위와같이 나오면 발급이 완료된것이다!
다시 sites-available의 파일을 들어가보면, 기존에 80번 포트에 대해 작성한 것 외에 443포트의 서버블록이 생겼을 것이다!
따로 건드리진 않아도 된다.
도메인에 접속해보면 root경로에 파일을 작성해둔 경우, 파일이 나오는 것을 확인할 수 있고
https도 적용되어, http로 접속해도 https로 리다이렉트되는 것을 확인할 수 있다.
💡 접속이 안된다면 ec2 인바운드 규칙에 443 포트를 추가해줬는지 확인하자!
💡 접속이 안된다면 sites-available에 작성했던 root경로에 파일을 추가해줬는지 확인하자!
서브도메인 생성
실제 개발을 할 때는 개발서버와 배포서버를 분리해서 사용하게 된다
서브도메인은 dev.domain.com, prod.domain.com과 같이 사용할 수 있다
이렇게 서브도메인을 사용하면, 도메인을 2개 사용할 필요없이, 맨 앞쪽만 바꿈으로써 좀더 편리하게 사용이 가능하다
여기서 서버를 분리한다는 개념은 위와같이 서브도메인을 이용하여 각각 다른 도메인을 사용하고
root 경로 위치를 각각 두어, 각 경로에서 개발용, 배포용 파일을 업로드 해두고 돌려두면 된다
먼저 가비아에 접속하여 서브 도메인을 입력하자
서브도메인은 타입을 CNAME으로 주고, 호스트에는 적용할 서브도메인 이름,
값/위치에는 A레코드에서 IP주소를 입력한 것과 달리, 도메인 주소를 입력하고 뒤에 점(.)을 붙여주면 된다 (ex) domain.com.
이렇게 일일이 서브도메인을 등록해도 되지만, 모든 서브도메인을 허용할 때는 * 를 호스트에 적어주면 모든 서브도메인을 적용할 수 있다!
이제 이때까지 했던 서버블록 설정, https적용을 서브도메인에도 똑같이 적용해주어야한다
서버블록설정
server {
listen 80;
listen [::]:80;
root /var/www/domain.com/html;
index index.html index.htm index.nginx-debian.html;
server_name www.domain.com domain.com;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
root /var/www/domain.com/dev;
index index.html index.htm index.nginx-debian.html;
server_name dev.domain.com;
location / {
try_files $uri $uri/ =404;
}
}
아까 작성했던 서버블록 밑에 적어주면 된다!
서브도메인의 서버블록은 root, server_name을 서브도메인에 맞게 변경해준다
기본도메인에는 https를 적용해주었기 때문에 certbot에 의해 https설정 및 리다이렉션이 적혀있을 것인데,
그 코드는 건드리지 말고 아래쪽에 추가해준다
아까와 같이 https를 위한 인증서를 서브도메인에 대해 발급받아주면 끝!
추가적으로 ip -> domain 리다이렉션을 처리해주어도 좋다
그리고 여기선 생략했지만 도메인 root로 설정한 var/www/domain.com/html 등의 경로에 보여줄 파일 추가하는거 잊지말기
질문있으시면 언제든 남겨주세요~💪💪
'🚀 배포' 카테고리의 다른 글
[Nginx] proxy pass 설정하기 (0) | 2022.05.29 |
---|---|
[AWS][Codedeploy] missing credentials - please check if this instance was started with an iam instance profile (0) | 2022.05.02 |
[Github Actions][Codedeploy] CI/CD 구축하기 (1) (0) | 2022.04.20 |