Nginx 웹 서버 설치 및 기초적인 가상 호스트 설정법

인터넷상에 나만의 웹사이트나 블로그, 혹은 개발한 웹 애플리케이션을 공개하기 위해서는 사용자의 요청을 받아 웹 페이지를 전송해 주는 ‘웹 서버(Web Server)’가 필요합니다. 과거에는 Apache가 시장을 지배했지만, 최근 글로벌 IT 기업과 고성능 서비스들이 가장 선호하는 웹 서버는 바로 Nginx(엔진엑스)입니다.

Nginx는 가볍고 대량의 동시 접속 처리에 특화된 이벤트 기반(Event-Driven) 구조를 가지고 있어 서버 자원을 효율적으로 사용합니다. 본 가이드에서는 리눅스 Ubuntu 환경을 기준으로 Nginx를 안전하게 설치하고, 하나의 서버에서 여러 개의 도메인을 독립적으로 운영할 수 있게 해주는 핵심 기술인 ‘가상 호스트(Virtual Host, Nginx에서는 Server Block이라 부름)’ 설정 방법까지 상세히 정리합니다.

1. Ubuntu 서버에 Nginx 웹 서버 설치하기

우분투 운영체제는 자체적인 패키지 저장소를 통해 Nginx를 기본적으로 제공하므로, 아주 간단한 명령어로 설치를 진행할 수 있습니다. 시스템 관리자 권한(sudo)을 사용하여 안전하게 설치를 진행합니다.

패키지 리스트 업데이트 및 설치

설치 전 항상 패키지 매니저의 최신 지도를 가져온 뒤 설치를 시작해야 꼬임 현상이 없습니다.

Bash

sudo apt update
sudo apt install nginx -y

방화벽(UFW) 설정 열어주기

이전 초기 설정 단계에서 방화벽을 켜두었다면, 외부 사용자가 내 웹 서버(80번 포트)에 접속할 수 있도록 Nginx 규칙을 방화벽에 허용해 주어야 합니다.

Bash

sudo ufw allow 'Nginx HTTP'

설정이 완료되었다면, 인터넷 브라우저 창을 열고 주소창에 내 서버의 IP 주소(예: http://내서버IP)를 입력해 봅니다. 화면에 “Welcome to nginx!”라는 문구가 담긴 안내 페이지가 나타난다면 웹 서버가 성공적으로 구동된 것입니다.

2. Nginx 가상 호스트(Server Block)의 개념

대개 서버 한 대를 구매하면 하나의 웹사이트만 돌릴 수 있다고 생각하기 쉽습니다. 하지만 비용을 아끼고 효율을 극대화하기 위해, 하나의 서버 컴퓨터 안에서 example1.comexample2.com이라는 두 개 이상의 서로 다른 도메인을 각각 분리된 웹사이트로 서비스해야 할 때가 있습니다.

이때 사용하는 기술이 바로 가상 호스트입니다. Nginx에서는 이를 서버 블록(Server Block)이라고 부릅니다. Nginx는 사용자가 브라우저에 입력한 도메인 주소를 실시간으로 인식하여, 서버 내부의 서로 다른 폴더(루트 디렉터리)로 연결해 주는 스마트한 중개자 역할을 수행합니다.

3. 실무 가상 호스트 설정 4단계 절차

이제 실제로 my-website.com이라는 가상의 도메인을 내 서버에 연결하고 독립적인 폴더를 지정하는 과정을 단계별로 진행해 보겠습니다.

1단계: 웹사이트 파일이 위치할 디렉터리 생성

각 웹사이트의 HTML, 이미지 파일 등이 저장될 공간을 /var/www/ 아래에 독립적으로 만들어 줍니다. 폴더 소유권도 현재 로그인한 일반 사용자 계정으로 변경해 줍니다.

Bash

sudo mkdir -p /var/www/my-website/html
sudo chown -R $USER:$USER /var/www/my-website/html
sudo chmod -R 755 /var/www/my-website

테스트를 위해 새로 만든 폴더 안에 간단한 메인 페이지 파일(index.html)을 하나 생성해 둡니다.

Bash

nano /var/www/my-website/html/index.html

파일 안에 <h1>My Website Success!</h1>라고 간단히 적은 후 저장하고 빠져나옵니다.

2단계: 가상 호스트(서버 블록) 설정 파일 작성

Nginx는 설정 파일을 sites-available(사용 가능한 설정) 폴더에 만들고, 이를 sites-enabled(실제 활성화된 설정) 폴더로 링크를 걸어 구동하는 독특하고 안전한 구조를 지니고 있습니다.

새로운 설정 파일을 생성합니다. 폴더명이나 도메인명과 똑같이 파일 이름을 지어주는 것이 관리하기 편합니다.

Bash

sudo nano /etc/nginx/sites-available/my-website

파일이 열리면 아래의 핵심 가상 호스트 설정 양식을 복사해서 그대로 붙여넣습니다.

Plaintext

server {
    listen 80;
    listen [::]:80;

    root /var/www/my-website/html;
    index index.html index.htm;

    server_name my-website.com www.my-website.com;

    location / {
        try_files $uri $uri/ =404;
    }
}
  • listen 80 : 기본 웹 서비스 포트인 80번 포트로 들어오는 요청을 감지합니다.
  • root : 이 도메인으로 접속했을 때 보여줄 실제 서버 내부의 파일 경로를 지정합니다. 1단계에서 만든 폴더 경로를 정확히 적어줍니다.
  • server_name : 이 서버 블록이 응답할 도메인 주소를 명시합니다. 사용자가 이 주소로 들어올 때만 이 설정을 태우겠다는 의미입니다.

3단계: 가상 호스트 파일 활성화(심볼릭 링크)

설정 작성이 끝났다면, 이 파일이 실제 Nginx에 의해 로드될 수 있도록 sites-enabled 폴더로 연결 다리(심볼릭 링크)를 놓아주어야 합니다.

Bash

sudo ln -s /etc/nginx/sites-available/my-website /etc/nginx/sites-enabled/

4단계: 구문 오류 검사 및 Nginx 재시작

설정 파일에 오타가 있거나 괄호가 안 맞으면 Nginx를 재시작했을 때 웹 서버 전체가 죽어버릴 수 있습니다. Nginx는 다행히 문법에 문제가 없는지 사전에 테스트해 주는 강력한 명령어를 제공합니다.

Bash

sudo nginx -t

명령어 실행 결과 화면에 syntax is oktest is successful이라는 메시지가 출력된다면 안심하고 웹 서버를 재시작하여 설정을 적용해도 좋습니다.

Bash

sudo systemctl restart nginx

4. 가상 호스트 설정 시 주의해야 할 트러블슈팅

  • 도메인 구매 및 DNS 설정 확인: 가상 호스트를 완벽하게 세팅했더라도, 가비아나 후이즈 같은 도메인 대행업체에서 도메인을 구매한 뒤 해당 도메인의 A 레코드(IP 주소)를 내 리눅스 서버의 공인 IP로 매핑해 두지 않았다면 사이트에 접속되지 않습니다.
  • 기본 설정(Default)과의 충돌: 간혹 Nginx의 기본 샘플 설정 파일(default)이 내 도메인 요청을 가로채 가는 경우가 있습니다. 내가 만든 페이지가 안 뜨고 자꾸 Nginx 기본 환영 페이지가 나온다면 /etc/nginx/sites-enabled/default 파일을 삭제한 뒤 Nginx를 재시작해 보시기 바랍니다.

결론: 확장성 높은 인프라의 첫 매듭

Nginx 웹 서버 설치와 가상 호스트 설정은 모던 웹 인프라 구축의 가장 뼈대가 되는 작업입니다. 이 설정을 활용하면 서버 한 대의 비용으로 수십 개의 토이 프로젝트나 랜딩 페이지를 독립된 도메인으로 마음껏 띄울 수 있는 경제적인 구조를 갖추게 됩니다.

초기 환경 조성을 마쳤다면, 다음 단계로는 보안을 위해 웹 사이트 통신을 암호화해 주는 HTTPS 인증서(Let’s Encrypt SSL)를 연동하여 진정한 상용 서비스 수준의 안정적인 웹 서비스를 완성해 보시기 바랍니다.

댓글 남기기