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.
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.
ellerinize sağlık hocam böyle paylşımların devamınıda bekleriz iyi çalışmlar.
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
Ne istediğini daha detaylı bir şekilde yazarsan konu ile ilgili olmasa da çözmeye çalışalım kardeşim 🙂
Merhaba ngix in ubuntu kurulumu nasıl acaba ve windows üzerinde php mysql kurmak mumkun mu??
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.
Anlatım için teşekkürler, Çok başarılı olmuş.
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
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.
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?
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.
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?
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.
Harika kardeş eline koluna sağlık; Artı bir sorum olacak bunu plesk e uyarlayabilirmiyiz ?
Alper Bey Merhaba
Nginx’i plesk ile kullanabilirsiniz. Sorunsuz geçiş için parallels’e ticket açabilirsiniz.
Bilginize.
İyi çalışmalar.
Eline sağlık. Güncel sürüm içinde güncel bir makale yazabilir misin? Kurulumda tıkanmayalım.
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 🙂
Bir firmadan shared hosting aldım acaba buraya kurabilirmiyim bunu?
Shared hostinglerde bunu yapamazsınız, bu makalede anlatılanlar kendizine ait sunucunuz olması durumunda geçerlidir.
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.
🙂 Teşekkürler.
Hey gidi günler
Привет всем! класный у вас сайт!
Fatih Hocam Selamlar,
Ngnix üzerinde vhost ve openresty kurulumu ile ilgili bi makale yazarsanız çok makbule geçer.
İyiki varsınız.
Bu makaleyi yazalı 9 sene gibi bir zaman geçmiş. O zamandan bu zamana çok şey değişti, gelişti. Daha kapsamlı bir makale yazmak yerinde olacaktır. Tavsiyeniz ve güzel dilekleriniz için teşekkürler notlarımın arasına alıyorum.