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.

cd /usr/local/src
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).

cd /usr/local/src
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 install

cd /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:

/usr/local/cpanel/whostmgr/bin/whostmgr2 –updatetweaksettings

Şimdi ise nginx konfigürasyonunu oluşturmak için bir script kullanacağız. Bunu yapmak için;

cd /root
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:

chmod 755 nginx.sh
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:

/usr/local/nginx/sbin/nginx -t

Son olarak, nginx’i çalıştırıp durdurmaya yarayacak olan initscript’imizi de yerine koyalım.

nano /etc/init.d/nginx

ve açılan ekrana aşağıdakileri yapıştırın:

#!/bin/sh
#
# 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:

chmod +x /etc/init.d/nginx

ve eğer isterseniz nginx’in sistem her açıldığında otomatik olarak çalışması için:

chkconfig nginx on

Artık nginx tamamen hazır. İlk olarak, Apache konfigürasyon değişikliklerinin aktif olmasını sağlayalım:

/scripts/rebuildhttpdconf
service httpd restart

ve artık nginx’i başlatabiliriz:

service nginx start

Sisteminizdeki performans farkını artık kendi gözlerinizle de görebilirsiniz.

“cPanel Üzerinde nginx Webserver Çalıştırmak” üzerine 11 yorum.

  1. /usr/local/nginx/sbin/nginx -t
    bu kodu girdiğimde

    [emerg]: unknown directive “setting” in /usr/local/nginx/conf/nginx.conf:13

    bu hatayı alıyorum

    1. Konfigürasyon dosyasında hata olduğunu söylüyor, dosya içeriğini hatalı yazmış olabilirsiniz.

  2. 🙂 bu bence hiçbir işe yaramıyor 🙂

    sadece proxy oldğu için %5 anca performans gösteriyor..

    bazende apachenin yavaşlığını geçiyor php tabanlı sitelerde apache html de nginx çalışmakta 🙂

    en güzeli en iyisi litespeed kim nederse desin

    1. Kesinlikle işe yaradığından emin olabilirsiniz. Talepleri Apache’ye göre çok daha rahat karşılıyor. Bir kampanya zamanında aşırı girişten sitemiz kilitlenmişti, acil şekilde nginx’i aktif ettik ve hiçbir sorun yaşamadık.

  3. Merhaba,

    Buradaki sh nginx.sh komutu uyguladığımda aşağıdaki gibi bir hata alıyorum.

    root@server3 [~]# sh nginx.sh
    nginx.sh: line 2: worker_processes: command not found
    nginx.sh: line 4: error_log: command not found
    nginx.sh: line 5: pid: command not found
    nginx.sh: line 7: worker_rlimit_nofile: command not found
    nginx.sh: line 9: events: command not found
    nginx.sh: line 10: worker_connections: command not found
    nginx.sh: line 11: use: command not found
    nginx.sh: line 12: syntax error near unexpected token `}’
    nginx.sh: line 12: `}’

    1. Kurulum hatalı yapılmış gibi görünüyor ya da kurulum dökümanı son sürümleri desteklemiyor olabilir. Tekrar kurulum dosyalarını indirip denemenizi öneririm.

  4. CentOS 5, Plesk sunucu üzerine nginx için php-fpm modülünü kurmak istiyorum ama yeterli bir bilgiye ulaşamıyorum bir türlü. Bulduklarım da işe yaramıyor. Konuyla ilgili bir bilginiz var mıdır?

  5. Ben kurulum komutlarının ardından şu hataları alıyorum, nasıl çözebilirim?

    Generating vhosts…
    Traceback (most recent call last):
    File “/scripts/createvhosts.py”, line 7, in ?
    import yaml
    ImportError: No module named yaml
    Installing WHM interface…
    cp: cannot create regular file `/var/cpanel/apps/nginxcp.conf’: No such file or directory
    Installing mod_rpaf…
    Updating cPanel Configuration
    Traceback (most recent call last):
    File “/usr/local/src/publicnginx/nginxinstaller2”, line 15, in ?
    import createvhosts
    File “/usr/local/src/publicnginx/createvhosts.py”, line 7, in ?
    import yaml
    ImportError: No module named yaml
    root@server1 [/usr/local/src/publicnginx]#

    1. Anladığım kadarıyla python sürümüyle alakalı bir hata. Yaptığım testlerde hatayı göremediğimden malesef çözüm sunamamaktayım.

Bir cevap yazın