su-tudy 님의 블로그

#5 웹 서버 구축 — Nginx 설치 & Virtual Hosting 본문

리눅스/Linux 실습

#5 웹 서버 구축 — Nginx 설치 & Virtual Hosting

su-tudy 2024. 11. 24. 14:33

 

📌 실제 서비스처럼 웹 환경 구성하기

 

웹 서버는 클라이언트(웹 브라우저)가 HTTP 요청을 보내면 HTML 페이지나 파일을 응답해 주는 프로그램이다. 내 PC의 자원을 외부와 공유하는 것으로, 서버 운영의 핵심 역할을 담당한다.

하나의 서버에서 여러 서비스를 운영하려면 Virtual Hosting이 필요하다. 포트 번호나 도메인을 다르게 설정하나의 서버에서 여러 개의 독립된 웹사이트를 제공할 수 있다.

 

nginx 설치
서비스 시작 & 자동화
기본 웹루트 변경
Virtual Hosting 설정
포트별 접속 확인

 


📌 미리 알아두면 좋은 개념들

 

패키지 설치 방법 비교

직접 빌드 패키지 매니저 (yum)   실습에서 사용 
소스코드를 직접 받아 컴파일하는 방식. 유연하지만 비개발자에게 어렵고 의존성 문제가 생기기 쉽다. 미리 빌드된 실행 파일을 설치. 의존성 자동 해결, 버전 관리가 쉬워 가장 많이 쓰인다. rpm의 의존성 문제를 해결한 버전이다.

 

❑ 주요 개념 정리

  • yum repository : 수많은 패키지가 업로드된 거대 서버. 공식 repo 외에 사설 repo를 등록해서 더 많은 패키지를 설치할 수 있다.
  • EPEL : Extra Pakages for Enterprise Linux. 기본 저장소에 없는 추가 패키지를 제공하는 repo. Nginx 최신 버전 설치에 활용된다.
  • 웹루트 폴더 : 웹 서버의 시작 지점 디렉토리. 브라우저가 접속했을 때 보여줄 파일들이 위치하는 곳이다.
  • Virtual Hosting : 하나의 서버에서 포트 번호 또는 도메인을 다르게 설정해 여러 개의 웹사이트를 동시에 운영하는 것.

 


📌 진행한 실습 과정 정리

 

❑ Nginx 최신 버전 설치

기본 yum 저장소는 최신 버전을 제공하지 않으므로 EPEL과 nginx 공식 repo를 추가한 후 설치한다.

# EPEL 저장소 추가
sudo yum install -y epel-release

# 설치된 패키지 업데이트
sudo yum update -y

# nginx 공식 repo 파일 생성 (최신 버전 설치를 위해)
sudo vim /etc/yum.repos.d/nginx.repo
# nginx.repo 파일에 아래 내용 추가
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0

nginx.repo 파일에 추가한 내용

# 저장 후 nginx 설치
sudo yum install -y nginx

# 버전 확인
nginx -v

# 상태 확인 (inactive(dead) = 설치만 된 상태)
sudo systemctl status nginx

# nginx 시작
sudo systemctl start nginx

# 부팅 시 자동 시작 설정
sudo systemctl enable nginx

# active(runnig) 확인
sudo systemctl status nginx
💡 start지금 당장 켜는 것, enable재부팅 후에도 자동으로 켜지게 하는 것이다. 서버 운영 시 둘 다 설정해 두는 게 기본이다.

nginx 버전 확인
상태 확인 : 꺼져있는 상태 (설치만 된 상태)
상태 확인 : 켜져있는 상태

 

❑ nginx 프로세스 및 포트 확인

포트포워딩 설정 시 게스트 포트 번호를 입력해야 하므로, nginx가 실제로 어떤 포트에서 실행 중인지 먼저 확인한다. 

# nginx 프로세스 번호(PID) 확인
sudo systemctl status nginx

# 관련 프로세스 정보 확인
sudo ps-ef | fgrep (프로세스_번호)

# 사용 중인 포트 확인
sudo netstat -nlp | fgrep nginx

프로세스 번호 확인

💡 출력된 프로세스 번호 중 부모 프로세스 번호(Main PID)만 기억하면 된다. 자식 프로세스는 부모가 관리하므로 부모 PID로 관련 정보를 모두 조회할 수 있다.

관련 프로세스 정보 확인
포트 번호 확인

💡 포트를 별도로 설정하지 않았다면 웹서버(nginx)는 기본적으로 80번, SSH(sshd)22번 포트를 사용한다.

 

❑ 포트포워딩으로 웹 접속 확인

  1. VirtualBox → 포트포워딩 → 규칙 추가 (호스트 포트 : 임의 설정 / 게스트 포트 : 80)
  2. 웹 브라우저에서 127.0.0.1:8080 접속 Nginx 기본 페이지 확인

포트포워딩
웹 브라우저 접속 성공

💡 접속이 안 된다면 방화벽이 켜져 있거나 SELinux가 활성화된 상태일 수 있다. 4편에서 다뤘던 방화벽 해제와 SELinux 비활성화 설정을 먼저 확인해 보자.

 

❑ 기본 웹루트 폴더 경로 변경

nginx 설정은 /etc/nginx/conf.d/ 아래에 .conf 파일로 관리한다. 기본 설정 파일인 default.conf를 수정해 웹루트 경로를 원하는 곳으로 바꿀 수 있다.

# nginx 설정 파일에서 include 경로 확인
sudo vim /etc/nginx/nginx.conf
:q 로 나가기

# 확인한 conf.d 디렉토리로 이동
cd /etc/nginx/conf.d
ls

# 기본 설정 파일 열기
sudo vim default.conf

# location 블록 안의 root 경로를 원하는 경로로 수정
location / {
    root   /web/site0/public;    # 원하는 경로로 변경
    index  index.html index.htm;
}

nginx 설정 파일 구조 확인
root 경로 변경

 

❑ Virtual Hosting 설정 파일 생성

포트별로 다른 웹사이트를 제공하는 Virtual Hosting 설정 파일을 만든다.

# vhost 설정 파일 생성
sudo vim /etc/nginx/conf.d/vhost.conf

# 사이트별 포트와 경로 설정
server {
    listen [포트번호];
    server_name _;
    
    location / {
        root [웹루트_경로];
    }
}

포트별 Vittual Hosting 설정 예시

포트 → 웹루트 매핑 구조
     :80         →   /web/site0/public (기본)
   :8011      →   /web/site1/public
   :8012      →   /web/site2/public
💡 server_name _  →  _는 모든 도메인 허용. 특정 도메인만 받으려면 example.com으로 교체
💡 location /  →  /는 모든 경로 처리. 특정 경로만 처리하려면 /api, /blog 등으로 교체.
# 설정 파일 수정 후 nginx 재시작 (반드시 재시작해야 적용)
sudo systemctl restart nginx

 

❑ 웹루트 폴더 생성 및 소유권 설정

# 루트(/)로 이동 후 설정 한 경로 폴더 생성
cd /
sudo mkdir -p /web/site0/public
sudo mkdir -p /web/site1/public
sudo mkdir -p /web/site2/public

# 소유권 확인
ls -al /web

# 내 계정으로 소유권 변경 (편하게 작업하기 위해)
sudo chown 계정이름:계정이름 -R /web

# 확인용 index 파일 생성
echo "site0" > /web/site0/public/index.html
echo "site1" > /web/site1/public/index.html
echo "site2" > /web/site2/public/index.html

지정한 경로의 폴더 생성
소유권 변경

 

❑ 포트포워딩 추가 및 접속 확인

  1. VirtualBox → 포트포워딩 → 규칙 추가 (8011, 8012 포트도 각각 게스트 포트와 동일하게 설정)
  2. 브라우저에서 127.0.0.1:8011, 127.0.0.1:8012 접속
  3. 각각 다른 내용이 출력되면 Virtual Hosting 성공

포트포워딩
012

 


⚠️ 오류 / 주의

 

🚨 오류 — Systemctl restart 실패 시
설정 파일 문법이 틀리면 nginx 재시작이 실패한다. sudo nginx -t로 설정 파일 문법을 먼저 검사할 수 있다. 오류 메시지에 몇 번째 줄인 지 나오므로 해당 줄을 수정하면 된다.

 


📌 요약

 

✔️ EPEL과 nginx 공식 repo를 추가해 최신 버전 nginx 설치

✔️ nginx 시작 & 자동 시작 설정

✔️ default.conf 에서 기본 웹루트 경로 변경

✔️ vhost.conf를 생성해 포트별로 다른 웹사이트를 제공하는 Virtual Hosting 구현

✔️ 설정 파일 수정 후엔 항상 문법 검사 후 재시작

 


다음 편으로 이동  🔜  #6 데이터베이스 구축 — MariaDB & SQLYog