본문 바로가기

Study

[NGINX HTTP SERVER] 1장 엔진엑스 설치

반응형

1장 엔진엑스 설치

1장에서 다루는 내용은 다음과 같다.

  • 엔진엑스 실행 파일을 컴파일하는데 필요한 사전 구성 요소의 다운로드와 설치
  • 엔진엑스 소스코드 다운로드
  • 엔진엑스 컴파일 옵션 구성
  • init 스크립트로 애플리케이션 제어
  • 시작할 때 자동으로 엔진엑스를 구동하도록 시스템 구성
  • 엔진엑스 플러스 플랫폼이 제공하는 기능 개요 확인

 

사전 구성 요소 설치

  • GCC: 엔진엑스는 C로 작성된 프로그램이기 때문에 GCC 같은 컴파일러 도구를 먼저 OS에 설치해야한다.
  • PCRE 라이브러리: 엔진엑스를 컴파일하는데 필요하다. pcre와 pcre-devel라는 두 가지 패키지를 설치해야 한다.
  • zlib 라이브러리: 엔진엑스의 다양한 모듈에서 gzip 압축을 하는 데 필요하다. zlib와 zlib-devel이 필요하다.
  • OpenSSL: 엔진엑스가 안전한 연결을 통해 웹 페이지를 제공하는 데 사용된다. openssl과 openssl-devel을 설치한다.

 

엔진엑스 다운로드

웹 사이트와 자료

특징

  • 정적 파일과 색인 파일 제공, 자동 색인, 열린 파일 서술자 캐시, 캐시를 통한 역프록시 가속화, 부하 분산과 장애 허용
  • FastCGI, uwsgi, SCSI, 멤캐시디 서버의 캐싱을 통한 가속화 지원, 이의 부하 분산과 장애 허용, 모듈 구조. gzip 압축, 바이트 범위, 분할 응답, XSLT, SSI, 이미지 변환 필터를 포함한 필터, 프록시나 FastCGI/uwsgi/SCGI 서버로 취급될 경우 단일 페이지 안의 다중 SSI 병렬 처리
  • SSL과 TLS SNI 지원
  • 가중치와 종속성 기반 우선순위 지정 기능을 제공하는 HTTP/2 지원

다운로드와 압축 해제

# 다운로드
wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 압축 해제
tar zxf nginx-1.16.1.tar.gz

 

구성 옵션

소스코드로 애플리케이션을 구축하는 데는 보통 구성, 컴파일, 설치의 세 단계를 거친다. 

# 구성
./configure

# 컴파일
make

# 설치
make install

구성 단계에서는 프로그램이 구축된 후에는 변경할 수 없는 다수의 옵션을 선택할 수 있다.

# ex)
./configure --prefix=/home1/irteam/apps/nginx --with-openssl=openssl-1.1.1n --with-http_ssl_module --with-http_realip_module --with-http_v2_module
경로 지정 --prefix=... 엔진엑스가 설치될 기준 폴더
OpenSSL 옵션 --with-openssl=... OpenSSL 라이브러리 소스의 경로를 지정
기본 비활성 모듈 --with-http_ssl_module HTTPS로 페이지를 제공하는 데 쓰이는 SSL 모듈 활성화
--with-http_realip_module 실제 IP 주소를 요청의 헤더 데이터에서 읽는 Real IP 모듈 활성화
-- with-http_v2_module HTTP/2 지원 모듈 활성화

 

엔진엑스 서비스 제어

데몬과 서비스

컴퓨터 애플리케이션에는 두 가지 유형이 있다. 즉각적인 사용자의 입력을 요구하면서 전면에서 동작하는 애플리케이션이 있는가 하면, 배후에서 동작하는 애 플리케이션이 있다. 엔진엑스는 후자에 해당하며, 이런 애플리케이션을 흔히 데몬(daemon)이라고 부른다.

엔진엑스 명령행 스위치

엔진엑스 명령행 인자를 지정해서 배후에서 동작하는 프로세스를 제어하는 다양한 동작을 수행할 수 있다.

명령의 전체 목록을 얻으려면 다음 명령으로 도움 화면을 요청할 수 있다.

명령 설명
nginx -h 도움화면 요청
nginx version: nginx/1.20.1
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /home/apps/nginx/)
  -e filename   : set error log file (default: logs/error.log)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

 

데몬 시작과 종료

엔진엑스는 아무런 스위치 없이 실행 가능하다.

명령 설명
nginx 엔진엑스 실행

데몬이 실행된 후에 데몬을 멈추거나, 재실행하거나, 단순히 구성을 다시 읽도록 제어할 수 있다. 제어는 nginx -s 명령을 사용해서 프로세스에 신호를 보내는 식으로 이뤄진다.

명령 설명
nginx -s stop 데몬을 강제로 종료한다
nginx -s quit 안전하게 데몬을 종료한다
nginx -s reopen 로그 파일을 다시 연다
nginx -s reload 구성 파일다시 읽는다

구성파일에 문제가 있다면 어떤 경우에는 엔진엑스를 중지한느 것조차 못할 수 있다.

루트 권한으로 kill이나 killall을 사용하는 방법이 있다.

killall nginx

 

구성 테스트

명령 설명
nginx -t 엔진엑스 구성의 구문, 유효성, 무결성확인한다.

-t 스위치는 테스트를 의미한다. 구성 파일을 해석해서 유효한지 여부를 알려준다.

 

서버를 운영 중일 때 구성파일을 조작하는 건 위험한 일이니 가장 좋은 방법은 새 구성을 별도 임시 파일에 저장하고, 이파일을 테스트하는 것이다.

명령 설명
nginx -t -c /home/test/test.conf /home/test/test.conf를 해석해서 유효한 엔진엑스 구성 파일인지 확인한다.

새 파일이 유효한지 확인한 후에는 현재의 구성 파일을 교체하고 서버 구성을 다시 로드(nginx -s reload)한다.

기타 스위치

많은 상황에서 유용하게 쓸 수 있는 스위치는 -V다.

명령 설명
nginx -V 엔진엑스의 빌드 버전을 알려줄 뿐 아니라 더 중요한 구성 단계에서 사용한 인자를 재확인할 수  있다.
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
built with OpenSSL 1.1.1o  3 May 2022
TLS SNI support enabled
configure arguments: --prefix=/home/apps/nginx --with-openssl=openssl-1.1.1o --with-http_ssl_module --with-http_realip_module --with-http_v2_module
명령 설명
nginx -g "timer_resolution 200ms" 구성파일에 포함되지 않은 추가 구성 지시어를 지정할 수 있다.

 

시스템 서비스 추가

시스템 V 스크립트

리눅스 기반 운영체제 대부분은 시스템 V 유닉스 기반 운영체제에서 계승된 방식으로 동작하는 init라고 부르는 데몬에 의해 관리된다.

이 데몬은 컴퓨터의 상태를 나타내는 런레벨(runlevel)에 따라 움직인다.

정리하자면 센토OS를 사용하는 컴퓨터를 켤 때에는 런레벨 0에서 런레벨 3으로 전이하는 작업이 이뤄진다. 이 전이 과정에는 런레벨 3에 실행되기로 계획된 서비스가 모두 실행된다. 

 

이제 특정 런레벨에서 서비스를 실행하게 만드는 방법을 알아본다.

 

/etc로 들어가보면 런레벨마다 실행될 스크립트과 보관된 디렉터리가 있다.

이 디렉터리들에 들어가보면 실제 파일 대신 init.d 디렉터리에 저장된 스크립트를 참조하는 심볼릭 링크가 보인다. 서비스 기동 스크립트는 사실 init.d에 있고 도구를 사용해서 런레벨에 해당하는 디렉터리에 링크를 생성한다.

init 스크립트

init 스크립트는 서비스 기동 스크립트 또는 sysv 스크립트라고도 부르는 특정 표준을 따르는 셸 스크립트다. 컴퓨터가 실행될 때 이서비스가 시스템 런레벨에 기동되기로 돼 있다면 init 데몬이 start 인자와 함께 이 스크립트를 실행한다(수동으로도 이 스크립트를 셸에서 실행 가능)

/etc/init.d/httpd start

앞에서 설명한 엔진엑스 데몬을 기동하고 중단할 뿐 아니라 재시작하고 구성을 다시 로드하는 셸 스크립트를 만들려고 한다. 

먼저 nginx라는 이름의 파일을 만들고 /etc/init.d/ 디렉터리에 저장한다. 방금 만든 파일에 스크립트 코드를 넣는다(https://github.com/AcornPublishing/nginx-http-server3e/blob/main/2322OS_Code/Nginx%20init%20script%20for%20RedHat-based%20distributions.txt)

 

스크립트 설치

이 스크립트를 실행 가능하게 만들어 서비스를 활성화하는 작업이 남아 있다. 스크립트에 실행 권한을 주려면 chmod 명령을 사용한다.

chmod +x /etc/init.d/nginx

이제 /etc/init.d/nginx start 명령을 사용해서 이 서비스를 실행할 수 있고, 중단하고 재시작하고 서비스를 다시 로드할 수도 있다.

 

마지막으로 적절한 런레벨에서 자동으로 스크립트가 실행되게 만드는 작업이 남았다.

 

레드햇 기반 배포본

chkconfig nginx on

작업이 끝나면 서비스의 런레벨을 확인할 수 있다.

chkconfig --list nginx
Nginx  0:off  1:off  2:on  3:off  4:on  5:on  6:off

 

엔진엑스 플러스

2013년 중반부터 엔진엑스 프로젝틀르 주도하는 주식회사 엔진엑스에서는 엔진엑스 플러스라는 유료 구독 서비스도 제공하고 있다.

 

 

Reference

 

 

 

 

반응형