Post

Nginx 사용 방법

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

Nginx 사용 방법

Tags
Raspberry Pi, Linux, Nginx

Environment
OS: Raspberry Pi OS (64 bit)

개요

Nginx 사용 방법에 대해 정리한 페이지입니다.

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를 설치합니다.

1
sudo apt install nginx

pic1

Nginx 설치 확인

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

1
nginx -v

pic2

Step 2 - Nginx 설정 파일 생성

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

1
2
cd /etc/nginx
ls -l

pic3

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

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

default 파일 삭제

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

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

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

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

1
2
3
4
cd sites-available

# touch [파일 이름]
sudo touch myApp

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

pic4

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

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

사이트 활성화

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

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

Step 3 - Nginx 설정

nginx.conf 파일 수정

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

1
sudo nano /etc/nginx/nginx.conf

pic5

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

  • 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 로그를 저장할 파일을 지정합니다.

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

pic6

80번 포트 열기

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

1
sudo ufw allow 80

Nginx 설정 테스트 및 재시작

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

1
sudo nginx -t

pic7

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

1
sudo systemctl restart nginx

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

1
sudo systemctl status nginx

pic8

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

Step 4 - 테스트

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

1
pm2 start npm -- start

pic9

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

pic10

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

This post is licensed under CC BY 4.0 by the author.