[nginx] apt를 이용한 nginx 설치 및 기초 가이드

업데이트:     Updated:

카테고리:

태그:

✨환경

- Ubuntu 18.04 (kernel: 4.15.0-197-generic)

🎢nginx 설치

1. nginx 설치에 필요한 패키지 설치:
2. nginx 서명 키 import:
3. 키 검증:
    - 출력의 결과는 [fingerprint] 와 같아야 함.
    - 같지 않다면 폐기
 4. nginx 패키지에 대한 apt 리포지토리 설정:
    - 안정 버전
    - 기본 버전
 5. 패키지 우선순위 변경:
 6. nginx 설치:

1. nginx 설치에 필요한 패키지 설치:


$ sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

# gnupg2 - gpg 사용을 위함

2. nginx 서명 키 import:


$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

# "curl https://nginx.org/keys/nginx_signing.key" - 서명 키 출력
# "| gpg --dearmor" - 키를 GPG 파일 형식으로 변환
# "| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null" - ASCII로 압축된 값을 입력으로하여 /usr/share/keyrings/nginx-archive-keyring.gpg 파일을 쓰고 표준 출력은 /dev/null 장치로 버림

Ubuntu에서 /usr/share/keyrings 디렉토리는 apt-key를 저장하는 기본 위치이다.

3. 키 검증:


$ gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

# 3.1 출력결과가 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 와 같으면 무결성을 보장한다.
# 3.2 같지 않다면 해당 키는 무결성에 침해된 것으로 간주하고 폐기해야 한다.

4. nginx 패키지에 대한 apt 리포지토리 설정:


4.1 안정 버전 리포지토리 설정
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
4.2 기본 버전 리포지토리 설정
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

# lsb_release - ubuntu 18.04 의 경우 bionic
# sudo tee /etc/apt/sources.list.d/nginx.list - 표준 출력 및 nginx.list 파일에 앞선 echo "..." 문자열 값을 쓴다.

Ubuntu에서 /etc/apt/sources.list.d 디렉토리는 추가적인 리포지토리를 지정하는 위치이다.

5. 패키지 우선순위 변경:


echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

sources.list 파일에 둘 이상의 소스에 대한 참조가 포함되어 있는 경우, apt-get은 기본적으로 sources-list 파일에서 가장 먼저 나열된 소스에서 다운로드 합니다. 만약 사용자가 임의로 우선순위를 바꾸고 싶은 경우 /etc/apt/preferences.d/ 디렉토리를 활용할 수 있습니다.

6. nginx 설치


sudo apt update
sudo apt install nginx

📌전체 명령어


#!/bin/bash

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

if [[ `gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg | sed -n -e '2p'` = "      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62" ]]
then
  echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
  echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx
  sudo apt update
  sudo apt install nginx
else
  echo "검증되지 않은 키 입니다."
fi

⌨️nginx start, stop, reload

nginx를 시작하려면 /usr/sbin/nginx 실행합니다. nginx가 시작되면 -s 매개변수와 함께 실행 파일을 호출하여 제어할 수 있습니다.

- stop    # 빠른종료
- quit    # 정상적인 종료
- reload  # 구성 파일 reload

nginx -s quit


작업자 프로세스가 현재 요청 처리를 완료할 떄까지 기다리면서 nginx 프로세스를 중지하려면 다음 명령을 실행할 수 있습니다.

nginx -s quit
or
kill -s QUIT [마스터 프로세스 PID]

nginx에는 하나의 마스터 프로세스와 여러 작업자 프로세스가 있습니다. 마스터 프로세스의 주요 목적은 구성을 읽고 평가하며 작업자 프로세스를 유지 관리하는 것입니다. 작업자 프로세스는 요청을 실제로 처리합니다.

nginx -s reload


구성을 다시 로드하려면 다음을 실행합니다.

nginx -s reload

구성 파일의 변경 사항은 reload 하거나 restart 할 때까지 적용되지 않습니다.

마스터 프로세스가 reload 신호를 전달받으면 새 구성 파일의 구문 유효성을 확인하고 변경된 구성을 적용하려고 시도합니다. 마스터 프로세스는 새 작업자 프로세스를 시작하고 이전 작업자 프로세스에 종료를 요청하는 신호를 보냅니다. 이전 작업자 프로세스는 종료 명령을 받고 새 연결 수락을 중지하고 현재 진행중인 요청을 계속 처리합니다. 모두 처리가 완료되면 이전 작업자 프로세스는 종료됩니다.

🧱구성 파일의 구조

기본 구조


  • nginx는 구성 파일에 지정된 지시문에 의해 제어됩니다.
  • 지시문의 단순 지시문과 블록 지시문으로 나뉘는데 단순 지시문은 공백으로 구분된 이름과 매개변수로 구성되며 세미콜론(;)으로 끝납니다. 블록 지시어는 세미콜론 대신 중괄호 {}로 둘러싸여 있습니다.
  • 블록 지시문이 중괄호 안에 다른 지시문을 포함하는 경우 이를 컨텍스트라고 합니다. (예: events, http, server, location)
  • 컨텍스트 외부에 있는 지시문은 기본 컨텍스트에 있는 것으로 간주됩니다.
  • #기호 뒤의 나머지 행은 주석으로 간주됩니다.

최상위 지시어


- events # 일반 연결 처리
- http   # HTTP 트래픽
- mail   # Mail 트래픽
- stream # TCP 및 UDP 트래픽

가상 서버


  • 각 트래픽 처리 컨텍스트에서 하나 이상의 server 블록을 포함 하여 요청 처리를 제어하는 가상 서버를 정의합니다.
  • HTTP 트래픽(http 컨텍스트)의 경우 각 server 지시문은 특정 도메인 또는 IP 주소의 리소스에 대한 요청 처리를 제어합니다. server 컨텍스트에 있는 하나 이상의 location 컨텍스트는 특정 URI을 처리하는 방법을 정의합니다.

지시문 상속


  • 일반적으로 하위 컨텍스트는 상위 수준에 포함된 지시문 설정을 상속합니다. 일부 지시문은 여러 컨텍스트에 나타날 수 있으며, 이 경우 하위 컨텍스트에서 상위 컨텍스트에 정의된 지시문을 재정의할 수 있습니다.

📌출처

NGINX Docs


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

Nginx 카테고리 내 다른 글 보러가기

댓글남기기