기본 시스템 설정

root인 김에 막바지 작업을 끝마치자. 도메인을 갖고 있다면 시스템을 도메인과 일치시키는 편이 관리하기에 수월할 것이다.

# hostname mydomain.net

이어서 hosts 파일도 수정한다.

# nano /etc/hosts

127.0.0.1 / ::1인 첫 항목을 바꿔버린다.

# nano /etc/sysconfig/network

여기서도 HOSTNAME= 오른쪽의 이름을 나의 도메인으로 맞춘다.

해외든 국내든 서버가 어디에 있어도 대한민국 대상으로 서비스한다면 서버 시계도 맞춰주면 좋을 것이다. 다음 방법으로 금세 시간대를 맞출 수 있다.

# timedatectl set-timezone Asia/Seoul

참고로, 가능한 시간대를 모두 출력하려면 다음 명령을 통해 볼 수 있다.

# timedatectl list-timezones

대륙을 알고 있다면 뒤에 | grep Asia 이런식으로 적어주면 더 간략하게 필요한 정보만 추려낼 수 있을 것이다. 이제 root 로그인은 종료해도 괜찮다.

Nginx 빌드

이 절부터는 처음에 만든 신규 계정으로 로그인하고 진행한다.

yum install nginx로 순식간에 설치되는 것이 nginx의 장점이거늘, 여기서는 직접 빌드에 도전해본다. 원래 빌드는 관련 의존성 패키지를 다 깔아주고, 경로도 맞춰줘야 하는 등 무척 까다로운 과정을 거쳐야 한다. 그러나 Nginx는 비교적 쉬운 작업으로 빌드가 가능하다는 점, 또 빌드를 통해서만 원하는 추가 모듈을 깔아줄 수 있다는 점에서 언젠가 꼭 거쳐야 할 과정이라고 생각한다.

gzip이나 기타 유용한 모듈을 쓰려면 빌드 방법은 꼭 알아둘 필요가 있다.

$ sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libxml2-devel libxslt-devel gd-devel GeoIP GeoIP-devel perl

시행착오 끝에 빌드시 괴롭히는 것들을 다 깔 수 있었다.

$ wget https://zlib.net/zlib-1.2.11.tar.gz
$ wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
$ tar -xzvf ./zlib-1.2.11.tar.gz
$ tar -xzvf ./openssl-1.1.0g.tar.gz
$ tar -xzvf ./pcre-8.41.tar.gz

의존성 있는 라이브러리들도 같이 준비해준다. 공식 홈페이지에서 최신 버전으로 맞추는 편이 좋다. 다만, perl 같은 경우엔 메이저 버전이 높은 것으로 하면 문제가 생길 수 있다.

$ ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --build=CentOS --builddir=nginx-1.13.6 --with-select_module --with-poll_module --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-mail=dynamic --with-mail_ssl_module --with-stream=dynamic --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre=../pcre-8.41 --with-pcre-jit --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.0g --with-openssl-opt=no-nextprotoneg --add-module=../ngx_pagespeed-1.12.34.3

make 하기 전 설정 과정을 거친다. 여기서 의존성 체크를 당하고, 에러가 나면 구글링하면서 또 해결을 해야 한다. 무사히 끝나면 make가 남는다.

$ sudo make
$ sudo make install

에러가 나지 않기를 기원한다. 참고로 512MB에서 make시 fatal error가 발생했다. 램이 부족하면 죽어버리는 모양이다. vps라서 업그레이드는 간단했다만, 다운그레이드가 안 돼서 좀 그렇다.

$ sudo groupadd nobody
$ sudo useradd -g nobody nobody

Nginx 서버에서 사용할 계정을 만들어야 한다. 방문자가 파일을 확인하게 되는 기본 사용자인 만큼, 보안을 최대한 고려하여 필요한 권한만 제공되어야 한다.

손수 빌드할 경우 서비스로 등록되지 않는다. 서비스 등록을 위한 과정을 거치면, 부팅시 자동으로 웹 서버가 기동된다.

$ sudo nano /lib/systemd/system/nginx.service

여기에 다음 내용을 붙여넣자.

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
			
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable nginx
$ sudo systemctl start nginx

이렇게 하면 실행된다.

다음 글에서 이어집니다.