※Cent OS 7.0 (64-bit) 기준으로 작성한 글입니다.
1. NGINX 설치
아래 주소에서 OS 버전에 따른 패키지를 다운받습니다. (nginx-1.6.2-1.el7.ngx.x86_64)
http://nginx.org/en/linux_packages.html#stable
우분투의 경우 /etc/apt/sources.list 파일의 맨 아래에
deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx |
위의 두 줄을 추가한 뒤, (Codename은 우분투 버전에 따라 다음으로 대체)
10.04 - lucid
12.04 - precise
14.04 - trusty
14.10 - utopic
다음을 실행하여 설치합니다.
$ sudo apt-get update
$ sudo apt-get install nginx |
2. PHP 설치
관련 패키지를 한꺼번에 인스톨합니다.
# yum install php php-common php-devel php-fpm php-mysqlnd
우분투는
$ sudo apt-get install php php-common php-devel php-fpm php-mysqlnd
3. MariaDB 설치
Cent OS 7 에서의 경우 패키지로 기본 리포지터리에서 설치했을 때 서비스를 시작하는 init script가 빠져 있는 현상이 발생했기 때문에 이를 해결하기 위해 최신 버전으로 설치를 진행하였습니다.
ftp://ftp.kaist.ac.kr/mariadb/mariadb-10.1.2/yum/centos7-amd64/rpms/
위의 링크로 들어가서 아래에 있는 파일들을 다운받습니다.
· MariaDB-10.1.2-centos7_0-x86_64-client.rpm
· MariaDB-10.1.2-centos7_0-x86_64-common.rpm
· MariaDB-10.1.2-centos7_0-x86_64-devel.rpm
· MariaDB-10.1.2-centos7_0-x86_64-server.rpm
· jemalloc-3.6.0-1.el7.x86_64.rpm
모든 파일을 다운받은 뒤에 한꺼번에 설치합니다.
# yum install jemalloc* MariaDB*
우분투의 경우
http://downloads.mariadb.org/mariadb/repositories 로 접속하여
자신의 버전을 선택하면 아래에 설치를 위한 명령어가 나타납니다.
명령어를 복붙하여 MariaDB를 설치합니다.
4. NGINX , PHP-FPM 설정
NGINX 설정 파일인 /etc/nginx/conf.d/default.conf 를 편집기로 열어서
location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } |
위와 같이 추가해주고
PHP-FPM 설정 파일인 /etc/php-fpm.d/www.conf 를 편집기로 열어서 다음 부분을
listen = /var/run/php-fpm.sock
; RPM: apache Choosed to be able to access some dir as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx
|
위와 같이 수정합니다.
5. 서비스 스크립트 추가
NGINX와 PHP-FPM 은 데몬을 시스템 서비스로 등록하기 위한 스크립트 파일을 기본으로 제공하지 않습니다. 따라서 실행/중지 시마다 번거롭지 않게 하기 위해서 수작업으로 추가해야 합니다.
/etc/rc.d/init.d 폴더 내에 nginx, php-fpm 라는 파일명으로 두 파일을 생성한 뒤,
다음 내용을 복붙합니다.
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: 345 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-5.5.7-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-5.5.7-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/usr/sbin/php-fpm
php_fpm_CONF=/etc/php-fpm.conf
php_fpm_PID=/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-exit"
exit 1
else
echo " done"
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac
· 실행 권한을 부여합니다.
# chmod +x /etc/init.d/nginx /etc/init.d/php-fpm
· 시스템 시작시 자동으로 시작하기 위한 작업.
# chkconfig add nginx
# chkconfig add php-fpm
# chkconfig nginx on
# chkconfig php-fpm on
우분투는
$ sudo /usr/sbin/update-rc.d -f nginx defaults
$ sudo /usr/sbin/update-rc.d -f php-fpm defaults
이제 NGINX와 PHP-FPM 데몬을 구동합니다.
# service php-fpm start
# service nginx start
6. 동작 확인
서버의 루트 디렉터리인 /usr/share/nginx/html 내에 테스트 파일을 작성하여 확인해보겠습니다.
# cd /usr/share/nginx/html
# touch test.php
# chmod 644 test.php
# vim test.php
이제 웹 브라우저를 열고 주소창에 다음을 입력합니다.
http://localhost/test.php
정상적으로 연동되었다면 다음와 같은 결과가 나옵니다.
스크린샷, 2015-01-10 18^
도움이 되셨으면 좋겠습니다~