Ubuntu + Nginx + MariaDB + Php5 설치하기

 우분투를 기반으로 하여 nginx(웹서버), mariaDB(DB), php5(웹언어)로 구성하는 웹서버를 만들어 보자.

 우분투는 일반 버전과 LTS(장기지원) 버전으로 나뉜다. 서버를 안정적으로 구축할 목적이라면 2년에 한번씩 나오고 5년간 지원을 하는 LTS 버전을 이용하는것이 여러모로 낫다. LTS 버전을 이용한다면 다음 LTS 버전이 나오더라도 시간적 여유를 가지고 업그레이드를 할 수 있기 때문이다.
 우분투 14.04 LTS 버전 파일을 다운받은 다음 CD또는 USB 등을 이용하여 PC에 설치하자. DVD-Writer가 없어도 Universal USB Installer 등을 이용한다면 USB메모리를 이용하여 설치 할 수 있다.
Ubuntu Server 14.04 : http://www.ubuntu.com/download/server 
Universal USB Installer : http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
 우분투를 설치했다고 가정하고 본격적으로 웹서버를 구축해보자.

 웹서버의 역사는 Apache 의 역사라고 해도 과언이 아니었다. 하지만, 역사가 오래된 만큼 하위 호환성을 유지하기 위해 지금은 필요없어진 기능을 지원해야만 했다. 이로 인해서 프로그램은 복잡해지고 무거워 졌다. 그 틈을 파고들어 개발된 것이 nginx라는 웹서버이다. 
http://nginx.org/
  NetCraft 2015년 2월 기사(링크)에 따르면 nginx는 전체 웹서버에서 15%를 차지하고 있다. 우리가 자주 사용하는 네이버의 메인페이지와 카카오톡의 공지사항 서버를 nginx가 담당하고 있다고 한다. 
 많은 개발자들이 선호하고 있고 성능도 뛰어나다기에 이번에 구축할 웹서버는 nginx로 정하였다.

 첫번째 단계로 nginx 웹서버를 설치하자. 
$ sudo apt-get install nginx
정상적으로 설치가 되었다면 nginx is running 이라고 표시될 것이다.
$ sudo service nginx status
[sudo] password for user_id:
 * nginx is running
 그리고 인터넷 웹브라우져에 서버 IP를 입력하면 Welcome 으로 시작하는 페이지가 뜰것이다.
 두번째 단계로 DB를 설치하자. mariaDB는 기본적으로 mysql과 같은 구조를 가진다. mysql를 만들던 개발자가 오라클의 mysql 정책에 불만가져 회사를 나오게 된다. 그리고 만들게된 DB가 MariaDB이다. 

 mariaDB를 설치한다. 
$ sudo apt-get install mariadb-server mariadb-client
정상적으로 설치되었다면 아래와 같은 형태를 가질 것이다.
$ sudo service mysql status
 * /usr/bin/mysqladmin  Ver 9.0 Distrib 5.5.41-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Server version          5.5.41-MariaDB-1ubuntu0.14.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 1 hour 8 min 21 sec
Threads: 1  Questions: 82  Slow queries: 0  Opens: 54  Flush tables: 2  Open tables: 39  Queries per second avg: 0.019
 마지막으로 PHP를 설치하자.
$ sudo apt-get install php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-cgi
 php 관련 프로그램과 모듈을 설치를 완료 하였다면 cgi 설정을 변경한다.
$ sudo vi /etc/php5/fpm/php.ini
 파일에서 ";cgi.fix_pathinfo=1" 을 찾아서 주석을 제거한 후, 값을 0으로 세팅한다.
cgi.fix_pathinfo=0
 php5-fpm 을 재시작한다.
$ sudo service php5-fpm restart
nginx는 기본적으로 다음과 같은 설정값을 가진다.
Document Root
/usr/share/nginx/www 
 설정 파일
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default 
로그파일
/var/log/nginx/
 마지막으로 php 파일을 감지하여 파싱하기 위해 nginx의 설정을 변경한다.
$ sudo vi /etc/nginx/sites-available/default
 웹서버의 root 디렉토리를 변경한다. index.php 파일을 추가한다.
 20 server {
 21         listen 80 default_server;
 22         listen [::]:80 default_server ipv6only=on;
 23
 24         #root /usr/share/nginx/html;
 25         root /home/user_id/www;
 26         index index.html index.htm index.php;
 27
 28         # Make site accessible from http://localhost/
 29         server_name localhost;
 30
 31         location / {
 32                 # First attempt to serve request as file, then
 33                 # as directory, then fall back to displaying a 404.
 34                 try_files $uri $uri/ =404;
 35                 # Uncomment to enable naxsi on this location
 36                 # include /etc/nginx/naxsi.rules
 37         }
php 구문을 파싱할수 있게 변경한다.
 55         location ~ \.php$ {
 56                 fastcgi_split_path_info ^(.+\.php)(/.+)$;

 57         #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 58         #
 59         #       # With php5-cgi alone:
 60         #       fastcgi_pass 127.0.0.1:9000;
 61         #       # With php5-fpm:
 62                 fastcgi_pass unix:/var/run/php5-fpm.sock;
 63                 fastcgi_index index.php;
 64                 include fastcgi_params;
 65         }
 설정이 끝나면, wq 명령으로 저장 후, nginx를 다시 시작한다.
$ sudo service nginx restart
 이제 /home/user_id/www 리렉토리 아래에 index.php 파일을 만들면 웹서버의 홈디렉토리 이동이 완성된다.
$ cd ~
$ mkdir www
$ cd www
$ vi index.php
 php가 정상적으로 동작하는걸 확인하기 위해 아래의 코드를 index.php 파일에 넣고 웹페지를 접속 해보자.
<?php
     phpinfo();
?>
아래와 같은 내용이 뜬다면 정상적으로 php가 동작하고 있는 것이다
 기본적인 설정은 거의 끝이 나고 있다. 여기까지 하면, index.php 와 같이 php 확장자를 가진 파일에 들어 있는 php 코드는 파싱이 되지만, htm 파일에 들어 있는 php 코드는 파싱이 되지 않는다. 아래의 링크를 참고하여 htm 파일에 들어 있는 php 코드도 인식이 되게끔 해보자.
nginX 웹서버에서 html, htm 파일의 PHP 코드 실행 : http://www.withover.com/2014/12/nginx-html-htm-php.html
 별문제가 없다면 LEMP 서버 설정은 10분 이내로 끝낼 수 있다. 하지만 원지 않게 오류를 만날 수도 있다. LEMP 서버를 구성하면서 만났던 오류와 해결 방법을 기술해 본다.

1. nginx 완전히 삭제하기
awk: fatal: cannot open file `/etc/nginx/nginx.conf' for reading (No such file or directory)
 위와 같은 메시지가 나오면서 nginx가 실행되지 않는다면, 아래 단계를 거쳐 nginx를 완전히 삭제후, 다시 설치한다.
$ sudo apt-get autoremove nginx
$ sudo apt-get --purge remove nginx
$ sudo apt-get autoremove -f
$ sudo apt-get autoclean
$ sudo find / | grep nginx | sudo xargs rm -rf
$ sudo apt-get install nginx
2. dpkg 오류
 nginx 설치시, 아래의 오류를 만난다면, 
nginx Sub-process /usr/bin/dpkg returned an error code (2)
 아래 명령으로 설치 패키지를 초기화 한다. 
$ dpkg --clear-avail