29 Haz, 2016

Nginx nedir / Nasıl kurulur

#Rich Snippets

Author :Ali Çömez
Mail : root@alicomez.com
Lang : Turkish / Türkçe
Publisher: Wordpress
Raiting: 17 oy/ Ortalama

Merhabalar bu makalemizde size Nginx nedir / Nasıl kurulur gibi sorulara cevap arayacağız.

Şimdi sıralamayı başlatalım ve sırayla;

Nginx nedir / Nasıl kurulur

Nginx nedir ?

Nginx aslen rus yapımı olan (Igor Sysoev) mail.ru için yapılmış mail sunucudur, fakat daha sonra geliştirilip tüm platformlarda kullabılabilir hale gelen hızlı stabil ve hafif bir web sunucudur.

Apache’ye oranla %400 daha performanslı ve hızlı olduğu testlerle kanıtlanmıştır. Single Thread yapısıyla sayfayı tek hamlede yükleyerek apache’ye oranla gözle görülür bir hız farklı sunmaktadır. Ve Nginx, Apache ve Litespeed ile karşılaştırıldığında en az kaynak tüketmesiyle de gözlerde +1 almıştır.

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.

* 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.

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

Gerekli YUM Repo’larının Kurulması ve Nginx kurulumu

Nginx CentOS’un base bulunmuyor, bu nedenle nginx için EPEL, base repo’da bulunan php-fpm’in daha güncel sürümü için ise remi isimli ek repoları kurmak icap ediyor.

Dolayısı ile önce bu repoları sisteme tanıtmamız gerekiyor.

 

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Şimdi Yum üzerinden Nginx kurulumunu yapabliriz.

#yum install nginx
(# karakterini eklemeyeceksiniz )

şimdi Nginx’i başlangıça ekleyelim.

# chkconfig nginx on
# service nginx start

Veya bu şekilde de kurulum yapabilirsiniz (yukardaki hata verirse bunu deneyin)

#yum -y install nginx php-fpm mysql mysql-server php-mysql php-pdo

şimdi servisleri yeniden başlatalım arkadaşlar.

service nginx restart
service php-fpm restart
service mysqld restart

Şimdi Nginx panelsiz şekilde kullanıma haazırdır arkadaşlar.
panelsiz kullananlar için birde site ekleme anlatalım

Nginx Site ekleme

useradd yeni-site.com
chmod 0711 /home/yeni-site.com
mkdir -p /home/yeni-site.com/public_html
chown -R yeni-site.com:yeni-site.com /home/yeni-site.com/public_html

Şimdi site konfigürasyon dosyası da oluşturalım.

nano /etc/nginx/conf.d/yeni-site.com.conf

Şimdi de bu osya içine aşağıdaki kodları ekleyin (eklemeden önce kod içinden kendinize uygun olarak düzenleyin)

 #
 # $site_ismi icin nginx konfigurasyon dosyasi
 # kodespa.net
 #
 server {
 listen       80;
 server_name  yeni-site.com;
 
 #charset koi8-r;
 
 #access_log  logs/host.access.log  main;
 
 # Load configuration files for the default server block.
 include /etc/nginx/default.d/*.conf;
 
 location / {
 root   /home/yeni-site.com/public_html;
 index  index.php index.html index.htm;
 try_files $uri @kodespa_rewrite;
 }
 
 #Statik dosyalari direk nginx ile isleyelim..
 #baska dosyalarda ekleme ihtiyaci duyarsaniz asagidaki listeye dahil edebilirsiniz.
 location ~*.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$ {
 # 1 Aylik cache suresi veririz.
 expires 1M;
 root /home/yeni-site.com/public_html;
 }
 
 # url rewrite ozelligi kismi
 # kodespa.net
 location @kodespa_rewrite {
 #rewrite ^/$ /index.php last;
 rewrite ^/index/([a-z0-9_-]*)/?$ /index.php?kodespa=\$1 last;
 }
 
 error_page  404              /404.html;
 location = /404.html {
 root   /home/yeni-site.com/public_html;
 }
 
 # redirect server error pages to the static page /50x.html
 #
 error_page   500 502 503 504  /50x.html;
 location = /50x.html {
 root   /home/yeni-site.com/public_html;
 }
 
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location ~ \.php$ {
 root           /home/yeni-site.com/public_html;
 fastcgi_pass   127.0.0.1:9000;
 fastcgi_index  index.php;
 fastcgi_param  SCRIPT_FILENAME  /home/yeni-site.com/public_html$fastcgi_script_name;
 include        fastcgi_params;
 }
 
 }

Şimdi siteyi ekledik ayarlarını yaptık ve Nginx e restart atalım.

service nginx restart

Şimdi birde şöyle bir durum var bazı durumlarda 80.port açık olmayabilir ve Nginx bu porta gelen istekleri engeller bunun için biz bu 80.portu açalım.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Kaydedip servisi yeniden başlatalım.

service iptables save
service iptables restart

Şimdi php-rpm programında düzenleme yapmamız gerekiyor

nano /etc/php-fpm.d/www.conf

dosya içinde apache yazan yerleri nginx olarak değiştirelim.

Şimdi de Nginx yapılandırmasını yapalım

Yapılandırma kısmında ilk editleyeceğimiz dosya temel ayarların bulundugu 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şaltalım:

# cp -pr /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# > /etc/nginx/nginx.conf

Ardından dosyayı editliyoruz:

nano /etc/nginx/nginx.conf

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

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
 
# Nginx'i calistiracak kullanici
user              nginx;
 
# Kac adet worker calisacak. Sunucunuzdaki core sayisi kadar arttirabilirsiniz.
worker_processes  1;
 
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
 
events {
    # Maxclient'in belirlenmesinde kullanilan parametre. [maxclients = worker_processes * worker_connections]
    worker_connections  1024;
 
}
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    # Log formati
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    server_tokens off;
    sendfile        on;
    keepalive_timeout  15;
    tcp_nopush     on;
    tcp_nodelay        on;
    client_body_timeout   10;
    client_header_timeout 10;
    send_timeout          10;
 
    # Gonderilen veriyi gzip'le. 
    # CPU costu vardir ancak bandwidth kullanimi ve response time duser. Cpu durumuna gore off yapilablir.
    gzip on;
    gzip_min_length  1100;
    gzip_types    text/plain application/x-javascript text/xml text/css;
    gzip_vary on;
 
    # /etc/nginx/conf.d dizinindeki dosyalari yapilandirmaya dahil et.
    include /etc/nginx/conf.d/*.conf;
 
}

Editleyeceğimiz 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ında yedeğini alalım ve içini boşaltalım:

# cp -pr /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
# > /etc/nginx/conf.d/default.conf

Şimdi düzenleyelim

# nano /etc/nginx/conf.d/default.conf
Sonrasında da aşağıdaki önergeleri ekleyeceğiz. Bu dosya içerisinde php dosyalarının nasıl process edileceği ile ilgili tanımlamalar da 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ızda 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. Ben yapılandırmayı unix socket’e göre anlatacak olsam da aşağıdaki yapılandırmanın comment bölümlerinde önemli parametreler için comment satırları var. php-fpm’le tcp üzerinden konuşmak için gerekli ayarlar da ilgili alanda comment olarak eklenmiş durumda.
#
# The default server
#
server {
    listen       80 default_server;
 
    # server_name olarak alan adi da yazilabilir; bu sekilde birakilirsa
    # catchall gorevi gorur. Bu sunucuyu gosteren tum alan adlari icin default vhost.
    server_name  _;
 
    # Nginx kok dizini ve default dokumanlar.
    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }
 
    # Bulunamayan icerikle alakali hatalari /404.html'e yonlendir. 
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
 
    # 5x server error'lari /50x.html sayfasina yonlendir.
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
 
    # php dosyalarinin nasil islenecegi ile ilglii bolum:
    location ~ \.php$ {
        root   /usr/share/nginx/html;
 
        # fpm'e socket uzerinden erismek icin (ki bir bu sekilde yapiyoruz):
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 
        # Alternatif olarak php-fpm'e TCP uzerinden erismek icin (default yontem bu ama biz kullanmiyoruz.)
        # fastcgi_pass   127.0.0.1:9000;
 
        # NOT: Yukarıdaki parametreyi uncomment etmeden once, 
        # 1 - Ayni dosyadaki fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; ibaresini commnet out edin.
        # 2 - /etc/php-fpm.d/www.conf dosyasindaki listen = /var/run/php-fpm/php-fpm.sock satırını uncomment out
        # etmeniz ve yerine listen = 127.0.0.1:9000 ekledikten sonra fpm'i restart etmeniz gerekir.
 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
 
    # .htaccess dosyalarina erisime izin verme.
    location ~ /\.ht {
        deny  all;
    }
 
    # favicon dosyalari icin access log'a yazma ve 204 (No Content) status kodu dondur. 
    location ~*  \.(ico)$  {
    access_log off;
    log_not_found off;
    try_files /favicon.ico =204;
    }
 
    # static contet dosyalarinin 72 saat cache'te tutulmasini soyle. Access log'a yazma.
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
    access_log off;
    expires 72h;
    }
}

Son olarak da php-fpm ile ilgili ayarları yapacağız. Ancak bu dosyanın içini boşaltmayacağımız için yedeklemeye gerek yok. Doğrudan dosyayı editleyin:

nano /etc/php-fpm.d/www.conf

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.

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php-fpm.sock

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 değişikliklerin devreye alınması için hem php-fpm başlatalım ve nginx’i restart edelim:

# service php-fpm start
# service nginx restart

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

netstat -lx |grep php

Çıktıda ilgili socket’i görebilmeniz gerekir:

unix  2      [ ACC ]     STREAM     LISTENING     27826  /var/run/php-fpm/php-fpm.sock

Ayrıca, nginx’in default document root’u olan /usr/share/nginx/html dizinine aşağıdaki info.php dosyasını ekleyip browser üzerinden çağırabilirsiniz. (Bu dosyayı güvenlik açısından sunucuda bırakmayın ya da en azından ismini tahmin edilmesi zor bir şey yapın.)

<?php
 
// Show all information, defaults to INFO_ALL
phpinfo();
 
// Show just the module information.
// phpinfo(8) yields identical results.
phpinfo(INFO_MODULES);
 
?>

Tamamdır. Herşey sorunsuz gittiyse php bilgilerinizi görebilmeniz gerekir.

Saygılarımla;

Ali Çömez

Kaynakça;

[1] Syslogs [2] Kuaza [3]Fatihsolen [5] Wikipedia [6]Ana Kaynak Nginx

Bu yazı 3586 Defa okundu, Beğendiyseniz alttaki benzer yazıları okumanızı öneririm, isterseniz site içinde farklı içerikleri arama yapabilirsiniz.

#Advanced Policy Firewall (APF) , #TMP klasör boyutu artırma , #Güvenli SSH resetleme , #cPanel güncellemeye zorlama , #İmunify360 nedir ve [Kurulumu] , #CentOS Rsync Kurulum ve kullanım , #Engintron Nedir ve [Kurulumu] , #Opera Neon Tarayıcı , #CentOS 7 Ossec Kurulumu , #Cpanel Log Kayıtları , #Whm Nginx Kurulumu , #Centos’a AVG Scan Kurulum ve kullanım ,

Ali Çömez / Slaweally

Kaldırımda yürürken beyaz çizgilere basmamaya çalışan, Sabah yüzünü yıkarken dirseklerinden su sızmasından nefret eden, Dönerle ayranı aynı anda bitirebilen, son dakikada otobüsü kaçırsada grur yapıp arkasından koşmayan... bir insanım :)

  1. cem766 dedi ki:

    Ali kardeşim hakkatten harika bilgiler veriyosun, saygılar sevgiler senin olsun**

  2. ismail dedi ki:

    Slm AliBey
    linux işletim sisteminde 3 ayrı wordpress site açmak istiyorum.
    fakat bu sitelere external single ip den nasıl ulaşırım.
    İnternal tüm web serverlarda denedim.
    Nginx bu konuyu çözer mi
    DNS kayıtarında A ve CNAME de tanımlama yaparak. detaylı bilgi verirseniz
    sevinirim

    • Ali Çömez dedi ki:

      Selamlar.
      Sorunuzda tam manasıyla ne anlatmak istediğinizi anlayamadım ancak anladığım kadarıyla;
      3 wordpress siteniz var ve her site için farklı ip'den erişim istiyorsunuz galiba örneğin;
      /*———————–*/
      ali.com: 133,13,38
      veli.com: 94,66,76,99
      yavuz.com 8,98,12,65
      /*———————–*/
      Şimdi anlatılmak istenen bu ise kontrol panelinizden (cpanel, plesk, direct admin vs) yazarsanız yardımcı olmaya çalışırım.
      Ek olarak Nginx olayı ise Apache oranla yapılandırması çok daha zor olduğunu söylemem gerekiyor. Anlatmak istediğiniz yukarda bahsettiğim şekilde ise kontrol panelini yazarsanız ona göre yardımcı olmaya çalışırım.

  3. Molinarozorm dedi ki:

    Astonishingly user friendly website. Great details offered on couple of clicks.

  4. AJamesdiasp dedi ki:

    How beautiful can I do like you Look into my web blog :: Site kaldırıldı !!!

  5. murat ç. dedi ki:

    2017-03-13 22:36:19 Access 66.249.79.128 301 GET /solvyevozxnqb/11979_fz0137768945175m.great HTTP/1.1 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 178 nginx erişimi

    gibi bir sürü hata alıyorum log dan neden kaynaklanır bir fikriniz var mı?

  6. Larryloata dedi ki:

    Очень много полезного о стройке

  7. cialis costs at walmart dedi ki:

    General Information About this produce symptoms of mild sunstroke

  8. canadian online pharmacies dedi ki:

    Routine Message Fro this outcome

  9. RobertPix dedi ki:

    you have to translate this block completely into English and have good sharing

  10. Effective Essay dedi ki:

    Wow very very good
    Disruption of writing a book from anti-

    Thanks a lot

  1. 22 Nisan 2017

    […] Bunun dışında Sunucuya tamamen Nginx Kurulumu yapmak için bu yazıma bakabilirsinizNginx nedir / Nasıl kurulur makalemi de incelemenizi […]

Bir Cevap Yazın

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

Spam olmadığınızı doğrulamak için aşağıdaki alana slaweally yazın