Merhaba,

Başlangıç itibariyle birkaç uyarım ve dipnotum olacak. Öncelikle bu anlatım panel olmayan bir sunucuda gerçekleştirilmiştir. (cPanel, Vesta vs. paneller varsa buna uygun Admin panellerini yükleyip geçebilirsiniz.)
İkinci olarak, anlatımda CentOS 6.8 baz alarak anlatacağım. CentOS 7 için base repo yollarını paylaşacağım. Kendi sisteminize göre yazdığım komutları uyarlayıp çalıştırın. Configuration bölümü aynı. Üçüncü olarak, syslogs.org’dan Çağrı Abi’ye teşekkürler. Anlatımda onun config içeriklerinden faydalanacağım.

Dipnot: Bu yapılandırma içeriğini kendi yapınıza ve sunucu kapasitesine göre muhakkak düzenleyin. Bu anlatım herkese açık olduğundan güvenlik açığı teşkil edebilir.

Kurulumlardan önce her şeyin başı update..

Nginx, CentOS’un base repo’da bulunmuyor. O nedenle yolu öncelikle göstermek gerekiyor.

Eğer işletim sisteminiz CentOS 7 ise aşağıdaki yolu kullanın.

Şimdi Nginx yüklemesini yapabilirsiniz.

Yükleme tamamlandıktan sonra aşağıdaki gibi bir sayfayla karşılaşmalısınız.

linux

Sonraki adımdaysa sistem açılışında Nginx otomatik başlatmalı ve şu an için Nginx restartlamalısınız. CentOS 6.8 kullanıyorsanız aşağıdakini kullanın.

CentOS 7 kullanıyorsanız aşağıdakini kullanın.

Kurulum böylelikle bitti. Şimdi tarayıcıya sitenizin IP adresini yazdığınızda sayfanızın gelmesi lazım. Eğer ki iptables üzerinde 80. ve 443. portu açmadıysanız sayfanız gelmeyecek ve php-fpm kurulu değilse .php dosyalarınız çalışmayacaktır. Yapılandırma ayarlarına geçmeden önce aşağıdaki iki kuralı iptables ekleyip, 80. ve 443. portları açın.

CentOS 6.8 kullanıyorsanız aşağıdakini kullanın.

CentOS 7 kullanıyorsanız aşağıdakini kullanın.

Bu işlemi yaptıktan sonra efsanevi nginx default sayfasıyla karşılaşmanız gerekiyor. (bkz: http://linux.istanbul)
nginxŞimdi geriye php/mysql yüklemek ve nginx config düzenlemek kaldı.
Default olarak php 5.3 sürümü yükleniyor (yum install php dediğinizde) ama ben 5.6 sürümünün de kurulumunu göstereceğim. Aşağıdaki base repo yolunu gösterin. (CentOS 6.x sürümüyse)

Sonra yukarıdaki php install satırını kopyalayın. Tek seferde tüm paketleri indirecektir. CentOS 7 kullanıyorsanız da aşağıdaki base repoyu kullanabilirsiniz.

Sonra aynı install komutunu kullanmalısınız. Böylelikle php 5.6 sürümü yüklenmiş olacaktır.

Bu kurulum tamamlandıktan sonra php.ini’ye girip düzenleme yapmalısınız. /etc altında bulunan php.ini’yi bir metin editörüyle açıp, cgi.fix_pathinfo=1 içeriğini bulup, başındaki noktalı virgülü kaldırıp satırı aktifleştirin.
Sonra satırın değerini 0 (sıfır) yaparak düzenleyin.

Bunu ne için yaptığımızdan bahsedeyim. Nginx yapılandırmasını yaparken, uzantısı php olan her şeyi process etmesi için php-fpm’e iletmesini belirteceğiz. Eğer cgi.fix_pathinfo devrede olursa ve client sitenize girdiğinde https://exevolium.com/falanca.jpg/filanca.php gibi bir istek gönderirse ve filanca.php sistemde yoksa, Nginx hangi dosyanın işleneceğini tahmin etmeye çalışır ve herhalde falanca.jpg diyerek işlenmesi için FastCGI’a gönderir. İşte kötü niyetli birisi sistemde php gömülü olan bir jpg yükleyip göndereceği URL’de önde kendi upload ettiği dosyanın ismini ardından da sistemde olmayan bir php dosyasını geçirirse, sistem olmayan php’yi bulamadığı için jpg dosyasının işlenmesi için FastCGI’a iletecek ve ilgili jpg dosyasında gömülü php kodları çalıştırılacaktır.

Şimdi dosyayı kaydederek çıktıktan sonra php-fpm sistem açılışına eklemelisiniz.

Şu an sistemde hem Nginx hem de php-fpm çalışır hale geldi.

Nginx Yapılandırması

Yapılandırma kısmında ilk editleyeceğiniz dosya temel ayarların bulunduğu ana yapılandırma dosyası olan /etc/nginx/nginx.conf.
Şimdi aynı dizine bu dosyanın bir yedeğini aldıktan sonra içerisini boşaltın:

Ardından dosyayı editleyin:

Sonrasında da aşağıdaki önergeleri dosyaya yazın:
(Not: Bazı önemli parametrelerin açıklamaları comment satırlarında yazmaktadır. Değerleri kendi ihtiyaçlarınız doğrultusunda düzenleyebilirsiniz.)

Editleyeceğiniz bir diğer yapılandırma dosyası ise, /etc/nginx/conf.d/ dizini altında bulunan default.conf. Bu dosya default website tanımlarının yapıldığı alandır. Şimdi bu dosyanın da yedeğini alarak içeriğini boşaltın:

Ve şimdi dosyayı editleyin:

Sonrasında da aşağıdaki önergeleri eklemelisiniz. Bu dosya içerisinde php dosyalarının nasıl process edileceği ile ilgili tanımlamalar yapılmakta. Php-fpm üzerinden php çalıştırmanın iki yolu bulunuyor. Default ayarlarda php-fpm kurulduğu zaman TCP 9000. portu dinlemektedir, ve Nginx yapılandırmanız da tüm php dosyalarını bu portun ucundaki fpm’e gönderirsiniz. Bu işlemi tcp üzerinden yapmak özellikle yoğun kullanılan sunucularda TCP stack üzerine gereksiz yük getireceği için bir diğer yol olan unix socket üzerinden bağlanmak daha mantıklı olabilir. Bu yapılandırmayı unix socket’e göre anlatacak olsam bile aşağıdaki yapılandırmanın comment bölümlerinde önemli parametreler için yorum satırları var. php-fpm’le tcp üzerinden konuşmak için gerekli ayarlar ilgili alanda comment olarak eklenmiş durumdadır.

Son olarak da php-fpm ile ilgili ayarları yapmalısınız. Ancak bu dosyanın içini boşaltılmasına gerek yoktur. Doğrudan dosyayı editleyin:

Dosyadaki listen = 127.0.0.1:9000 satırını devre dışı bırakıp yerine listen = /var/run/php-fpm/php-fpm.sock ibaresini ekleyin.

Aynı dosyada Apache’deki StartServers, MinSpareServers, MaxSpareServers parametrelerine benzer şekilde pm.max_children, pm.start_servers, pm.min_spare_servers ve pm.max_spare_servers gibi parametreler bulunmaktadır. Bu değerler uygulamanıza ve trafiğinize bağlı olarak değişiklikler gösterdiği için isteğiniz doğrultusunda arttırıp azaltabilir ve size uygun değerleri bulabilirsiniz. Nasıl hesaplanacağı ile ilgili bilgiler comment olarak yazılıdır.

Yukarıdaki düzenlemeyi yaptıktan sonra dosyayı kaydedin ve çıkın.

Son olarak da aşağıdaki düzenlemeyi yapmalısınız. Bu işlem sonunda tüm konfigürasyon bitiyor ve sağlıklı şekilde Nginx kurulumunu tamamlamış olacaksınız. Lütfen /etc/php-fpm.d/www.conf yolunu metin editörüyle açın.

www.conf içine girdiğinizde orada aşağıdaki satırları bulun ve düzenleyin.

Öncelikle başındaki ; kaldırın ve nobody yazan yere nginx yazın. Bu nginx kullanıcısıdır. Siz kurulumu yaparken sistem nginx kullanıcısını otomatik açtı. Bu düzenlemeyi yapmazsanız yetkilendirmeden dolayı php dosyalarını açmaya çalıştığınızda Error sayfasıyla karşılaşacaktınız. Bunu da yaptıktan sonra, değişikliklerin devreye alınması için hem php-fpm başlatın ve nginx’i restart edin:

Şimdi php-fpm bir unix socketi dinliyor olmalı. Test etmek için netstat ile kontrol edebilirsiniz:

Yukarıdaki gibi bir çıktı almanız gerekiyor.

Eğer tüm bunlar sorunsuzsa artık /usr/share/nginx/html altına site dosyalarınızı atarak sitenizi yayına alabilirsiniz. Kolaylık sağlaması için güncel php sürümüyle kurulumu anlattım. Sonrasında MySQL ve phpmyadmin yükleyerek yapılandırmayı devam ettirebilirsiniz. Bu iki kurulumu da daha önce anlatmıştım.

Buradan o konuya geçebilirsiniz.