Nginx
는 가벼움과 높은 성능을 목표로하는 웹 서버이다. Nginx 외의 다른 웹서버로는 아파치
, 구글 웹 서버
, 마이크로소프트 IIS
가 있다.
설치는 어떤곳에 해도 상관없지만 추후 리버스 프록시
나 LB
를 테스트 편하게 하기 위해서 Docker에 CentOS 컨테이너를 동작시키고 해당 컨테이너에 Nginx
를 설치해 보겠다.
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
: 초기화 진행아래 명령으로 컨테이너가 정상적으로 동작하고 있는지 확인한다.
docker ps
동작시킨 컨테이너에서 작업하려면 먼저 터미널로 접속해야한다.
docker exec -it CONTAINER /bin/sh
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-*
소스파일 다운로드와 컴파일 시 필요한 툴들을 설치한다.
yum update
yum groupinstall "Development Tools"
yum install wget
yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel
패키지 매니저를 통해서 받을 수도 있지만 이번에는 컴파일을 통해 설치할것이기 때문에 소스파일을 다운받아야 한다.
소스파일은 아래 링크를 통해 들아가서 파일을 다운받을 수 있는 링크를 복사해온다.
위 링크에서 복사한 파일 링크를 통해 소스파일을 다운로드 후 압축을 해제한다.
wget https://nginx.org/download/nginx-1.23.2.tar.gz
tar -zxvf nginx*
다운받은 소스파일을 통해 Nginx를 컴파일해서 설치한다.
압축을 해제하고 나온 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 모듈 추가설정이 끝났으면 아래 명령으로 컴파일하고 설치해준다
make
make install
설치가 다 되었으면 정상적으로 동작하는지 테스트 해보자.
nginx를 설치하기전 터미널에서 nginx 명령을 바로 실할 수 있도록 했기 때문에 해당 명령을 통해서 설치된 버전을 확인해보자
nginx -v
=======================
nginx version: nginx/1.23.2
nginx 버전이 정상적으로 확인되면 nginx를 구동해보자.
nginx # 시작
ps -ef | grep nginx
=======================
... 00:00:00 nginx: master process nginx
... 00:00:00 nginx: worker process
프로세스가 정상적으로 동작하고 있는것을 확인 했으면 웰컴페이지에 접속해보자. 브라우저에서 http://localhost:80
을 검색하면 확인할 수 있다.
nginx -h
명령을 입력하면 선택할 수 있는 옵션이 있다. 그 중 -s
옵션을 통해 nginx에 다양한 시그널을 보낼 수 있다.
ningx -s stop
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
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