Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

Nginx Nedir ? PHP5(FastCGI) ve Mysql Desteği ile nginx kurulumu

Bu makalemde yaptığım çok uzun testler sonrasında tahmin etmediğimden çok daha performanslı çalıştığına şahit olduğum nginx CentOS üzerine nasıl kurulur bunu anlatmaya çalışacağım. Kuruluma geçmeden önce nginx nedir, ne değildir bir bakalım.

Linux sunucularda alışılagelen apache web sunucusuna alternatif olarak henüz beta olarak geçmesine rağmen daha yüksek performanslı (Yapılan testlere göre %400’e kadar), apache kadar tutarlı nginx HTTP server kurulumunu anlatacağım. nginx aynı zamanda bir reverse proxy (ters proksi) ve mail sunucusu ayrıca MacOS, Linux, FreeBSD, Windows ve Solaris işletim sistemlerinde çalışabilmekte.

2002 yılında Igor Sysoev tarafından nginx üzerinde çalışılmaya, 2005 senesinde de geliştirilmesi için açık kaynak olarak dağıtılmaya başlanmış, geliştirilmesi halen devam etmek olan bir yazılım. 2010 yılının 3. çeyreğinde dünya üzerindeki sunucularda %6 kullanım ile başarısını kanıtladığını düşünüyorum.

Aylık 30 dolar civarında lisanslı olarak satılan LiteSpeed ‘e alternatif olarak ücretsiz olan nginx’in kullanılabileceği kanaatindeyim. Kullanımı, yapılandırması da oldukça basit. Aşağıda özelliklerini görebilirsiniz.

Temel HTTP özellikleri

* Statik ve index dosyalarının sunumu, otomatik indeksleme; açık dosya açıklayıcı önbellek;
* Önbellek ile hızlandırılmış reverse proxying; basit yük dengeleme ve hata toleransı;
* Uzak FastCgi sunucularının önbelleklenmesi ile hızlandırılmış destek; basit yük dengeleme ve hata toleransı;
* Modüler yapı. Gzip, byte aralıkları, yığın cevaplar (chunked responses), XSLT, SSI, imaj boyutlandırma gibi filtreler. FastCGI veya proksilenmiş sunucular ile tek bir sayfada çoklu SSI içermelerinin paralel işlenmesi.
* SSL ve TLS SNI desteği.

Diğer HTTP özellikleri

* Ad ve IP tabanlı sanal sunucular;
* Keep-alive ve pipelined bağlantı desteği;
* Esnek yapılandırma;
* İstemci işlemlerinde kopma olmadan yeniden yapılandırma ve online güncelleme;
* Erişim kayıt (log) formatları, tamponlanmış kayıt yazımı ve hızlı kayıt devri;
* 3xx-5xx hata kod yönlendirmeleri;
* rewrite modülü;
* İstemcinin IP adresine dayalı erişim kontrolü ve HTTP temel kimlik denetleme;
* PUT, DELETE, MKCOL, COPY ve MOVE methodları;
* FLV streaming;
* Hız sınırlandırma;
* Bir adresten gelen eşzamanlı bağlantı ve talepleri sınırlandırma.
* Gömülü perl.

Mail proxy sunucu özellikleri

* Harici bir HTTP kimlik denetleme sunucusunu kullanarak, kullanıcıyı IMAP/POP3 backend’ine yönlendirme;
* Harici bir HTTP kimlik denetleme sunucusunu kullanarak, kullanıcıyı SMTP backend’ine yönlendirme ve kullanıcı kimlik denetlemesi;
* Kimlik denetleme methodları:
o POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
o IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
o SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
* SSL desteği;
* STARTTLS ve STLS desteği.

Yapı ve ölçeklenebilirlik

* Bir ana işlem (main process) ve çok sayıda işçi işlemleri (workers). İşçiler, imtiyazsız kullanıcı olarak yürütülürler;
* Uyarı methodları: kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select ve poll;
* Çeşitli kqueue özellikleri desteği: EV_CLEAR, EV_DISABLE (event’i geçici olarak etkisizleştirir), NOTE_LOWAT, EV_EOF, olanaklı data sayısı, hata kodları;
* sendfile (FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5), sendfile64 (Linux 2.4.21+), ve sendfilev (Solaris 8 7/01+) desteği;
* File AIO (FreeBSD 4.3+, Linux 2.6.22+);
* Accept-filters (FreeBSD 4.1+) ve TCP_DEFER_ACCEPT (Linux 2.4+) desteği;
* 10,000 inaktif HTTP keep-alive bağlantısı yaklaşık 2.5M hafıza kullanır;
* Data kopyalama operasyonları minimum düzeydedir.

Test edilen işletim sistemleri ve platformlar

* FreeBSD 3  — 8 / i386; FreeBSD 5  — 8 / amd64;
* Linux 2.2  — 2.6 / i386; Linux 2.6 / amd64;
* Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
* MacOS X / ppc, i386;
* Windows XP, Windows Server 2003

Yeterli bilgiyi paylaştığım düşüncesi ile kurulum adımlarına geçiyorum.

Kurulum Hazırlıkları

Centos 5.5 kurulumun tamamlandığını varsayarak mysql-server kurulumu ile başlıyoruz.

# yum install mysql mysql-server

Mysql kurulumunun ardından sistem açılışında otomatik olarak mysql servisinin başlamasını sağlıyoruz.

# chkconfig –levels 235 mysqld on

Mysql servisini çalıştırıyoruz.

# service mysqld start

Mysql root şifresi ve bir kaç ayar için aşağıdaki komutu çalıştırıyoruz.

# mysql_secure_installation

Ekrana gelecek soruları ve vermeniz gereken cevaplarını aşağıda bulabilirsiniz.

Enter current password for root (enter for none): ENTER

Set root password? [Y/n] : ENTER

New password: Yeni Mysql root şifrenizi yazın

Re-enter new password: Yeni Mysql root şifrenizi yeniden yazın

Remove anonymous users? [Y/n] : ENTER

Disallow root login remotely? [Y/n] : ENTER

Remove test database and access to it? [Y/n] : ENTER

Reload privilege tables now? [Y/n] : ENTER

Nginx Kurulumu

nginx paketleri CentOS’un resmi repositorysinde bulunmadığı için paketleri karan.org un testing repositorysinden çekeceğiz.Önce repoyu ekliyoruz.

# cd /etc/yum.repos.d/
# wget http://centos.karan.org/kbsingh-CentOS-Extras.repo

Şimdi küçük bir düzenleme yapacağız bunun için vi editör ile repo dosyasını açıyoruz;

# vi /etc/yum.repos.d/kbsingh-CentOS-Extras.repo

Açılan dosyanın [kbs-CentOS-Testing] alanı altında alan enabled=0 alanını enabled=1 şeklinde değiştiriyoruz.

Artık yum komutu ile nginx’i yükleyebiliriz.

# yum install nginx

Mysqlde yaptığımız gibi nginx’in sistem açılışında çalışmasını sağlayalım.

# chkconfig –levels 235 nginx on

nginx servisini başlatıyoruz.

# service nginx start

Eğer herşey yolunda ise sunucunuza verdiğiniz ip adresini tarayıcı penceresine yazdığınızda boş bir sayfa açılmalı.

PHP5-FastCGI Yüklemesi ve Entegrasyon

Öncelikle PHP5 ve diğer gerekli paketleri yükleyelim.

# yum install lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy

Şimdi php.ini dosyamıza bir satır ekleyeceğiz. vi editor ile açıp sayfanın en altına aşağıdaki satırı ekleyin.

cgi.fix_pathinfo = 1

PHP FastCGI daemon’u nginx kullanıcı ve grubu ile localhost üzerinde 9000 nolu portu dinleyecek şekilde başlatmak için aşağıdaki komutu giriyoruz.

# /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid

Şimdi /etc/rc.local dosyasını açıp yukaruda yazdığımız komutu ekleyeceğiz. Böylece her sistem açılışında bu komutu çalıştırmamıza gerek kalmayacak.

# vi /etc/rc.local

Sayfanın en altına aşağıdaki satırı ekliyoruz.

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid

Temel nginx Konfigürasyonu

Basit bir kaç ayarlama sonrasında sunucumuz hazır olacak.

Conf dosyasını açarak gerekli düzenlemeleri yapalım.

# vi /etc/nginx/nginx.conf

Ben best-practice olarak aşağıdaki satırlardaki değerlerde düzenleme yaptım. Bu alan sizin tercihinize kalmış.

worker_processes  5; (Varsayılan değer 1)

keepalive_timeout  2; (Varsayılan değer 65)

Sonraki işlemi sayfanın biraz altında virtual hosts alanında yapacağız. Bu zorunlu bir işlem, size kolaylık olması açısından tüm bu ayarlar için nginx.conf içeriğini aşağıda veriyorum.

nginx.conf

Düz metin formatında verdiğim dosya uzantısını conf olarak değiştirip direkt olarak sunucunuzda /etc/nginx/ dizinine atabilir veya içeriğini birebir kopyalabilirsiniz.

Bu ayarlamalardan sonra nginx servisini yeniden başlatıyoruz.

# service nginx restart

İşlemlerimiz bu kadar artık sunucumuzu kullanabiliriz şimdi test edelim.

info.php isimli yeni bir dosya oluşturuyoruz;

# vi /usr/share/nginx/html/info.php

Dosya içerisine aşağıdaki satırları girip kaydediyoruz.Bu dosya bize sistem hakkında bilgiler sunacak.

<?php
phpinfo();
?>

Şimdi teste başlayalım.Tarayıcınıza sunucumuzun ip adresini girip sonuna /info.php yazıyoruz. Benim sunucu ip adresim 172.22.1.110 olduğundan örneği de bu şekilde veriyorum.

http://172.22.1.110/info.php

Açılan sayfa aşağıdaki gibi olacak, Bu sayfadan bileşen vb. kontrolleri yapabiliyoruz.

PHP5 FastCGI çalışıyor mu buna Server API kısmından bakıyoruz.

Mysql’in de çalıştığını aynı sayfanın alt kısımlarından kontrol ediyoruz.

Uzun ama güzel bir makale oldu… 🙂 Umarım işinize yarar.

İLGİNİZİ ÇEKEBİLİR

Lighttpd Nedir ? PHP5 ve Mysql Desteği ile Lighttpd kurulumu

Lighttpd hızlı, güvenli, esnek, uyumlu, apache alternatifi http sunucusudur. Bu makalemde Centos 5.5 üzerine Php5 ...

22 yorum

  1. ellerinize sağlık hocam böyle paylşımların devamınıda bekleriz iyi çalışmlar.

  2. ya ben google chrome un bişey indirmediği için çıkan uyarıda proxy ayarı mayarı diyodu bende yaptım tüm siteleri açıyo google ı açmıyo yazdıklarından da çok pişey anlamadım (not 12 yaşındayım) annem görürse ölürüm bana yardım edinnnnnn 14:45 e kadar bu sorunu çözmem lazım

  3. Ne istediğini daha detaylı bir şekilde yazarsan konu ile ilgili olmasa da çözmeye çalışalım kardeşim 🙂

  4. Merhaba ngix in ubuntu kurulumu nasıl acaba ve windows üzerinde php mysql kurmak mumkun mu??

  5. Nginx’in ubuntu üzerine nasıl kurulacağını ilerleyen günlerde yeni bir makale ile anlatmayı düşünüyorum.
    Windows’a php ve mysql kurulmasi da mümkündür. Artik microsoft iis te de php destegi mevcut.

  6. Anlatım için teşekkürler, Çok başarılı olmuş.

  7. Anlatım için çok teşekkürler litespeed’i tercih ettim şimdiye kadar ama herkesten nginx hakkında daha olumlu yorumlar duymaya başladım.. belki geçerim

  8. Ben bu makaleyi yazdığım sıralarda nginx halen beta sürümündeydi. Şimdi 1.3.5 development ve 1.2.3 stabil sürümleri mevcut. Litespeed lisanslı olduğundan dolayı herkes tarafından tercih edilemiyor, benim kanaatim şu aşamada nginx ücretsiz ve litespeed kadar güçlü ve yeterli.

    Dilerseniz nginx.org sitesinden yeni özellik, kabiliyet talep edebiliyorsunuz ve gelişim aşamasında bunlar göz önüne alınıyor.

  9. Arif Karaduman

    Benim şu an centos üzerinde plesk+apache çalışan bir vps’im var ve çok işlemci kullanmasından rahatsızım. sanırım bu problem nginx kullanılarak çözülecek fakat sitelerin çalışmasını hiç bozmadan bu anlattıklarınızı uygulayarak apache yi nginx’e çevirebilir miyim? yoksa onun için ayrı bir yöntem mi uygulamamız gerekli?

  10. Arif Bey Merhaba

    Nginx yüklemesi sonrasında config dosyalarını düzenleyerek kesinti yapmadan bu işlemi gerçekleştirebilirsiniz. Bu konuda eğer Plesk nginx kullanımını destekliyorsa plesk supporta bir ticket açarak destek isteyebilirsiniz.

    İyi çalışmalar.

  11. Merhaba Fatih Bey,

    Oncelikle desktek kaynagi oldukca az olan nginx hakkinda bilgilendirme yaptiginiz icin cok tesekkur ederim.

    Bu konuda size danismak istedigim birkac problemim var?

    ubuntu 12.04 server uzeridne nginx 1.28 (source) kurulumu tamamladim.

    kurulumla birlite nginx-upstream-consistent
    nginx-1.2.8 ngx_http_enhanced_memcached_module

    modullerini ekledim.

    amacim nginx’ i memcached ile birlikte kullanmak.

    ancak konfigurasyonda ki hatalarda dolayi islem istegim gibi yurumuyor.

    bu konu beni hakkinda bilgilendirmeniz mumkun mu acaba?

  12. Merhaba Emrah Bey

    Konfigürasyondaki hatalardan kastınız nedir? Sorun yaşadığınız yeri veya sistem loglarını paylaşabilirseniz yardımcı olmaya çalışacağım.

    Bu makaleyi yazdığımda nginx daha henüz geliştirilmeye başlamıştı bu yüzden bu modüller bulunmuyordu, ilerleyen günlerde daha güncel bir makale yazmayı düşünüyorum.

    Bilgilerinize.
    İyi çalışmalar.

  13. Harika kardeş eline koluna sağlık; Artı bir sorum olacak bunu plesk e uyarlayabilirmiyiz ?

  14. Alper Bey Merhaba

    Nginx’i plesk ile kullanabilirsiniz. Sorunsuz geçiş için parallels’e ticket açabilirsiniz.

    Bilginize.
    İyi çalışmalar.

  15. Eline sağlık. Güncel sürüm içinde güncel bir makale yazabilir misin? Kurulumda tıkanmayalım.

  16. Mustafa Kemal

    MerhabaLar elinize sağlık en başta adım adım yazmışsınız herşeyi benim burada sıkıntım ben işletim sistemimi dahi bilmiyorum ama sizden aldığım feyz ile deneyeceğim 🙂

  17. Bir firmadan shared hosting aldım acaba buraya kurabilirmiyim bunu?

  18. Shared hostinglerde bunu yapamazsınız, bu makalede anlatılanlar kendizine ait sunucunuz olması durumunda geçerlidir.

  19. Mühim Değil

    Güzel anlatım emeğinize sağlık. Emeğinize destek olabilmek adına reklamlardan birine tıkladım ve reklam olan sitede zaman geçirdim.

  20. Hey gidi günler

  21. evgenija romanova

    Привет всем! класный у вас сайт!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir