Nginx(1.9.5) 설치 및 성능테스트
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 27,825 조회
- 0 추천
- 목록
본문
[Nginx 설치 및 성능테스트]
1.설치환경
CPU : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GH (가상화 환경)
Ram : 1G
Os : Sulinux 2014 R6 64bit
2. Nginx 소개
"더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다."
nginx 는 차세대 웹서버로 불리고 있으며, 위 그래프에서도 알수 있듯이 꾸준한 상승세를 보이고 있다. Nginx 는 러시아의 개발자이자 서버관리자인 이고르 시셰프(Igor Sysoev)에 의해 2002년부터 개발되기 시작했다고 하며, 2004년 첫 릴리즈 이래, 2012년 전세계적으로 약 12% 이상의 점유율을 기록하고 있다 한다. 현재 Apache에 있어 가장 위협이 되고 있는 존재로 급부상 중이다.
nginx 는 새로운 시대의 요청에 부응해서 만들어진 웹서버이다. 개발의 모든 목적이 높은 성능에 맞춰져 있다. 그리고 잘 사용하지 않는 기능은 과감하게 제외했다. 덕분에 폭발적인 증가세에 있는 인터넷 서비스를 지탱하는데 적합하다.
3. 설치
DB 를 제외한 기본적입 웹서비스를 할수있는 환경을 구성할 것이다. nginx + php 설치를 목적으로 한다.
3.1 기본페키지 삭제
기존에 yum 으로 설치된 패키지를 삭제하도록 한다. 이곳에서는 nginx + php 만 설치하기 때문에 시스템 자원을 효율적으로 사용하기위해서 불필요한 프로세스는 삭제하도록 한다.
yum -y remove httpd*
yum -y remove mysql*
yum -y remove php*
3.2 기본 라이브러리 설치
nginx 및 php 는 다양한 라이브러리를 이용하여 설치를 진행한다. 처음 os 를 설치하고 난 이후에 기존에 설치된 라이브러리들이 있을수있지만 업데이트 및 빠진 라이브러리들을 설치한다.
yum -y install zlib zlib-devel libxml2 curl libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel freetype-utils fontconfig fontconfig-devel gd gd-devel php-gd libmcrypt libmcrypt-devel gcc g cpp gcc-c compat-gcc-32-g77 flex glibc openssl openssl-devel gmp gmp-devel mhash mhash-devel php-soap libc-client* net-snmp* pcre-devel.x86_64
3.3 php 설치
이제 nginx 의 대표적인 웹언어인 php 를 설치하도록 하겠다. 설치 버전은 5.5.x 버전을 사용하면 된다.
3.3.1 다운로드
공식홈페이지에서 다운로드 하도록 한다.
wget http://kr1.php.net/get/php-5.5.7.tar.gz/from/this/mirror
파일명이 mirror 되어있기 때문에 변경해준다.
mv mirror php-5.5.7.tar.gz
3.3.2 라이브러리 링크
php configration 과정에서 아래와 같은 에러메시지가 확인이 될것이다. 아래와 같이 링크 해준다.
configure: error: libjpeg.(a|so) not found
ln -s /usr/lib64/libjpeg.so /usr/lib/
ln -s /usr/lib64/libpng.so /usr/lib/
3.3.3 mcrypt.h 설치
wget http://ftp.linux.co.kr/pub/etc/libmcrypt-2.5.7.tar.gz
tar xvfz libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure && make && make install
3.3.4 환경 설정 및 설치
tar xvfz php-5.5.7.tar.gz
cd php-5.5.7
./configure --prefix=/usr/local/php-5.5.7 --with-config-file-path=/usr/local/lib --with-gd --with-freetype-dir --with-zlib --enable-sockets --enable-gd-native-ttf --with-png-dir --with-jpeg-dir --enable-sigchild --with-gettext --enable-mbstring --enable-inline-optimization --enable-bcmath --enable-shmop --enable-calendar --enable-ftp --with-gdbm --with-iconv --enable-mbregex --with-openssl --with-curl --enable-soap --disable-debug --with-mcrypt --with-kerberos --enable-zip --with-zlib-dir --enable-exif --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody && make && make install
php 디렉토리로 링크 걸어둔다. 이곳은 단순히 사용상의 편의를 위해서 하는것이다.
ln -s /usr/local/php-5.5.7 /usr/local/php
php.ini 환경설정 파일은 설치된 디렉토리에 복사한다.
cp php.ini-production /usr/local/lib/php.ini
php.ini 파일을 열어서 몇가지 설정을 변경해준다.
vi /usr/local/lib/php.ini
* short_open_tag
short_open_tag = On
* error_reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_STRICT
* display_errors
display_errors = On
* date.timezone
date.timezone = "Asia/Seoul"
-- 여기서 부터 php-fpm 설정
일반적으로 nginx는 동적인 페이지 구현이 어렵다. 이부분을 해결하기 위해서 fast-cgi 기능을 사용하는 php-fpm 을 설치해야된다
cd sapi/fpm
cp -a php-fpm.conf /usr/local/php/etc/php-fpm.conf
* php-fpm (start|stop) 등의 스크립트 지원이 없으므로 직접 작성
— 여기서 부터 php-fpm 실행 스크립트 /etc/rc.d/init.d/php-fpm
vi /etc/rc.d/init.d/php-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix=/usr/local/php
exec_prefix=${prefix}
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_PID=${prefix}/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"
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 --daemonize $php_opts
$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-quit"
exit 1
else
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 755 /etc/rc.d/init.d/php-fpm
3.4 Nginx 설치
3.4.1 다운로드
공식홈페이지에서 가장 최신버전을 받는것을 추천한다.
wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar xvfz nginx-1.9.5.tar.gz
cd nginx-1.9.5
./configure --prefix=/usr/local/nginx-1.9.5 --user=nobody --group=nobody --with-http_ssl_module --with-http_dav_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module && make && make install
관리를 편하기 하기위해서 링크를 걸어주도록 한다.
ln -s /usr/local/nginx-1.9.5 /usr/local/nginx
3.4.2 환경설정
vi /usr/local/nginx/conf/nginx.conf
-- 여기서 부터 nginx.conf 여기부터
#user nobody;
# worker_processes 1; 본인의 시스템 환경에 맞게 설정해주면 된다.
worker_processes "4";
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 10240;
}
http {
index index.html index.php;
include mime.types;
default_type application/octet-stream;
log_format main "$remote_addr - $remote_user [$time_local] "$request" "
"$status $body_bytes_sent "$http_referer" "
""$http_user_agent" "$http_x_forwarded_for"";
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml rss text/javascript;
server {
listen 80;
client_max_body_size 50M;
client_body_timeout 600;
client_header_timeout 600;
server_name 192.168.0.71
root html;
index index.html index.php;
location ~ \.(php|html)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
관련자료
-
이전
-
다음