Nginx 사용 방법

Nginx 사용 방법

Nginx 사용 방법에 대해 설명하는 페이지입니다.

Environment

  • OS: Raspberry Pi OS (64 bit)

목차

Nginx란?

Nginx(엔진엑스)란 러시아에서 개발된 오픈 소스 웹 서버 프로그램입니다. Apache HTTP Server 같은 웹 서버와 비교하면 가볍고, 동시접속 처리에 특화되어 있다는 장점이 있습니다. Nginx는 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용됩니다. Nginx를 사용할 때의 장점은 다음과 같습니다.

리버스 프록시 (Reverse Proxy)

리버스 프록시는 컴퓨터 네트워크에서 클라이언트를 대신해서 한 대 이상의 서버로부터 자원을 추출하는 프록시 서버의 일종입니다. 쉡게 말해 클라이언트의 요청을 대신 받아 내부 서버로 전달해주는 것입니다. Nginx를 이용하여 리버스 프록시를 사용하면 “클라이언트 –> Nginx –> 웹 서버”로 사용자의 요청을 Nginx가 대신 웹 서버로 전달해주기 때문에, 해당 서버 주소를 클라이언트로부터 숨기고 프록시 서버 주소만을 노출하여 보안을 강화할 수 있습니다.

로드 밸런싱 (Load Balancing)

로드 밸런싱이란 컴퓨터 네트워크 기술 중 하나로, 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법을 말합니다. 이를 통해 가용성 및 응답 시간을 최적화할 수 있습니다. Nginx를 사용하면 여러 대의 서버가 연결되었을 때 한 서버에 부하가 걸리지 않도록 균등하게 요청을 분배할 수 있습니다.

SSL 지원

SSL (Secure Socket Layer)는 전송 계층에서 보안을 제공하는 프로토콜입니다. HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청이며, Nginx을 사용하면 SSL 인증서를 적용할 수 있으므로 HTTPS를 적용할 수 있습니다.

가상 호스팅

하나의 웹 서버에서 여러 도메인 또는 서브 도메인을 호스팅하는 가상 호스팅을 지원합니다.

Step 1 - Nginx 설치

Nginx 설치

다음 명령어를 입력하여 Nginx를 설치합니다.

sudo apt install nginx

nginx1

Nginx 설치 확인

설치가 완료되었는지 확인하기 위해 다음 명령어를 입력하여 Nginx 버전을 확인합니다.

nginx -v

nginx2

Step 2 - Nginx 설정 파일 생성

Nginx를 설치하고 나면 다음 명령어를 입력하여 Nginx를 디렉토리 구조를 확인합니다.

cd /etc/nginx
ls -l

nginx3

주요 파일 및 디렉토리에 대해 설명하면 다음과 같습니다.

  • sites-available
    비활성화된 사이트들의 설정 파일들이 위치한다.
  • sites-enabled
    활성화된 사이트들의 설정 파일들이 위치한다. sites-available에 존재하는 설정 파일들 중에서 사용하는 설정 파일만 link하여 사용합니다.
  • nginx.conf
    접속자 수, 프로세스 수 등 performance에 관한 설정을 하는 파일입니다. sites-enabled에 존재하는 파일들을 불러옵니다.

default 파일 삭제

먼저 다음 명령어를 입력하여 /etc/nginx/sites-available 디렉토리와 /etc/nginx/sites-enabled 디렉토리에 있는 default 파일을 삭제합니다.

sudo rm -rf /etc/nginx/sites-available/default
sudo rm -rf /etc/nginx/sites-enabled/default

리버스 프록시 서버 블록 설정

다음 명령어를 입력하여 sites-available 디렉토리로 이동하여 설정 파일 생성하고 편집합니다. 파일 이름은 원하는대로 지정하면 됩니다.

cd sites-available

# touch [파일 이름]
sudo touch myApp

파일을 생성하면 다음 예제와 같이 서버 블록을 설정합니다. 80번 포트에서 HTTP 요청을 수신하면 로컬 서버의 3000번 포트로 요청을 전달하게 됩니다.

nginx4

주요 키워드에 설명하면 다음과 같습니다.

  • server
    하나의 웹 사이트를 선언하는데 사용합니다. 여러 개의 server 블록을 선언하면 하나의 서버에서 여러 개의 서로 다른 웹 사이트를 서빙할 수 있습니다.
  • location
    server 블록 안에서 특정 웹 사이트의 url을 처리하는데 사용합니다.

사이트 활성화

다음 명령어를 입력하여 심볼릭 링크를 생성합니다.

sudo ln -s /etc/nginx/sites-available/myApp /etc/nginx/sites-enabled/

Step 3 - Nginx 설정

nginx.conf 파일 수정

nginx에 대한 설정을 하기 위해선 nginx.conf 파일을 수정해야 합니다. nginx.conf 파일은 Nginx가 동작해야 할 방식을 설정 값을 통해 지정합니다. 다음 명령어를 입력하여 설정 파일을 엽니다.

sudo nano /etc/nginx/nginx.conf

nginx5

파일 내용에 대해 설명하자면 다음과 같습니다.

  • core
    설정 파일 최상단에 위치하며 Nginx의 프로세스 관리, 보안과 같은 기본적인 동작 방식을 정의합니다.
    • user
      작업자 프로세스(worker_process)가 어떤 user 또는 groupd으로 실행되는지에 대한 설정입니다. 보안을 위해 root를 사용하지 않습니다.
    • worker_process
      작업자 프로세스(worker_process)의 수를 정의합니다. 1이면 모든 요청을 하나의 프로세스로 실행하겠다는 의미입니다. 일반적으로 CPU 코어 수만큼 할당하는 것이 좋습니다. auto를 입력하여 자동 감지를 지정할 수 있습니다.
    • pid
      Nginx의 마스터 프로세스 ID 정보가 저장됩니다.
    • error_log
      로그 레벨을 설정하는 지시어. 로그 레벨은 [debug | info | notice | warn | error | crit ] 같은 종류가 있습니다.
  • events
    Nginx의 특징인 비동기 이벤트 처리 방식에 대한 옵션을 정의합니다.
    • worker_connections
      하나의 작업자 프로세스가 처리할 수 있는 커넥션의 수를 의미합니다. 작업자 프로세스가 4개이고, worker_connections가 768로 지정되어 있다면, 총 4 x 786 = 3072개의 커넥션(= 최대 접속자 수)이 동시 처리될 수 있습니다.
  • http
    • include
      include 지시어는 특정 파일을 포함하는 기능을 수행합니다. include 지시어가 있는 위치에 해당 파일 내용이 삽입됩니다.
    • default_type
      이 웹 서버의 기본 Content-Type을 설정합니다. octet-stream은 바이너리 형태의 타입을 의미합니다.
    • keepalive_timeout
      클라이언트 접속 유지 시간으로 몇 초 후에 클라이언트 접속을 끊을지 설정합니다.
    • access_log
      access 로그를 저장할 파일을 지정합니다.

위에서 활성화한 사이트 설정 파일을 가져오기 위해 다음과 같이 작성합니다.

nginx6

80번 포트 열기

다음과 같은 명령어를 입력하여 80번 포트에 대한 접속을 허용합니다.

sudo ufw allow 80

Nginx 설정 테스트 및 재시작

다음 명령어를 입력하여 설정 파일에 대한 문법을 검사합니다.

sudo nginx -t

nginx7

문법 검사가 완료되면 다음 명령어를 입력하여 Nginx를 재시작합니다.

sudo systemctl restart nginx

서비스 상태를 확인합니다.

sudo systemctl status nginx

nginx8

Nginx 설정이 완료되었음을 확인할 수 있습니다.

Step 4 - 테스트

Nginx 설정이 성공적으로 이루어졌는지 확인해보겠습니다. 먼저 서비스를 실행하겠습니다. 해당 서비스는 3000번 포트를 사용합니다.

pm2 start npm -- start

nginx9

서비스가 실행되면 웹 사이트에 접속합니다.

nginx10

위와 같이 포트 번호를 명시하지 않아도(= 80번 포트 사용) 서비스에 접속할 수 있음을 확인할 수 있습니다.

Comments