Nginx 설치 - Docker, CentOS8

날씨는 맑음·2022년 12월 21일
0

Nginx

목록 보기
1/3
post-thumbnail

1. Nginx?

Nginx는 가벼움과 높은 성능을 목표로하는 웹 서버이다. Nginx 외의 다른 웹서버로는 아파치, 구글 웹 서버, 마이크로소프트 IIS가 있다.

2. 설치

설치는 어떤곳에 해도 상관없지만 추후 리버스 프록시LB를 테스트 편하게 하기 위해서 Docker에 CentOS 컨테이너를 동작시키고 해당 컨테이너에 Nginx를 설치해 보겠다.

2.1.Docker에 CentOS 컨테이너 동작

2.1.1. 컨테이너 실행

docker run -it -d \
--cap-add=SYS_ADMIN --privileged \
-p 80:80 -p 443:443 \
--name nginx \
centos:8 \
/sbin/init
  • --cap-add=SYS_ADMIN --privileged : CentOS에서 systemctl 명령어를 동작시키기 위한 옵션
  • -p 80:80 -p 443:443 : http와 https 프로토콜 포트 개방
  • --name nginx : 컨테이너 명
  • centos:8 : 이미지 명
  • /sbin/init : 초기화 진행

2.1.2. 컨테이너 확인

아래 명령으로 컨테이너가 정상적으로 동작하고 있는지 확인한다.

docker ps

2.1.3. 컨테이너 접속

동작시킨 컨테이너에서 작업하려면 먼저 터미널로 접속해야한다.

docker exec -it CONTAINER /bin/sh

2.1.4. CentOS의 Mirror site 설정

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Linux-*

2.2. 개발 및 컴파일 툴 설치

소스파일 다운로드와 컴파일 시 필요한 툴들을 설치한다.

yum update
yum groupinstall "Development Tools"
yum install wget
yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel

2.3. 소스파일 다운로드

패키지 매니저를 통해서 받을 수도 있지만 이번에는 컴파일을 통해 설치할것이기 때문에 소스파일을 다운받아야 한다.

2.3.1. 다운로드 링크 복사

소스파일은 아래 링크를 통해 들아가서 파일을 다운받을 수 있는 링크를 복사해온다.

2.3.2. 소스파일 다운로드

위 링크에서 복사한 파일 링크를 통해 소스파일을 다운로드 후 압축을 해제한다.

wget https://nginx.org/download/nginx-1.23.2.tar.gz
tar -zxvf nginx*

2.4. 컴파일

다운받은 소스파일을 통해 Nginx를 컴파일해서 설치한다.

2.4.1 configure

압축을 해제하고 나온 nginx 소스파일 디렉토리로 가면 configure 파일을 볼 수 있다. 해당 파일을 통해 설치하기 전 설정을 진행할 수 있다.
어떤 설정이 있는지는 ./configure --help 명령을 통해 확인할 수 있다.

./configure --sbin-path=/usr/bin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-pcre \
--pid-path=/var/run/nginx.pid \
--with-http_ssl_module
  • --sbin-path=/usr/bin/nginx : nginx 명령을 커맨드 창에서 바로 사용할 수 있도록 등록
  • --conf-path=/etc/nginx/nginx.conf : nginx의 설정 파일 위치
  • --error-log-path=/var/log/nginx/error.log : error log 파일 위치
  • --http-log-path=/var/log/nginx/access.log : access log 파일 위치
  • --with-pcre : PCRE 라이브러리 사용
  • --pid-path=/var/run/nginx.pid : pid 경로 지정
  • --with-http_ssl_module : SSL 모듈 추가

2.4.2 make, make install

설정이 끝났으면 아래 명령으로 컴파일하고 설치해준다

make
make install

3. 테스트

설치가 다 되었으면 정상적으로 동작하는지 테스트 해보자.

3.1. 설치 버전 확인

nginx를 설치하기전 터미널에서 nginx 명령을 바로 실할 수 있도록 했기 때문에 해당 명령을 통해서 설치된 버전을 확인해보자

nginx -v
=======================
nginx version: nginx/1.23.2

3.2. 시작 및 구동 확인

nginx 버전이 정상적으로 확인되면 nginx를 구동해보자.

nginx # 시작
ps -ef | grep nginx
=======================
... 00:00:00 nginx: master process nginx
... 00:00:00 nginx: worker process

프로세스가 정상적으로 동작하고 있는것을 확인 했으면 웰컴페이지에 접속해보자. 브라우저에서 http://localhost:80을 검색하면 확인할 수 있다.

3.3. 종료

nginx -h 명령을 입력하면 선택할 수 있는 옵션이 있다. 그 중 -s 옵션을 통해 nginx에 다양한 시그널을 보낼 수 있다.

ningx -s stop

3.4. 설정파일 유효성 검사

nginx -t 명령을 통해서 configure에서 설정한 config 파일의 유효성을 검사할 수 있다. 이상이 없다면 syntax is ok라는 문구를 확인 할 수 있다.

nginx -t
=======================
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

설정파일이 잘못 되었다면 설정 파일의 몇 번째 줄에서 잘못되었는지 확인할 수 있다. 만약 구성파일을 변경하고 nginx가 동작하지 않는다면 해당 명령으로 설정파일 먼저 확인해보자.

nginx -t
=======================
nginx: [emerg] "server" directive is not allowed here in /etc/nginx/nginx.conf:5
nginx: configuration file /etc/nginx/nginx.conf test failed

3.5. 서비스 등록

nginx를 서비스로 등록해서 사용할 수도 있다.

/lib/systemd/system/nginx.service로 파일을 생성하고 아래 내용을 반영해준다.

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking

# configure에서 지정한 pid 파일 경로
PIDFile=/var/run/nginx.pid 

# configure에서 지정한 바이너리 파일 경로
ExecStartPre=/usr/bin/nginx -t 
ExecStart=/usr/bin/nginx 
ExecReload=/usr/bin/nginx -s reload

ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

이후 systemctl 명령으로 서비스를 동작한다.

systemctl daemon-reload
systemctl start nginx
systemctl status nginx

4. 참고

0개의 댓글