6편. Nginx로 웹 서버 구성 — 브라우저로 내 서버에 접속하기

시리즈: AWS로 웹 서버 + DB 직접 구축하기 (VPC 완전 정복) | 6편 / 15편

지난 편에서 EC2를 만들고 SSH로 접속까지 성공했어요. 지금 EC2는 운영체제만 있는 빈 서버 예요. 이번 편에서는 Nginx를 설치해서 브라우저로 접속 가능한 웹 서버 를 만들어볼 거예요.


Nginx란?

Nginx(엔진엑스)는 웹 서버 소프트웨어 예요.

웹 서버의 역할을 한 줄로 설명하면:

브라우저가 “이 페이지 보여줘” 라고 요청을 보내면, 서버가 HTML 파일을 찾아서 돌려주는 것

현실 세계로 비유하면:

EC2 = 건물 (공간은 있지만 뭔가 없으면 아무것도 못 함) Nginx = 그 건물 안에서 일하는 직원 (요청을 받고 파일을 내줌)

건물만 있으면 아무도 서비스를 받을 수 없어요. Nginx를 설치해야 비로소 웹 서버로 동작해요.

Apache와 함께 가장 많이 쓰이는 웹 서버인데, 가볍고 빠르기 때문에 최근에는 Nginx를 더 많이 써요.


EC2에 다시 접속하기

아직 SSH 연결 중이라면 바로 다음 단계로 넘어가세요.

연결이 끊겼다면 5편에서 했던 것처럼 다시 접속해요.

Mac / Linux:

ssh -i ~/Downloads/my-key.pem ec2-user@[EC2 퍼블릭 IP]

Windows PowerShell:

ssh -i C:\Users\내이름\Downloads\my-key.pem ec2-user@[EC2 퍼블릭 IP]

💡 EC2 퍼블릭 IP 확인하는 법 EC2 콘솔 → Instances → web-server-1 클릭 상세 정보에서 Public IPv4 address 확인


Nginx 설치하기

1단계 — 패키지 업데이트

먼저 서버의 패키지 목록을 최신으로 업데이트해요.

sudo dnf update -y

명령어 앞의 sudo 는 관리자 권한으로 실행 한다는 뜻이에요. 업데이트가 완료되면 마지막에 이게 나와요.

Complete!

시간이 좀 걸릴 수 있어요. 1~2분 기다리세요.


2단계 — Nginx 설치

sudo dnf install nginx -y

-y 옵션은 설치 중 “정말 설치할까요?” 라는 질문에 자동으로 yes 를 답하게 해줘요.

설치가 완료되면:

Installed:
  nginx-1.24.0-2.amzn2023.x86_64
Complete!

3단계 — Nginx 시작

설치만 한다고 Nginx가 바로 실행되지는 않아요.

sudo systemctl start nginx

4단계 — 서버 재시작 시 자동 시작 설정

EC2를 재시작하면 Nginx가 꺼져버려요. 아래 명령어로 서버가 부팅될 때 자동으로 Nginx가 켜지도록 설정할게요.

sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

5단계 — 상태 확인

제대로 실행 중인지 확인해볼게요.

sudo systemctl status nginx

이렇게 나오면 성공이에요!

● nginx.service - The nginx HTTP and reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; ...)
     Active: active (running) since Mon 2024-01-01 00:00:00 UTC; 10s ago
   Main PID: 1234 (nginx)
  • active (running) — Nginx가 정상 실행 중
  • enabled — 자동 시작이 설정됨

화면에서 나오려면 q 를 누르세요.


브라우저로 접속해볼까요?

브라우저 주소창에 EC2의 퍼블릭 IP를 입력해요.

http://[EC2 퍼블릭 IP]

⚠️ https 가 아니라 http 로 접속해야 해요! 아직 HTTPS 인증서를 설정하지 않았어요. (13편에서 할 거예요) 브라우저가 자동으로 https 로 바꾸면 주소창에서 직접 http:// 로 시작하도록 바꿔주세요.

이런 화면이 보이면 성공이에요! 🎉

Welcome to nginx on Amazon Linux!

This page is served by the Nginx HTTP server for Amazon Linux.
...

왜 접속이 됐을까요? — 보안 그룹과의 연결

잠깐, 한 가지 짚고 넘어갈게요.

4편에서 web-sg 에 HTTP(80번 포트) 인바운드 규칙 을 추가했던 거 기억하나요?

인바운드 규칙
Type     : HTTP
Port     : 80
Source   : 0.0.0.0/0   ← 전 세계 누구나

Nginx는 기본적으로 80번 포트에서 요청을 받아요. 브라우저에서 http:// 로 접속하면 80번 포트로 요청이 와요.

이 두 가지가 맞아떨어진 거예요.

브라우저
  ↓ http://1.2.3.4  (=80번 포트 요청)
web-sg ← 80번 포트 허용 ✅
  ↓
EC2 (web-server-1)
  ↓
Nginx ← 80번 포트에서 대기 중
  ↓
HTML 파일 반환
  ↓
브라우저 화면에 표시

보안 그룹을 먼저 만들어둔 게 이제야 의미가 생겼죠?


내 웹 페이지 만들어보기

기본 Nginx 페이지 대신 내가 만든 HTML 로 바꿔볼게요.

Nginx의 기본 웹 파일 위치는 여기예요.

/usr/share/nginx/html/index.html

이 파일을 수정하면 브라우저에 보이는 내용이 바뀌어요.


방법 1 — echo 명령어로 바로 덮어쓰기 (추천)

가장 간단한 방법이에요.

sudo bash -c 'cat > /usr/share/nginx/html/index.html << "EOF"
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>내 AWS 웹 서버</title>
  <style>
    body { font-family: sans-serif; text-align: center; margin-top: 100px; background: #f5f5f5; }
    h1 { color: #ff9900; }
    .box { background: white; padding: 40px; border-radius: 8px; display: inline-block; }
  </style>
</head>
<body>
  <div class="box">
    <h1>🎉 AWS VPC 실습 중!</h1>
    <p>퍼블릭 서브넷의 EC2 웹 서버예요.</p>
    <p>서버: web-server-1 / 서브넷: public-subnet-2a</p>
  </div>
</body>
</html>
EOF'

방법 2 — vi 에디터로 수정

터미널에서 직접 파일을 편집하고 싶다면 vi를 사용할 수 있어요.

sudo vi /usr/share/nginx/html/index.html

vi 에디터는 처음 보면 낯설어요. 핵심만 알아두면 돼요.

vi 에디터 기본 사용법:

1. 파일을 열면 기본적으로 "보기 모드" 예요. 바로 타이핑이 안 돼요.

2. 기존 내용 전체 삭제:
   gg 입력  →  파일 맨 위로 이동
   dG 입력  →  현재 위치부터 끝까지 전부 삭제

3. 편집 시작:
   i 입력   →  "편집 모드" 진입 (왼쪽 하단에 -- INSERT -- 표시됨)

4. 내용을 입력하거나 붙여넣기 (Ctrl+V 또는 마우스 우클릭)

5. 저장하고 나가기:
   Esc 키   →  편집 모드 종료
   :wq 입력 →  저장(:w)하고 나가기(:q)  →  엔터!

💡 vi가 너무 낯설다면? 방법 1의 cat 명령어 방식을 쓰는 게 훨씬 편해요. 실무에서도 짧은 파일은 이 방식을 많이 써요.


변경 확인

파일을 수정한 뒤 브라우저에서 http://[EC2 퍼블릭 IP] 를 새로고침 하면 바뀐 페이지가 보여요.

💡 HTML 파일만 수정할 때는 Nginx를 재시작하지 않아도 바로 반영돼요.


접속이 안 될 때 체크리스트

브라우저에서 “사이트에 연결할 수 없음” 이 뜬다면:

① EC2가 Running 상태인지 확인

EC2 콘솔 → Instances → web-server-1
Instance state : Running  ← 이어야 해요

② web-sg 인바운드 규칙 확인

EC2 콘솔 → Security Groups → web-sg → Inbound rules
Type: HTTP / Port: 80 / Source: 0.0.0.0/0  ← 이게 있어야 해요

이 규칙이 없다면 Edit inbound rules 를 눌러서 추가하세요.

③ EC2에 퍼블릭 IP가 있는지 확인

EC2 콘솔 → Instances → web-server-1
Public IPv4 address : 1.2.3.4  ← 이게 있어야 해요

- 로 표시된다면 퍼블릭 IP가 없는 거예요. 서브넷의 “Auto-assign public IPv4” 설정을 확인하세요. (2편 참고)

④ https 가 아닌 http 로 접속했는지 확인

브라우저가 자동으로 https 로 전환하는 경우가 있어요. 주소창에서 직접 http://1.2.3.4 처럼 입력해보세요.

⑤ Nginx가 실행 중인지 확인

SSH로 EC2에 접속해서:

sudo systemctl status nginx

active (running) 이 아니라면:

sudo systemctl start nginx

알아두면 좋은 Nginx 명령어

# Nginx 재시작 (설정 파일 변경 후)
sudo systemctl restart nginx

# Nginx 중지
sudo systemctl stop nginx

# 설정 파일 문법 오류 확인 (재시작 전에 확인하는 습관!)
sudo nginx -t

# 접속 로그 실시간으로 보기 (Ctrl+C로 종료)
sudo tail -f /var/log/nginx/access.log

# 에러 로그 실시간으로 보기
sudo tail -f /var/log/nginx/error.log

💡 로그 보는 게 왜 중요한가요? 브라우저에서 내 서버에 누가 언제 접속했는지 access.log 에 기록돼요. 뭔가 이상하다 싶으면 error.log 를 먼저 확인하는 습관을 들이면 좋아요.


Nginx 파일 구조 (참고)

/etc/nginx/
  ├ nginx.conf           ← 메인 설정 파일
  └ conf.d/
      └ default.conf     ← 사이트별 설정 (가상 호스트)

/usr/share/nginx/html/   ← 기본 웹 파일 위치
  └ index.html           ← 지금 수정한 파일

지금 당장 설정 파일을 건드릴 필요는 없어요. 11편에서 ALB와 연동할 때 다시 살펴볼 거예요.


현재 아키텍처 상태

브라우저
  ↓ http://1.2.3.4 (80번 포트)
인터넷 → IGW → public-subnet-2a
  └ EC2 (web-server-1) ✅ Running
       └ Nginx ✅ 실행 중 (80번 포트 대기)
       └ web-sg 적용 (80, 443 허용)

private-subnet (아직 비어있음)

웹 서버가 완성됐어요! 브라우저로 접속이 되죠?

다음 편에서는 프라이빗 서브넷에 DB(RDS) 를 올릴 거예요.


이번 편 정리

명령어설명
sudo dnf install nginx -yNginx 설치
sudo systemctl start nginxNginx 시작
sudo systemctl enable nginx부팅 시 자동 시작 설정
sudo systemctl status nginx상태 확인
sudo nginx -t설정 파일 문법 검사
sudo tail -f /var/log/nginx/access.log접속 로그 실시간 확인

이번 편에서 만든 것:

  • ✅ Nginx 설치 및 실행
  • ✅ 부팅 시 자동 시작 설정
  • ✅ 커스텀 HTML 페이지
  • ✅ 브라우저로 웹 서버 접속 확인

다음 편 👉 7편. RDS 생성 — 프라이빗 서브넷에 MySQL DB 만들기