Merhabalar bu makalemizde size Nginx nedir / Nasıl kurulur gibi sorulara cevap arayacağız.
Şimdi sıralamayı başlatalım ve sırayla;
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
Ali kardeşim hakkatten harika bilgiler veriyosun, saygılar sevgiler senin olsun**
Güzel yorumun için teşekkür ederim 🙂 Saygılar Cem 🙂 🙂
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
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.
Astonishingly user friendly website. Great details offered on couple of clicks.
Teşekkürler maykıl :))
How beautiful can I do like you Look into my web blog :: Site kaldırıldı !!!
trade secret 🙂
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ı?
Очень много полезного о стройке
General Information About this produce symptoms of mild sunstroke
Routine Message Fro this outcome
you have to translate this block completely into English and have good sharing
The idea is actually nice 🙂
Wow very very good
Disruption of writing a book from anti-
Thanks a lot
bu ne şimdi amk 😀
Merhaba.sizin yaptığınız kurulumda /etc/nginx/nginx.conf dosyasını düzenliyorsunuz . ama örneğin https://medium.com/kodcular/ubuntu-18-04-e-lemp-nginx-mysql-php-stack-kurulumu-28ba87d478cc burda /etc/nginx/sites-enabled altında düzenleme yapılıyor sebebi nedir acaba ?
Ben Centos üzerinden anlattım diğeri ubuntu
Güzel bir konuya değinmişsiniz makalenizi severek okudum bilgilendirdiğiniz için teşekkürler.
Faydalı ve açıklayıcı bir makale olmuş emeğinize sağlık