Ubuntu에서 Nginx 설치·설정 완전 가이드【초보자용】

1. 소개

Ubuntu에서 Nginx를 사용하고 싶어하는 분이 많지만, 처음 접할 경우 어디서부터 시작해야 할지 모를 수도 있습니다. 본 기사에서는 초보자도 이해하기 쉽게 Ubuntu 환경에서 Nginx 설치부터 설정, 관리 방법까지 순서대로 설명합니다.

Nginx란?

Nginx(엔진엑스)는 고성능 HTTP 서버 및 리버스 프록시 서버로 알려져 있습니다. 그 경량성과 유연성 덕분에 전 세계의 웹 서버와 애플리케이션에서 사용됩니다. 특히, 고트래픽을 견딜 수 있는 구조가 특징입니다.

Ubuntu에서 Nginx를 사용할 때의 장점

Ubuntu는 인기가 높은 Linux 배포판이며, Nginx와의 호환성도 좋습니다. 패키지 관리 시스템(APT)을 사용할 수 있어 설치와 업데이트가 용이하고, 안정성 및 보안도 기대할 수 있습니다. 본 기사를 읽으면 다음 내용들을 이해할 수 있게 됩니다:
  • Ubuntu에서 Nginx 설치 방법
  • 기본적인 설정 및 관리 절차
  • 성능 튜닝 및 트러블슈팅
그럼, 실제 작업을 진행해 봅시다.
侍エンジニア塾

2. Ubuntu에서 Nginx 설치 절차

Ubuntu에서 Nginx를 실행하려면 먼저 올바른 방법으로 설치해야 합니다. 여기서는 설치 절차를 이해하기 쉽게 설명합니다.

필요한 패키지 확인

설치를 시작하기 전에 시스템이 최신 상태인지 확인합시다. 아래 명령을 실행하세요.
sudo apt update
sudo apt upgrade

Nginx 설치

Nginx를 설치하려면 다음 명령을 입력합니다.
sudo apt install nginx
이 명령으로 Ubuntu의 APT 저장소에서 Nginx가 자동으로 다운로드되어 설치됩니다.

설치 확인

설치가 올바르게 완료되었는지 확인하려면 아래 명령으로 Nginx 상태를 확인합니다.
sudo systemctl status nginx
출력에 “active (running)”이라고 표시되면 설치가 성공한 것입니다.

방화벽 설정

Ubuntu에는 UFW(Uncomplicated Firewall)가 탑재되어 있으며, 이를 이용해 Nginx 통신을 허용합니다.
sudo ufw allow 'Nginx Full'
sudo ufw enable
이제 Nginx가 80번 포트(HTTP)와 443번 포트(HTTPS)에서 동작할 준비가 되었습니다.

3. Ubuntu에서의 Nginx 기본 설정

Nginx를 설치했을 뿐만으로는 아직 충분하지 않습니다. 다음으로 기본 설정을 수행하여 Nginx를 효과적으로 사용할 수 있도록 합니다.

설정 파일 위치와 기본 구조

Nginx의 주요 설정 파일은 다음 위치에 있습니다:
  • 메인 설정 파일:/etc/nginx/nginx.conf
  • 사이트별 설정 파일:/etc/nginx/sites-available/ 디렉터리 내
기본적으로, sites-available 디렉터리 내에 가상 호스트 설정 파일을 만들고, sites-enabled 디렉터리에 심볼릭 링크를 연결하는 형태로 운영합니다.

가상 호스트 설정

가상 호스트를 설정함으로써, 한 대의 서버에서 여러 도메인 및 프로젝트를 관리할 수 있습니다. 아래 예에서는 example.com을 설정합니다.
sudo nano /etc/nginx/sites-available/example.com
아래 내용을 입력하십시오:
server {
    listen 80;
    server_name example.com www.example.com;

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

    location / {
        try_files $uri $uri/ =404;
    }
}
저장 후, 아래 명령으로 설정을 활성화합니다.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL/TLS 설정

보안 통신을 위해 SSL/TLS 인증서를 설정합니다. Let’s Encrypt를 이용해 무료 인증서를 받을 수 있습니다. 먼저, certbot을 설치합니다:
sudo apt install certbot python3-certbot-nginx
다음으로, 아래 명령을 실행하여 SSL 인증서를 획득하고 자동 설정합니다:
sudo certbot --nginx -d example.com -d www.example.com
인증서의 유효 기간이 만료되지 않도록 자동 갱신 설정도 해두세요.

4. Nginx의 시작 및 관리 방법

Nginx를 설치하고 기본 설정을 수행한 후에는 시작 및 중지, 설정 변경 시 재로드와 같은 관리 작업을 익혀야 합니다. 이 섹션에서는 Nginx 관리에 필요한 기본 명령과 문제 발생 시 대응 방법에 대해 설명합니다.

Nginx 기본 명령

Ubuntu에서는 systemctl 명령을 사용하여 Nginx의 상태를 관리합니다. 아래는 주요 작업에 해당하는 명령입니다:
  1. Nginx 시작
   sudo systemctl start nginx
  1. Nginx 중지
   sudo systemctl stop nginx
  1. Nginx의 재시작 설정을 크게 변경한 경우, 재시작이 필요할 수 있습니다。
   sudo systemctl restart nginx
  1. Nginx의 재로드 설정 파일을 변경한 경우, 재시작 없이 재로드를 수행하여 적용할 수 있습니다。
   sudo systemctl reload nginx
  1. Nginx의 상태 확인 정상적으로 동작하고 있는지 확인하려면 아래를 사용합니다:
   sudo systemctl status nginx

Nginx 자동 시작 설정

Nginx를 자동 시작하도록 하면 시스템 재부팅 후에도 수동으로 시작할 필요가 없어집니다。
  1. 자동 시작 활성화
   sudo systemctl enable nginx
  1. 자동 시작 비활성화 필요에 따라 비활성화하는 경우:
   sudo systemctl disable nginx

로그 확인 및 트러블슈팅

Nginx가 기대대로 동작하지 않을 경우 로그를 확인하여 원인을 파악합니다。
  1. 에러 로그 확인 에러 로그는 아래에 기록됩니다:
   sudo tail -f /var/log/nginx/error.log
  1. 접근 로그 확인 클라이언트의 요청 내용을 확인할 수 있습니다:
   sudo tail -f /var/log/nginx/access.log

일반적인 문제와 해결 방법

  1. Nginx가 시작되지 않음
  • 원인: 설정 파일에 오류가 있을 가능성。
  • 해결 방법: bash sudo nginx -t 이 명령으로 설정 파일의 오류를 확인하고 문제를 수정하십시오。
  1. 변경이 반영되지 않음
  • 원인: 재로드 또는 재시작이 수행되지 않음。
  • 해결 방법: 설정 변경 후, sudo systemctl reload nginx 를 실행합니다。
  1. 포트가 열려 있지 않음
  • 원인: 방화벽 설정이 원인。
  • 해결 방법: bash sudo ufw allow 'Nginx Full'
이러한 절차를 실천함으로써 Nginx의 기본 관리를 확실히 수행할 수 있게 됩니다。

5. Nginx 방화벽 설정 및 보안 강화

보안은 Nginx 운영에서 매우 중요합니다. 이 섹션에서는 Ubuntu의 방화벽(UFW)을 사용한 포트 설정과 Nginx 보안을 강화하는 방법을 설명합니다.

UFW를 사용한 포트 개방

UFW(Uncomplicated Firewall)는 Ubuntu에 기본으로 설치되어 있는 방화벽 도구입니다. Nginx를 올바르게 동작시키려면 80번 포트(HTTP)와 443번 포트(HTTPS)를 개방해야 합니다.
  1. 현재 UFW 상태 확인
   sudo ufw status
  1. Nginx용 규칙 적용 다음 명령으로 필요한 포트를 개방합니다:
   sudo ufw allow 'Nginx Full'
  1. UFW 활성화 방화벽이 비활성화된 경우, 활성화합니다:
   sudo ufw enable

보안 강화를 위한 추가 설정

  1. 불필요한 HTTP 메서드 비활성화 서버 보안을 높이기 위해 불필요한 HTTP 메서드를 비활성화합니다. 다음 설정을 Nginx 설정 파일에 추가합니다:
   if ($request_method !~ ^(GET|POST|HEAD)$) {
       return 444;
   }
  1. 디렉터리 리스트 표시 비활성화 디렉터리 내용이 공개되지 않도록 하기 위해, 다음을 설정 파일에 추가합니다:
   autoindex off;
  1. SSL/TLS 강화 강력한 암호화 방식을 사용하기 위해 SSL 설정에 다음을 추가합니다:
   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_prefer_server_ciphers on;
   ssl_ciphers HIGH:!aNULL:!MD5;

6. Nginx의 성능 튜닝 및 문제 해결

Nginx는 고성능 웹 서버로 널리 사용되고 있지만, 적절한 튜닝을 통해 성능을 더욱 끌어낼 수 있습니다. 이 섹션에서는 Nginx의 성능을 향상시키는 방법과 일반적인 문제에 대한 해결책을 설명합니다.

성능 튜닝

1. 워커 프로세스 설정

Nginx는 멀티프로세스 설계를 채택하고 있어, 적절한 워커 프로세스 수를 설정함으로써 성능을 최적화할 수 있습니다. 설정 파일 /etc/nginx/nginx.conf을 편집합니다:
worker_processes auto;
auto를 지정하면 서버의 CPU 코어 수에 따라 최적의 프로세스 수가 자동으로 설정됩니다。

2. 워커 프로세스당 연결 수 증가

기본적으로 하나의 워커 프로세스당 연결 수가 제한되어 있습니다. 이 값을 증가시키면 고부하 시 처리 능력이 향상됩니다。 설정 파일 내에서 다음 행을 확인하거나 추가하십시오:
worker_connections 1024;

3. HTTP/2 활성화

HTTP/2를 활성화하면 브라우저와의 통신이 효율화되고 웹사이트 로딩 속도가 향상됩니다。 /etc/nginx/sites-available/example.com 파일을 편집하고, listen 지시자를 다음과 같이 변경합니다:
listen 443 ssl http2;
그 후, Nginx를 다시 로드합니다:
sudo systemctl reload nginx

4. 콘텐츠 압축 설정

파일을 압축하여 전송함으로써 통신량을 줄이고 페이지 로딩 속도를 향상시킵니다。 다음을 설정 파일에 추가하거나 활성화합니다:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

5. 캐시 설정

정적 파일의 캐시를 설정하면 동일한 리소스에 대한 요청 수를 줄일 수 있습니다。 다음을 서버 블록에 추가하십시오:
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ {
    expires 30d;
    access_log off;
}

일반적인 문제 해결

1. 고부하 시 요청 처리 지연

  • 원인 워커 프로세스와 연결 수가 부적절하게 설정된 경우가 많습니다。
  • 해결 방법
  • 워커 프로세스와 워커 연결 수를 조정합니다.
  • 필요에 따라 로드 밸런서와 같은 부하 분산을 도입합니다.

2. 오류 코드 403 Forbidden가 표시됨

  • 원인
  • Nginx 설정 파일에서 root 지시자의 경로가 잘못되었습니다.
  • 디렉터리 및 파일 권한이 부적절합니다.
  • 해결 방법
  • 설정 파일 내의 root 지시자를 확인하고 올바른 경로를 지정합니다.
  • 다음 명령으로 권한을 수정합니다: bash sudo chmod -R 755 /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com/html

3. 서버가 타임아웃 발생

  • 원인
  • 클라이언트 요청을 처리하는 시간이 너무 깁니다.
  • 해결 방법 타임아웃 시간을 조정합니다. 설정 파일에 다음을 추가하거나 변경하십시오:
  proxy_read_timeout 300;
  proxy_connect_timeout 300;
  proxy_send_timeout 300;

4. Nginx 재시작 시 오류 발생

  • 원인 설정 파일에 오류가 포함되어 있습니다。
  • 해결 방법 설정을 저장하기 전에 다음 명령으로 구문 검사를 수행합니다:
  sudo nginx -t
이러한 절차를 수행함으로써 Nginx의 성능을 최대한 끌어내고, 흔히 발생하는 문제에 대응할 수 있게 됩니다.

7. 요약 및 다음 단계

이 기사에서는 Ubuntu에서 Nginx를 설치하고 효과적으로 설정·관리하는 방법을 자세히 설명했습니다. 각 섹션에서 배운 내용을 되돌아보고, 다음 단계로 나아가기 위한 조언을 제공합니다.

전체 기사 요약

1. Ubuntu에서 Nginx 설치 절차
  • 필요한 패키지를 준비하고, APT를 사용한 Nginx 설치 방법을 배웠습니다.
  • 방화벽(UFW)을 설정하여 Nginx 통신을 허용했습니다.
2. 기본 설정
  • 설정 파일의 위치와 구조를 이해하고, 가상 호스트와 SSL/TLS 설정 절차를 배웠습니다.
  • 실제 코드 예제를 통해 구체적인 설정 방법을 습득했습니다.
3. 시작 및 관리 방법
  • 시작, 중지, 재시작, 재로드와 같은 기본 작업을 파악했습니다.
  • 문제 해결에 도움이 되는 로그 확인 방법도 배웠습니다.
4. 방화벽 설정 및 보안 강화
  • UFW를 사용한 포트 개방 및 불필요한 HTTP 메서드 비활성화 등 보안 강화 방안을 실천했습니다.
5. 성능 튜닝 및 문제 해결
  • 워커 프로세스 최적화와 HTTP/2 활성화, 캐시 설정 등 구체적인 튜닝 방법을 설명했습니다.
  • 일반적인 문제에 대한 대처법을 배우고, 보다 안정적인 운영을 실현했습니다.

다음 단계

이 기사에서 소개한 기본 설치 및 설정 절차를 배워 Ubuntu에서 Nginx를 운영할 기초를 익혔을 것입니다. 더 나아가 스킬을 심화하기 위해 아래의 다음 단계를 검토해 보세요:
  1. 고급 Nginx 설정 학습
  • 로드 밸런싱 및 리버스 프록시 상세 설정을 배우고, 보다 고급 운영을 목표로 합시다.
  • 모듈(예: Nginx RTMP 모듈)을 활용하여 새로운 사용 사례에 도전해 보세요.
  1. 보안의 추가 강화
  • 웹 애플리케이션 방화벽(WAF) 도입 및 보안 관련 Nginx 모듈 활용을 검토해 보세요.
  1. 자동화 도입
  • Ansible와 Docker를 이용해 Nginx 배포 및 관리를 자동화하는 방법을 배우면 작업 효율을 향상시킬 수 있습니다.
  1. 모니터링 및 최적화 도구 활용
  • Prometheus와 Grafana 등 모니터링 도구를 도입해 Nginx 성능을 실시간으로 시각화합시다.

마지막으로

Nginx는 빠르고 유연성이 높은 웹 서버이며, 올바르게 운영하면 다양한 사용 사례에 대응할 수 있습니다. 이 기사에서 배운 지식을 활용해 실제 프로젝트에 적용해 주세요. 앞으로 추가적인 의문이나 새로운 요구가 생길 때는 Nginx 공식 문서와 커뮤니티 리소스를 참고하시길 권장합니다. 이 기사가 여러분의 웹 서버 운영에 도움이 되길 바랍니다!
侍エンジニア塾