Apache2’den Nginx’e Geçiş

Share Button

Merhaba Arkadaşlar,
Uzunca bir süredir ibrahimgunduz.net’i nginx’e geçirmeyi planlıyordum. Her ne kadar bazı istisnai durumlar dışında blog, yüksek trafiğe sahip olmasa da, geçişi kesintisiz olarak gerçekleştirmek istediğim için düzgün bir planlama olmadan bu işlemi gerçekleştirmek istemedim. Daha önce yaptığım bir iki deneme önyüzde olmasa da baackend tarafında hızlıca çözemediğim bazı sıkıntılara neden olduğundan kısa sürede tekrar geri dönmek zorunda kalmıştım.

Bugün bu geçiş işlemini tekrar gerçekleştirip siteyi nginx üstünde çalışr hale getirerek edindiğim tecrübeyi sizlerle paylaşmak istedim.

Gerekli Paketlerin Kurulumu:

* Nginx son sürümünün barındırıldığı repoyu apt paket yöneticisine bildirmek için birazdan kullanacağım komutu çalıştırabilmek için python-softwareproperties paketini yükledim.

$ sudo apt-get install python-software-properties

* Nginx paketinin bulunduğu repoyu tanımladım.

$ sudo add-apt-repository ppa:nginx/stable

* Paket listesini güncelledim ve nginx paketini kurdum.

$ sudo apt-get update
$ sudo apt-get install nginx

* Aslında biraz önce de belirttiğim gibi uygulama sunucuma çok fazla trafik gelmiyor ancak yine de sonuçlarını görebilmek adına PHP proseslerini yönetmesi için PHP FPM kurulumunu gerçekleştirdim.

$ sudo apt-get install php5-fpm

Artık yavaştan sunucu konfigüre etmeye başlayabiliriz.

PHP-FPM Konfigürasyonu:

* Dilediğiniz metin düzenleyicisi ile /etc/php5/fpm/php.ini dosyasını açın ve cgi.fix_pathinf=1 şeklindeki satırı aşağıdaki biçimde değiştirin.

cgi.fix_pathinfo=0

* Yine dilediğiniz metin düzenleyici ile /etc/php5/fpm/pool.d/www.conf dosyasını açın ve aşağıdaki değişiklikleri gerçekleştirin.

listen = /var/run/php5-fpm.sock
listen.group = www-data

Nginx Konfigürasyonu:

* Öncelikle web sitemiz için nginx in varsayılan konfigürasyonunu kopyalayarak yeni bir sanal sunucu oluşturalım.

$ cd /etc/nginx/sites-available
$ sudo cp default ibrahimgunduz.net

* Oluşturduğumuz sanal sunucu konfigürasyonunu aşağıdaki biçimde düzenleyin.

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /path/to/ibrahimgunduznet/httpdocs;
        index index.php index.html index.htm;

        server_name www.ibrahimgunduz.net ibrahimgunduz.net;

        location / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/html;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
        }

        error_log  /var/log/nginx/ibrahimgunduznet-error.log  error;
        access_log /var/log/nginx/ibrahimgunduznet-access.log;
}

* Nginx in sanal makine konfigürasyonunu işlemesi için apache de olduğu gibi sites-enabled klasörü altında konfigürasyonun sembolik bağlantısını oluşturuyoruz.

$ sudo ln -s /etc/nginx/sites-available/ibrahimgunduz.net /etc/nginx/sites-enabled/

Artık hazırız. Şimdi mevcut apache servisini durdurup nginix ve php-fpm ile ilgili yaptığımız değişiklikleri yayına almaya hazırız. Aşağıdaki komutları çalıştırıp apache servisini durup nginx ve php-fpm servislerini yeniden başlatalım.

$ sudo service apache2 stop
$ sudo service php5-fpm restart
$ sudo service nginx restart

Herhangibir sorunla karşılaştığınızda nginx servisini durdurup, apache2 servisini başlatarak geri dönüş yapabilirsiniz.

Referanslar:

https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-debian-7

https://www.digitalocean.com/community/tutorials/how-to-install-the-latest-version-of-nginx-on-ubuntu-12-10

https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-nginx-on-ubuntu-14-04

http://stackoverflow.com/a/22334781

http://stackoverflow.com/questions/1706111/where-can-i-find-the-error-logs-of-nginx-using-fastcgi-and-django

Share Button

About İbrahim Gündüz

1983 yılında İstanbul’da doğdu. İlkokul yıllarında cobol ve basic le olan tanışması, yazılıma olan ilgisini arttırdı 2005 yılında. Uludağ Üniversitesi Teknik Bilimler Meslek Yüksek Okulu Elektronik bölümünden mezun olan Gündüz, çeşitli alanlarda faaliyet gösteren kurumlarda yazılım geliştirici olarak görev almıştır.
Mesleki ilgi alanları, ölçeklenebilir sistemler, uygulama entegrasyonları ve ödeme sistemleridir.
Halen Markafoni back end geliştirici olarak çalışmaktadır.

8 Comments

  • Osman Yakuphanogullarindan
    Eylül 30, 2014 - 1:18 pm | Permalink

    Merhaba sevgili Ibrahim,
    Nacizane tavsiyem nginx ile fpm’i baglarken unix socket yerine tcp port kullanmandir.

    Kolay gelsin.

    • Eylül 30, 2014 - 1:26 pm | Permalink

      Dostum selam,
      Aslında bilinçli olarak yaptığım birşey değildi ama php-fpm’in varsayılan konfigürasyonunda aynen senin dediğin gibi IP:Port eşlemesi kullanıldığı halde kullandığım kaynaklarda socket kullanılmış. Şimdi senin yorumun üstüne ayaküstü birkaç yere baktım unix socket kullanımının TCP socket kullanımına göre daha performanslı olduğunu yazmışlar. Nedeni de unix socket context inde daha az veri aktarımı yapıldığı geçiyor. Sen ne dersin ?

      • Eylül 30, 2014 - 1:31 pm | Permalink

        Bu arada bu bilgiyi biraz önce güvenlilir kaynaklardan doğruladım. Yarın bununla ilgili daha detaylı birşeyler yazmaya çalışacağım. Ama senin fikrini de almak istiyorum karşılaştıralım.

        • Osman Yakuphanogullarindan
          Eylül 30, 2014 - 3:29 pm | Permalink

          Ben yorumumda Unix socket performanssizdir, TCP daha performanslidir diye birsey demiyorum. Buradaki karsilastirma sadece performans ile olculmemeli.

          Unix socket dogasi geregi akis kontrolu, header, error checking, routing gibi mekanizmalara sahip olmadigindan daha hizlidir. Buradaki hiz artisi pratikte maksimum %5 kadar oluyor.

          Unix socket’in problemi concurrent connection ile basliyor. TCP bu noktada daha olceklenebilir.

          Mesela senin sunucu anlik 50 concurrent’tan sonra cakiliyor.
          http://imgur.com/wcsCtfw

          • Kadir
            Ekim 7, 2014 - 2:24 pm | Permalink

            Sunucuların çakılması unixsocket’ten dolayı değilde daha çok fpm’de process sayısından kaynaklanıyordur.
            502 bad gateway çıktısı genelde nginx’in fpm’den cevap alamaması sonucu oluşur.

  • Cetin KOCAMAN
    Ekim 1, 2014 - 5:03 am | Permalink

    Bence başarılı bir geçiş olmuş tebrikler . Diğer taraftan benim en zorlandığım noktalar apache2 den Nginx e geçişlerde htaccess dosyalarının nginx e uyarlanması ve nginx conf da yazılması .
    Hazır PHP E-ticaret paketlerinde çok sancılı denemelerim olmuştur :(
    Ancak araştılıp çözülemeyecek birşey değil .

  • Ekim 1, 2014 - 9:48 am | Permalink

    Güzel bir yazı olmuş. Ellerine sağlık.

    Ancak http://ggypmanifest.org/ da sanıyorum aynı serverda barınıyor. Onun için bir virtual host tanımlamamış olabilir misin? Şu an bloğuna yönleniyor.

    • Ekim 1, 2014 - 10:44 am | Permalink

      Eyvallah dostum. Onu atlamışım. Şu anda ggypmanifest.org da yayında. Haber verdiğin için teşekkür ederim.

  • Bir Cevap Yazın

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