Nginx 설치부터 첫 웹페이지 띄우기까지 완벽 정리

Nginx 설치부터 첫 웹페이지 띄우기까지 완벽 정리

솔직히 처음엔 Nginx가 뭔지도 잘 몰랐다. 그냥 ‘웹서버’라고 하면 Apache만 떠올리던 시절이 있었지. 그런데 몇 년 전, 동료 개발자가 자기네 서비스는 Nginx로 돌리는데 “속도가 체감될 정도로 다르다”고 으스대는 걸 보고 나도 한번 써봐야겠다 싶었다. 막상 직접 해보니 생각보다 어렵지 않더라. 오히려 설정 파일 구조가 깔끔해서 배울수록 재밌었다고나 할까? 오늘은 그 Nginx를 여러분도 쉽게 설치하고, 간단한 웹페이지까지 띄워보는 과정을 내 경험을 바탕으로 시원하게 정리해볼까 한다. 특히 2026년인 지금, 성능과 안정성 때문에 Nginx를 선택하는 건 너무나도 당연한 일이 되어버렸으니까!


Nginx, 왜 2026년에도 여전히 대세일까?

아마 이 글을 찾아오신 분들이라면 Nginx가 뭔지 대충은 아실 거다. 하지만 ‘왜 Nginx여야 하는가’에 대한 확실한 답은 또 다른 문제다. 내가 처음 Nginx를 접했을 때 가장 놀랐던 건 바로 높은 동시 처리 성능이었다. 그때 Apache만 쓰던 나로서는 작은 서버에서 수백 개의 동시 연결을 안정적으로 처리하는 Nginx가 정말 신세계 같았다.

Nginx는 비동기 이벤트 기반 아키텍처를 사용한다. 이게 무슨 말이냐면, 하나의 워커 프로세스가 여러 개의 클라이언트 요청을 동시에, 그것도 아주 효율적으로 처리한다는 뜻이다. 마치 베테랑 바리스타 한 명이 여러 손님의 커피 주문을 동시에 받아서 착착 만들어내는 느낌이랄까? 반면 Apache는 기본적으로 요청 하나당 하나의 프로세스나 스레드를 할당하는 방식이라, 동시 접속자 수가 많아지면 리소스 소모가 훨씬 커진다. 이건 진짜 큰 차이다.

최근에는 웹 서비스의 트래픽이 폭발적으로 늘어나면서 이런 Nginx의 성능적인 강점이 더욱 부각되고 있다. 2026년 현재도 수많은 대기업과 스타트업들이 앞다퉈 Nginx를 도입하는 데는 다 이유가 있다. 리버스 프록시, 로드 밸런싱, 캐싱 기능까지 기본으로 내장되어 있어서 복잡한 서버 아키텍처를 구축할 때도 Nginx 하나면 든든하다. 개인적으로는 이 유연성이 정말 매력적이라고 생각한다.

내 경험상 Nginx는 단순히 웹서버를 넘어선다. 트래픽이 많은 서비스를 운영한다면, Nginx의 리버스 프록시나 로드 밸런싱 기능은 선택이 아닌 필수다. 특히 요즘처럼 마이크로서비스 아키텍처가 대세인 환경에서는 Nginx가 그 중심에서 트래픽을 효율적으로 분배하는 게 정말 중요하더라.

Apache vs. Nginx, 여전히 고민된다면?

물론 Apache도 여전히 훌륭한 웹서버다. 특히 오랜 역사만큼 다양한 모듈과 방대한 자료를 자랑한다. 하지만 새로운 프로젝트를 시작하거나, 고성능이 필요한 경우라면 이제는 Nginx가 더 합리적인 선택이 되었다고 생각한다. 간단한 비교표를 통해 둘의 차이를 다시 한번 짚어보자.

구분 Nginx Apache HTTP Server
아키텍처 비동기 이벤트 기반 (논블로킹) 프로세스/스레드 기반 (블로킹)
성능 (동시 연결) 매우 우수 (적은 리소스 사용) Nginx보다 리소스 소모 큼
주요 활용 리버스 프록시, 로드 밸런서, 정적 파일 서빙 동적 콘텐츠 처리, .htaccess 파일 지원
설정 방식 중앙 집중식 (설정 파일 하나) 분산식 (.htaccess 등)
학습 곡선 처음엔 생소할 수 있으나 깔끔 오랜 역사만큼 익숙한 방식

어떤가? 이제 좀 감이 잡히나? 여러분의 프로젝트 성격에 따라 선택은 달라질 수 있겠지만, 최근 트렌드와 성능을 고려하면 Nginx가 주는 이점이 훨씬 크다는 건 부정할 수 없는 사실이다.


본격적인 Nginx 설치: 우분투(Ubuntu) 24.04 기준

자, 이제 Nginx 설치의 실제 단계로 들어가 보자. 나는 주로 우분투 서버를 사용하기 때문에 우분투 24.04 LTS 버전을 기준으로 설명할 거다. 요즘은 이 버전이 안정성과 최신 기능 모두를 잡아서 많은 분들이 선호하더라. 혹시 다른 리눅스 배포판을 사용하시더라도 기본적인 명령어 구조는 비슷하니 큰 무리는 없을 거다.

1. 시스템 업데이트 및 업그레이드

가장 먼저 할 일은 늘 그렇듯, 시스템을 최신 상태로 유지하는 것이다. 이게 은근히 중요하다고. 예전에 이걸 건너뛰었다가 종속성 문제로 꽤 골치 아팠던 기억이 있다. 명령어는 간단하다.


sudo apt update
sudo apt upgrade -y

-y 옵션은 모든 질문에 ‘yes’로 응답하는 거라, 귀찮게 일일이 엔터 누를 필요가 없다. (물론 중요한 업데이트라면 한 번씩 내용을 확인하는 게 좋지만, 뭐 이 정도야…)

2. Nginx 설치

시스템 준비가 끝났으면 이제 Nginx를 설치할 차례다. 우분투의 APT 패키지 관리자를 이용하면 아주 쉽게 설치할 수 있다.


sudo apt install nginx -y

설치 명령어도 참 직관적이지 않나? 이 한 줄이면 Nginx가 뚝딱 설치된다. 개인적으로는 이 편리함 때문에 리눅스 환경을 더 선호하게 된 것 같다.

3. Nginx 서비스 확인 및 방화벽 설정

Nginx가 제대로 설치되고 실행되고 있는지 확인하는 단계다. 그리고 외부에서 접속할 수 있도록 방화벽 설정도 해줘야 한다. 이거 안 해주면 아무리 설치 잘해도 접속이 안 되어서 초보자들이 많이 헤매는 부분이다.

Nginx 서비스 상태 확인


systemctl status nginx

명령어를 실행하면 active (running)이라는 메시지를 확인할 수 있을 거다. 만약 inactive 상태라면 다음 명령어로 시작해주면 된다.


sudo systemctl start nginx
sudo systemctl enable nginx # 부팅 시 자동 실행 설정

방화벽 설정 (UFW 기준)

우분투에서는 기본적으로 UFW(Uncomplicated Firewall)를 많이 사용한다. Nginx를 설치하면 UFW에 Nginx 프로필이 자동으로 추가된다. 정말 편리한 세상이다.


sudo ufw app list # 사용 가능한 애플리케이션 프로필 목록 확인

이 명령어를 입력하면 Nginx Full, Nginx HTTP, Nginx HTTPS 같은 프로필이 보일 거다. 일반적으로 웹페이지 서빙을 위해 HTTP(80번 포트)를 열어줘야 한다. 만약 SSL/TLS까지 적용할 거라면 Nginx Full을 선택하는 게 좋겠지. 오늘은 일단 HTTP만 열어보자.


sudo ufw allow 'Nginx HTTP'
sudo ufw enable # UFW 활성화 (최초 1회만)
sudo ufw status # 방화벽 상태 확인

UFW를 활성화할 때 경고 메시지가 나올 수 있는데, y를 눌러 진행하면 된다. sudo ufw status로 확인했을 때 Nginx HTTP ALLOW Anywhere 같은 항목이 보이면 성공이다.

팁: 만약 SSH 접속이 끊길까 봐 걱정된다면, Nginx HTTP를 허용하기 전에 SSH 포트(기본 22)도 미리 열어주는 게 좋다.


sudo ufw allow ssh

첫 웹페이지 띄우기: ‘Hello, Nginx!’

자, 이제 Nginx가 제대로 작동하는지 확인하고, 나만의 첫 웹페이지를 띄워볼 시간이다. 이거 해보면 진짜 뿌듯하다. 내 첫 웹페이지가 세상에 공개되는 느낌이랄까?

1. Nginx 기본 페이지 확인

모든 설정이 잘 되었다면, 이제 웹 브라우저를 열고 서버의 공인 IP 주소도메인을 입력해보자. 예를 들어, http://여러분의_서버_IP 이런 식으로 말이다. 아마 다음과 같은 Nginx의 기본 환영 페이지를 볼 수 있을 거다.

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

이 페이지가 보인다면 Nginx 설치는 완벽하게 성공한 거다. 여기까지 왔으면 거의 다 한 거나 마찬가지다.

2. 사용자 정의 웹페이지 생성

Nginx의 기본 웹 루트 디렉토리는 보통 /var/www/html이다. 여기에 index.html 파일을 생성하거나 수정하면 된다. 한번 나만의 간단한 HTML 파일을 만들어보자.


sudo nano /var/www/html/index.html

nano 에디터가 열리면 기존 내용을 지우고 다음과 같은 HTML 코드를 입력해보자.


<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My First Nginx Page!</title>
    <style>
        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f4f4; text-align: center; padding-top: 50px; }
        h1 { color: #333; font-size: 3em; margin-bottom: 20px; }
        p { color: #666; font-size: 1.2em; }
        .container { background-color: #ffffff; margin: 0 auto; padding: 40px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); max-width: 600px; }
        .date { font-size: 0.9em; color: #999; margin-top: 30px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>🎉 Hello, Nginx! My First Webpage! 🎉</h1>
        <p>드디어 Nginx를 통해 이 페이지를 띄웠습니다! 정말 멋지지 않나요?</p>
        <p>저는 지금 2026년 7월 28일, 이 블로그 포스팅을 작성하고 있습니다.</p>
        <div class="date">Powered by Nginx & Blogger's Spirit</div>
    </div>
</body>
</html>

내용을 입력하고 Ctrl+X, Y, Enter 순으로 저장하고 빠져나오면 된다.

3. 웹 브라우저에서 확인

이제 다시 웹 브라우저에서 서버 IP 주소를 입력해보자. 아까 봤던 Nginx 기본 페이지 대신, 방금 만든 🎉 Hello, Nginx! My First Webpage! 🎉 페이지가 보일 거다. 이 순간의 희열이란! 처음 이 화면을 봤을 때 나도 모르게 ‘와!’ 하고 외쳤던 기억이 난다.

만약 변경 사항이 바로 보이지 않는다면, 브라우저 캐시 문제일 수 있으니 Ctrl+F5로 강력 새로고침을 해보거나, 아예 브라우저를 닫았다가 다시 열어보는 것도 방법이다. Nginx 설정 파일 자체를 건드린 게 아니라 웹 콘텐츠만 변경한 거라 Nginx를 재시작할 필요는 없다.


Nginx의 기본적인 설정 파일 구조 (아주 간략하게!)

Nginx를 제대로 활용하려면 설정 파일을 이해하는 게 필수적이다. 처음엔 좀 복잡해 보일 수 있지만, 기본적인 구조만 알면 금방 익숙해진다. Nginx의 주요 설정 파일은 /etc/nginx/ 디렉토리에 있다.

  • /etc/nginx/nginx.conf: Nginx의 메인 설정 파일이다. 전역 설정, 이벤트 관련 설정, HTTP 블록 등이 여기에 정의된다. 보통 이 파일은 건드리지 않고, http 블록 안에 include 지시어를 이용해 다른 설정 파일들을 불러오는 방식으로 관리한다.
  • /etc/nginx/sites-available/: 여기에 개별 웹사이트(가상 호스트)의 설정 파일들을 저장한다. 예를 들어, mywebsite.conf 같은 파일을 만들 수 있다. 실제 활성화된 사이트는 여기에만 있는 게 아니라 심볼릭 링크로 sites-enabled에 연결되어 있어야 한다.
  • /etc/nginx/sites-enabled/: sites-available에 있는 설정 파일 중에서 실제로 활성화할 사이트의 심볼릭 링크를 넣어두는 곳이다. 여기 링크된 파일들만 Nginx가 로드한다.

방금 우리가 만든 웹페이지는 /var/www/html/에 있었고, 이는 Nginx의 기본 설정 파일인 /etc/nginx/sites-enabled/default 파일에서 root /var/www/html;이라는 지시어 덕분에 서빙된 거다. 나중에 여러 웹사이트를 운영하게 된다면 sites-available에 각 사이트별 설정 파일을 만들고, sites-enabled에 링크해서 관리하는 방법을 사용하게 될 거다. 이건 정말 편리하고 깔끔한 Nginx만의 장점이다.


자주 묻는 질문 (FAQ)

Q1: Nginx 설치 후 Welcome to nginx! 페이지 대신 403 Forbidden 에러가 뜹니다.
A1: 주로 권한 문제인 경우가 많습니다. Nginx 워커 프로세스는 일반적으로 www-data 사용자/그룹으로 실행되는데, 웹 루트 디렉토리(예: /var/www/html)나 그 안의 파일들에 www-data가 읽기 권한이 없는 경우 발생합니다. 다음 명령어로 권한을 조정해보세요.

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
Q2: Nginx 설정 파일을 변경했는데 적용이 안 돼요.
A2: Nginx는 설정 파일을 변경하면 반드시 재시작하거나 재로드해야 변경 사항이 적용됩니다. 다음 명령어를 사용해보세요.

sudo nginx -t # 설정 파일 문법 검사
sudo systemctl restart nginx # Nginx 재시작
# 또는
sudo systemctl reload nginx # Nginx 재로드 (서비스 중단 없이)

nginx -t로 문법 오류를 먼저 확인하는 습관을 들이는 게 좋습니다. 잘못된 설정으로 서비스가 멈추는 불상사를 막을 수 있거든요.

Q3: Nginx로 여러 개의 웹사이트를 운영하고 싶은데 어떻게 해야 하나요?
A3: Nginx의 가상 호스트(Virtual Host) 기능을 사용하면 됩니다. /etc/nginx/sites-available/ 디렉토리에 각 웹사이트별 설정 파일(예: my-domain.conf)을 생성하고, 여기에 해당 웹사이트의 도메인과 웹 루트 경로를 지정합니다. 그 후 /etc/nginx/sites-enabled/ 디렉토리로 심볼릭 링크를 생성하고 Nginx를 재시작하면 됩니다.

sudo ln -s /etc/nginx/sites-available/my-domain.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx

이 방식이 Nginx를 깔끔하게 관리하는 표준적인 방법입니다.


오늘 Nginx 설치부터 첫 웹페이지 띄우기까지 쭉 정리해봤다. 어땠나? 생각보다 할 만하지 않나? 나는 처음에 이런 작업들을 할 때마다 작은 산을 넘는 기분이었다. 하지만 한 번 해내고 나면 다음번에는 훨씬 수월해지고, 결국 내 서비스의 인프라를 직접 컨트롤할 수 있는 능력이 생기는 거다. 2026년에도 끊임없이 변화하는 웹 환경 속에서 Nginx는 여전히 강력한 도구가 되어줄 거다. 오늘 내용이 여러분의 개발 여정에 작은 보탬이 되었기를 진심으로 바란다. 궁금한 점이 있다면 언제든지 댓글로 물어봐도 좋다. 내가 아는 선에서는 최선을 다해 도와줄 테니까!