EC2 + NGINX + SSL

EC2 + Nginx + SSL
AWSEC2NginxSSL
avatar
2025.02.17
·
7 min read

1. 도메인과 EC2 연결

필자는 가비아에서 도메인을 구매 했다.

1) 가비아 도메인 구매 후 연결

3440

가비아에서 도매인 구매를 완료 했다면 우측 상단 "My가비아"를 클릭한다.

3441

이용 중인 서비스에서 도메인을 클릭한다.

3442

DNS 관리툴을 선택 해 DNS 관리 툴로 접속한다.

3443

구매한 도메인을 체크하고 "DNS 설정"버튼을 클릭한다.

3445

"레코드 추가" 버튼을 클릭해 사용자가 원하는 호스트를 입력한다.

  • 호스트

    • @ : 특정 서브도메인이 아닌 기본 도메인 자체를 나타낸다. 예를 들어 도메인이. example.com이라면 example.com 그대로 입력만 해도 접속된다.

    • www : www.example.com 으로 입력해 접속

  • 갑/위치

    • AWS 퍼블릭 IPv4 주소를 입력하면 된다.

  • TTL(Time To Live)

    • DNS 레코드의 유효기간을 의미한다. 예를 들어 example.com의 A 레코드 TTL이 3600초(1시간)이므로, 1시간 동안 캐시된다.

      TTL 값(초)

      캐싱기간

      용도

      30~300초

      30초~5분

      자주 변경되는 레코드 (예 : 테스트 서버)

      600~3600초

      10분~1시간

      일반적인 설정 (예 : 웹사이트)

      86400초 이상

      하루 이상

      변경이 거의 없는 레코드 (예 : 메일서버)

2. EC2 접속

터미널창에 다음 명령어를 입력해 인스턴스에 접속한다.

ssh -i <pem파일 명> username@<공개 ip>

3. Nginx 설치

Nginx가 설치되어야 한다. 접속한 인스턴스에 다음 명령어를 입력해 Nginx를 설치한다.

sudo apt update
sudo apt install nginx -y

설치 후 Nginx를 실행 한다.

sudo systemctl start nginx

4. Nginx 가상 호스트 설정

Nginx의 가상 호스트 설정 파일을 편집하여 도메인을 설정해야 한다.

1) 설정 파일 생성

기본적으로 설정 파일은 /etc/nginx/sites-available/에 저장되고, 활성화된 설정은 /etc/nginx/sites-enabled/에 링크로 연결된다.

아래 명령어를 입력 해 파일을 생성한다.

sudo nano /etc/nginx/sites-available/example.com

파일이 만들어졌다면 아래 설정을 추가해준다.

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html index.htm;

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

이후 두 가지 방법이 있다. 웹 루트 디렉토리를 생성 하는 방법과 ec2에 프로젝트를 clone해서 pm2로 돌려 port를 설정하는 방법이다.

2) 설정 활성화

설정을 활성화하려면 sites-enabled 디렉토리에 심볼릭 링크를 만든다.

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

설정을 활성화 했다면 구매했던 도메인을 인터넷에 접속해 다음과 같은 화면이 뜨면 성공이다.

3449

3) 방법1 : 웹 루트 디렉토리 생성

도메인에 대한 웹 루트 디렉토리를 생성한다.

sudo mkdir -p /var/www/example.com
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www/example.com

index.html 파일을 생성하여 테스트 페이지를 추가한다.

4) 방법 2 : 프로젝트 clone

git clone 프로젝트

프로젝트를 클론 한 후 프로젝트의 실행 port 번호를 설정한다. 예를들어 포트번호가 8000 이면 설정 파일로 가서 proxy_pass를 추가한다.

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html index.htm;

    location / {
       proxy_pass http://localhost:8000; // 추가
    }
}

5) Nginx 설정 테스트 및 재시작

sudo nginx -t

이상이 없다면 다음과 같은 문자가 뜬다.

3447

문제가 없다면 Nginx를 재시작하면 된다.

sudo systemctl restart nginx

이제 본인 도메인주소로 입력하면 본인이 설정한 프로젝트나 html에 맞게 뜨면 성공이다.

5. HTTPS 설정

Let's Encrypt를 사용하여 HTTPS를 설정하면 보안 연결을 제공할 수 있다. 이를 위해 certbot을 사용한다.

1) Cerbot 설치

sudo apt install certbot python3-certbot-nginx -y

2) SSL 인증서 발급 및 설정

Certbot을 실행하여 인증서를 자동으로 발급받고 Nginx에 적용한다.

sudo certbot --nginx -d example.com -d www.example.com

3) 인증서 갱신 테스트

인증서 자동 갱신이 작동하는지 확인한다.

sudo certbot renew --dry-run

이제 브라우저에서 http://example.com 또는 https://example.com에 접속하여 페이지가 제대로 표시되는지 확인하면 된다.







- 컬렉션 아티클