강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

Nginx(1.9.5) 설치 및 성능테스트

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

[Nginx 설치 및 성능테스트]



1.설치환경


CPU : Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GH (가상화 환경)

Ram : 1G

Os : Sulinux 2014 R6 64bit



2. Nginx 소개


Screenshot - 2015년 10월 22일 - 10시 36분 28초.png

"더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다."


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;

# }

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,806 개
  • 현재 접속자 :  117 명