RSS
 

Nginx Kurulumu (Php5 ve MySQL)

29 Ara

nginx_logoNginx (engine x) açık kaynaklı, yüksek perfomanslı web server ve ters (reverse) proxy’dir. Igor Sysoev tarafından 2005 yılında geliştirilmeye başlanmıştır. Nginx web dünyasında sunucuların %4′e yakındır. Nginx beta olmasına karşın, kararlı, bol özellikli ayarları, basit konfigürasyonu ve düşük kaynak kaynak kullanımı ile öne çıkmaktadır. Rumbler.ru gibi yüksek trafikli sitelerin sahiplerinin derdine deva oluyor. Sistem kaynaklarını cimri kullanması ve en üst seviyede yararı sağlaması tercih edilme nedenleri arasında.

netcraft_chart_with_lighttpdnginx-apache-reqs-sec

Grafiklerdende görüldüğü üzere nginx kendine benzer bir gorev yapan lighttpd, kullanan domain sayısında geçmiş durumda. Diğer grafiktede ararlılığını korumasına adına yapılan testte apache’ye açık ara fark atmış olduğunu görüyoruz. Nginx gün geçtikçe artan kullanım trendinin boşuna olmadığını ıspatlıyor.

Kurulum

Bu yazımızda bilgisayar adı webserver.linuxuzmani.com ve ip adresimiz 172.16.1.10 olacaktır. Siz kendi isteğinize ve ap yapınıza göre bu bilgileri değiştirebilirsiniz.

MySQL 5.0 Kurulumu

apt-get install mysql-server mysql-client

Mysql root kullanıcısı için şifre oluşturalım:

mysqladmin -u root password yenimysqlrootşifresi

Kurulumunu yaptığımız Mysql sunucusunun servisinin dinlemede olduğunu aşağıdaki komutla çalıştığını kontrol ediyoruz.

netstat -tap | grep mysql

tcp 0 0 localhost.uzman:mysql*:*                     LISTEN     2713/mysqld

Nginx Kurulumu

Nginx paketi Debian Etch depolarında bulunmakta ancak sürümü 0.4.13-2 olarak bulunmakta. Biz şu anda son sürüm olan Nginx-0.6.34 kullanacağız Nginx kaynak koddan derleyeceğiz.

İlk olarak kurulum için gerekli paketleri kuralım.

apt-get install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev build-essential

Daha sonra nginx paketini sunucumuza indirip açıyoruz(son sürümü http://nginx.net/ adresinden kontrol edebilirsiniz)

cd /tmp
wget http://sysoev.ru/nginx/nginx-0.6.34.tar.gz
tar xvfz nginx-0.6.34.tar.gz
cd nginx-0.6.34

Kurulum parametrelerini görmek için bu komutu çalıştırabilirsiniz.

./configure –help

Kurulum parametresi olarak çalıştırma yolu ve SSL modülünü aktif edeceğiz. Sizin için gerekli diğer parametrelerin ekleyebilirsiniz.

./configure –sbin-path=/usr/local/sbin –with-http_ssl_module

Kuruluma başlayabiliriz.

make
make install

Kurulum tamamlanmıştır.

Kurulum ardından /usr/local/nginx klasörü oluşturulur. Konfigürasyon dosyları,kayıtlar ve öntanımlı web dizini (/usr/local/nginx/html) burada bulunmakta.

Nginx başlangıç betiğinin oluşturulması:

nano  /etc/init.d/nginx

#! /bin/sh

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi

set -e

case “$1″ in
start)
echo -n “Starting $DESC: ”
start-stop-daemon –start –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec $DAEMON — $DAEMON_OPTS
echo “$NAME.”
;;
stop)
echo -n “Stopping $DESC: ”
start-stop-daemon –stop –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec $DAEMON
echo “$NAME.”
;;
restart|force-reload)
echo -n “Restarting $DESC: ”
start-stop-daemon –stop –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec $DAEMON
sleep 1
start-stop-daemon –start –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec $DAEMON — $DAEMON_OPTS
echo “$NAME.”
;;
reload)
echo -n “Reloading $DESC configuration: ”
start-stop-daemon –stop –signal HUP –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec $DAEMON
echo “$NAME.”
;;
*)
N=/etc/init.d/$NAME
echo “Usage: $N {start|stop|restart|force-reload}” >&2
exit 1
;;
esac

exit 0
Eğik olarak yazılmış olan betiği nano ile açtığımız dosyanın içine yazdıktan sonra kaydedip çıkıyoruz. Akabinde dosyamıza çalıştırma izni veriyoruz.

chmod +x /etc/init.d/nginx

Başlangıç scriptimizi her açılışta çalışacak şekilde ayarlayalım.

update-rc.d nginx defaults

Sunucumuzu başlatabiliriz.

/etc/init.d/nginx start

nginx

Php5 Kurulumu

Nginx’te Php5 çalıştırmak için FastCGI kullanacağız. Aktif olmasını istediğimiz php modülleri kuruyoruz.

apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Php konfigürasyon dosyasına FastCGI aktif ediyoruz.

nano /etc/php5/cgi/php.ini
cgi.fix_pathinfo = 1 Satırını ekliyoruz.

Fast-cgi başlangıç betiğini yazalım.

nano /etc/init.d/php-fastcgi

#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO

# Author: Kurt Zankl <kz@xon.uni.cc>

# Do NOT “set -e”

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=”php-cgi in external FASTCGI mode”
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# If the daemon is not enabled, give the user a warning and then exit,
# unless we are stopping the daemon
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg “To enable $NAME, edit /etc/default/$NAME and set START=yes”
exit 0
fi

# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS=”-q -b $FCGI_HOST:$FCGI_PORT”

do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –test > /dev/null || return 1
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –background –make-pidfile –chuid $EXEC_AS_USER –startas $DAEMON — $DAEMON_ARGS || return 2
}

do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon –stop –quiet –retry=TERM/30/KILL/5 –pidfile $PIDFILE > /dev/null # –name $DAEMON
RETVAL=”$?”
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon –stop –quiet –oknodo –retry=0/30/KILL/5 –exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don’t delete their pidfiles when they exit.
rm -f $PIDFILE
return “$RETVAL”
}

case “$1″ in
start)
[ "$VERBOSE" != no ] && log_daemon_msg “Starting $DESC” “$NAME”
do_start
case “$?” in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg “Stopping $DESC” “$NAME”
do_stop
case “$?” in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg “Restarting $DESC” “$NAME”
do_stop
case “$?” in
0|1)
do_start
case “$?” in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2
exit 3
;;

esac

Başlangıç scriptimizi her açılışta çalışacak şekilde ayarlayalım.

update-rc.d php-fastcgi defaults

Diğer ayar dosyamız /etc/default/php-fastcgi olacaktır. Bu dosyada php-fastcgi ayarları bulunmaktadır.(Dinlenecek port,alt sorgu sayısı, vs.).

nano /etc/default/php-fastcgi açıp aşağıdaki diziyi ekliyoruz.

# Which user runs PHP? (default: www-data)
EXEC_AS_USER=www-data
# Host and TCP port for FASTCGI-Listener (default: localhost:9000)
FCGI_HOST=localhost
FCGI_PORT=9000
# Environment variables, which are processed by PHP
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000

/etc/init.d/php-fastcgi start

Nginx Konfigürasyonu

Nginx konfigürasyon dosya yolu /usr/local/nginx/conf/nginx.conf gibidir.
Daha detaylı ve örnekli ayarlar için http://wiki.codemongers.com/NginxFullExample ve http://wiki.codemongers.com/NginxFullExample2 adreslerini ziyaret edebilirsiniz.

Ayar dosyamızda nginx çalıştıracak kullanıcı, alt süreç ve bağlantıların açık kalma zamanını ayarlıyoruz.
[...]
user www-data www-data;
worker_processes 5;
[...]
keepalive_timeout 2;
[...]

Sanal alanadı tanımlamak için Server {} parametresi kullanılmaktadır. Öntanımlı olarak aşağıdaki gibi bir tanımlamayı nginx.conf içine ekliyoruz.

[...]
server {
listen 80;
server_name _;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.php index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /\.ht {
# deny all;
#}
}
[...]

Server name olarak “_” girildiğinde sunucuda ön tanımlı olarak o dizin açılacaktır.
“location /” paramtersindeki / ile nginx ana dizinini “/usr/local/nginx/html” göstermektedir. Başka bir dizini göstermek için tam yolu yazmalısınız. Biz /var/www/linuxuzmani.com/ klasörünü ana dizin için kullanmak istiyorsak location /var/www/linuxuzmani.com/ şeklinde yazmalıyız. Gerekli değişiklikleri yapıtıktan sonra nginx yeniden başlatıyoruz.

/etc/init.d/nginx restart

Sunucumuzu ve php modül bilgilerini görmek için bir php script hazırlıyalım.

nano /usr/local/nginx/html/bilgi.php

<?php
phpinfo();
?>

Ekledikten sonra kaydedip çıkıyoruz.
Taryıcımıza bu dosyayı yazarak çalıştırıp php hakkında bilgilerimizi görebiliyor olmamız gerekli.
Örnek : http://172.16.1.10/bilgi.php

nginx_phpinfo

Sunucumuz ve php çalışıyor. Diğer modülleride bu sayfada kontrol edebilirsiniz.

Kaynaklar;

delicious | digg | reddit | facebook | technorati | stumbleupon | chatintamil
 
1 Comment

Posted in Linux

 

Tags: , , , , , , , ,

Leave a Reply

 
 
  1. gökhan

    05 Eylül 2009 at 19:33

    Bunu pardusa kurmak istediğimizde kütüphanelerle ilgili sorunlar çıkıyor ve dolayısıyla ubuntu’daki gibi kolay kuramıyoruz kütüphaneleri. DEB hallerini veya kaynak kodlarını alıp derlememiz gerekiyor. Bir pardus geliştiricisi Apache için de yaptığı gibi bunu otomatikleştirmeden önce merak ediyorum, bunun daha kısa bir yolu var mı diye.