cPanel Üzerinde nginx Webserver Çalıştırmak
nginx webserver, Apache ile birlikte çalıştığında, tek başına Apache’ye göre kat kat iyi performans sağlayan bir web sunucusunudur. Hatta, Litespeed ile yaptığımız denemelerde de mükemmel performans vermiştir. Performans sıkıntısı yaşanan sunucu veya VDS/VPS’lerde, kesinlikle kurulumunun yapılarak test edilmesinde büyük fayda var, sistemi çok büyük ölçüde rahatlatacaktır.
Kuruluma başlamadan önce bilinmesi gereken birkaç önemli nokta var.
- nginx, wildcard subdomain desteklememektedir. Wildcard subdomain kullanıyorsanız, nginx konfigürasyon dosyası hatası verecek ve başlamayacaktır.
- nginx kullanmaya başladığınızda, cPanel sitelerin harcanan trafik kayıtlarını doğru olarak tutmayacaktır.
- SSL kullanan siteler varsa, bu anlatım bu sitelerde nginx’i aktifleştirmeyecektir, bütün istekleri doğrudan Apache karşılayacaktır.
İlk olarak nginx’den Apache’ye gelen talepleri normal bir talep olarak gösterecek olan mod_rpaf kurulumunu yapalım.
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xvfz mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Bu kurulum tamamlandıktan sonra seri bir şekilde PCRE kütüphanesini ve nginx web sunucusunu yapabiliriz(nginx son sürüm için buraya, PCRE son sürümü için buraya bakınız).
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.12.tar.gz
tar xvfz pcre-8.12.tar.gz
cd pcre-8.12
./configure
make
make installcd /usr/local/src
wget http://nginx.org/download/nginx-0.8.54.tar.gz
tar xvfz nginx-0.8.54.tar.gz
cd nginx-0.8.54
./configure
make
make install
mkdir /var/log/nginx
Bu kurulumları da tamamladıktan sonra, WHM’den şu yol izlenmelidir: Main -> Service Configuration ->Apache Configuration -> Include Editor
Bu sayfaya girdiğinizde Pre Main Include bölümünden Apache sürümünüzü seçiniz ve açılan textarea içine şunu yapıştırınız:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 ip1 ip2 ip3 ip4…(ip kısımlarını sunucudaki bütün ip adreslerini aralarında bir boşluk olacak şekilde düzenleyiniz)
RPAFsethostname On
RPAFheader X-Real-IP
Bu işlemden sonra, Apache portunu düzenlememiz gerekli. Böylece Apache 80 yerine 81 portunda çalışacak ve nginx 80 portunu dinleyecek, talepleri 81 portundaki Apache’ye gönderecek. Bunu yapmak için, WHM’nin Server Configuration -> Tweak Settings bölümüne girmeniz gerekli, bu bölümde sayfada :80 şeklinde arama yapıp, bulduğunuz bölümde 0.0.0.0:80 yerine bunun altındaki kutucuğu seçip kutucuğa 0.0.0.0:81 yazmanız ve bu ayarları kaydetmeniz yeterli. Bunu yaptıktan sonra da şu komutu çalıştırmak gerekecek:
Şimdi ise nginx konfigürasyonunu oluşturmak için bir script kullanacağız. Bunu yapmak için;
nano nginx.sh
komutlarını çalıştırdıktan sonra editör içerisine aşağıdakini yapıştırın:
#!/bin/sh
cat > “/usr/local/nginx/conf/nginx.conf” <<EOF
user nobody;
# no need for more workers in the proxy mode
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 8192;
events {
worker_connections 2048; # you might need to increase this setting for busy servers
use epoll; # Linux kernels 2.4.x change to rtsig
}
http {
server_names_hash_max_size 8192;
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 10;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_types text/plain application/x-javascript text/xml text/css;
ignore_invalid_headers on;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
include “/usr/local/nginx/conf/vhost.conf”;
}
EOF
/bin/cp /dev/null /usr/local/nginx/conf/vhost.conf
cd /var/cpanel/users
for USER in *; do
for DOMAIN in `cat $USER | grep ^DNS | cut -d= -f2`; do
IP=`cat $USER|grep ^IP|cut -d= -f2`;
ROOT=`grep ^$USER: /etc/passwd|cut -d: -f6`;
echo “Converting $DOMAIN for $USER”;
cat >> “/usr/local/nginx/conf/vhost.conf” <<EOF
server {
access_log off;
error_log /var/log/nginx/error.log warn;
listen 80;
server_name $DOMAIN www.$DOMAIN;
# uncomment location below to make nginx serve static files instead of Apache
# NOTE this will cause issues with bandwidth accounting as files wont be logged
location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|js|css)$ {
root $ROOT/public_html;
}
location / {
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
# you can increase proxy_buffers here to suppress “an upstream response
# is buffered to a temporary file” warning
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_connect_timeout 30s;
proxy_redirect http://www.$DOMAIN:81 http://www.$DOMAIN;
proxy_redirect http://$DOMAIN:81 http://$DOMAIN;
proxy_pass http://$IP:81/;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
}
}
EOF
done
done
Dosyayı kaydettikten sonra, aşağıdaki komutlarla scripti çalıştıralım:
sh nginx.sh
Bu komutları da çalıştırdıktan sonra, nginx için gerekli olan konfigürasyon dosyaları oluşturulur ve cPanel’deki hesaplar okunarak nginx vhost konfigürasyonu hazırlanmış olur.
Dilerseniz, şu komutla nginx konfigürasyonunda ir hata olup olmadığını görebilirsiniz:
Son olarak, nginx’i çalıştırıp durdurmaya yarayacak olan initscript’imizi de yerine koyalım.
ve açılan ekrana aşağıdakileri yapıştırın:
#
# nginx – this script starts and stops the nginx daemin
#
# chkconfig: – 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# 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/local/nginx/sbin/nginx”
prog=$(basename $nginx)
NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
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
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
initscript’e gerekli çalışma izinleri:
ve eğer isterseniz nginx’in sistem her açıldığında otomatik olarak çalışması için:
Artık nginx tamamen hazır. İlk olarak, Apache konfigürasyon değişikliklerinin aktif olmasını sağlayalım:
service httpd restart
ve artık nginx’i başlatabiliriz:
Sisteminizdeki performans farkını artık kendi gözlerinizle de görebilirsiniz.