Debian 8 Üzerine Nginx Kurulumu Kapsamlı Rehberi
Nginx (engine-x olarak telaffuz edilir), Rus geliştirici Igor Sysoev tarafından oluşturulan ve dünya genelinde en popüler web sunucularından biri haline gelen, açık kaynaklı, yüksek performanslı bir HTTP ve ters proxy sunucusu, bir proxy e-posta sunucusu (IMAP/POP3) ve genel bir TCP/UDP proxy’sidir. Özellikle yüksek trafikli web siteleri için tasarlanmış olup, düşük bellek kullanımı ve yüksek eşzamanlı bağlantı kapasitesi ile bilinir. Nginx, statik içerik sunma, yük dengeleme, SSL sonlandırma ve önbellekleme gibi birçok gelişmiş özelliği sayesinde modern web mimarilerinin vazgeçilmez bir parçasıdır.
Bu rehber, Debian 8 (Jessie) işletim sistemi yüklü bir sunucuya Nginx’in nasıl kurulacağını ve temel yapılandırmasının nasıl yapılacağını adım adım açıklamaktadır. Debian 8, kararlılığı ve güvenilirliği ile bilinen bir Linux dağıtımı olmasına rağmen, artık “eski kararlı” bir sürüm olarak kabul edilmektedir ve güncel sürümlere göre bazı paketlerde farklılıklar gösterebilir. Ancak Nginx’in temel kurulumu ve yapılandırması büyük ölçüde benzer kalır. Bu rehber, özellikle Debian 8 ortamında çalışan sistem yöneticileri ve geliştiriciler için detaylı bir yol haritası sunmayı amaçlamaktadır.
Nginx Neden Tercih Edilmeli?
Nginx’in bu kadar popüler olmasının başlıca nedenleri şunlardır:
* Yüksek Performans: Özellikle eşzamanlı bağlantıları işleme konusunda Apache gibi diğer web sunucularına göre daha üstün performans sergiler. Olay tabanlı, asenkron mimarisi sayesinde her bağlantı için ayrı bir işlem veya iş parçacığı oluşturmak yerine, tek bir işlemle binlerce bağlantıyı yönetebilir.
* Düşük Kaynak Tüketimi: Apache’ye kıyasla daha az bellek ve CPU kaynağı kullanır, bu da daha düşük maliyetli sunucularda bile yüksek verimlilik anlamına gelir.
* Ölçeklenebilirlik: Yük dengeleme ve ters proxy yetenekleri sayesinde, web uygulamalarının yatay olarak ölçeklenmesini kolaylaştırır. Trafik arttığında, Nginx gelen istekleri birden fazla arka uç sunucuya dağıtabilir.
* Zengin Özellik Seti: Statik dosya sunumu, önbellekleme, SSL/TLS sonlandırma, HTTP/2 desteği, WebSocket proxy’si ve daha fazlasını sunar.
* Güvenilirlik: Uzun yıllardır büyük ölçekli uygulamalarda kullanılmış ve kendini kanıtlamış, kararlı bir yazılımdır.
Ön Gereksinimler
Nginx kurulumuna başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:
* Debian 8 (Jessie) Yüklü Bir Sunucu: Fiziksel bir sunucu, sanal makine (VM) veya bulut tabanlı bir VPS (Virtual Private Server) olabilir. Bu rehberdeki komutlar Debian 8 üzerinde test edilmiştir.
* Root veya Sudo Yetkilerine Sahip Bir Kullanıcı: Kurulum ve yapılandırma işlemleri için sistem genelinde değişiklik yapma yetkisine sahip olmanız gerekmektedir. Güvenlik açısından root kullanıcısı yerine sudo yetkilerine sahip bir kullanıcı ile çalışmanız önerilir.
* İnternet Bağlantısı: Paket depolarından Nginx ve diğer gerekli paketleri indirmek için aktif bir internet bağlantısı şarttır.
* Temel Linux Komut Bilgisi: apt, systemctl, nano gibi temel Linux komutlarına aşina olmanız süreci kolaylaştıracaktır.
* Alan Adı (İsteğe Bağlı ama Önerilir): Eğer bir web sitesi barındıracaksanız, bir alan adına sahip olmanız ve DNS kayıtlarını sunucunuzun IP adresine yönlendirmiş olmanız gerekmektedir. Bu, özellikle SSL/TLS sertifikası alırken kritik öneme sahiptir.
Adım 1: Sistemi Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce sistemin paket listesini güncellemek ve mevcut paketleri en son sürümlerine yükseltmek iyi bir uygulamadır. Bu, potansiyel bağımlılık sorunlarını önler ve güvenlik güncellemelerini almanızı sağlar.
Sunucunuza SSH ile bağlanın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
* sudo apt update: Paket listelerini, depolardaki en yeni yazılım sürümleri hakkında bilgi edinmek için günceller.
* sudo apt upgrade -y: Mevcut tüm paketleri, etkileşimli soru sormadan (-y bayrağı ile) yükseltir.
* sudo apt dist-upgrade -y: Daha karmaşık bağımlılık değişikliklerini ve çekirdek yükseltmelerini içeren yükseltmeleri işler. Bu, özellikle büyük sürüm yükseltmelerinde faydalıdır ancak Debian 8 için genellikle upgrade yeterlidir.
* sudo apt autoremove -y: Artık ihtiyaç duyulmayan bağımlılık paketlerini temizler.
Bu işlemler biraz zaman alabilir. İşlem tamamlandığında, sunucunuzun en güncel paketlere sahip olduğundan emin olabilirsiniz.
Adım 2: Nginx Paketini Kurma
Debian depoları, Nginx’in kararlı bir sürümünü içerir. Bu, Nginx’i kurmanın en basit ve en güvenilir yoludur.
Nginx’i kurmak için aşağıdaki komutu kullanın:
sudo apt install nginx -y
Bu komut, Nginx paketini ve gerekli tüm bağımlılıklarını sisteminize kuracaktır. Kurulum tamamlandıktan sonra, Nginx servisi otomatik olarak başlatılmalıdır.
Kurulumun başarılı olduğunu doğrulamak için Nginx’in sürümünü kontrol edebilirsiniz:
nginx -v
Çıktı, yüklü Nginx sürümünü gösterecektir, örneğin nginx version: nginx/1.6.2. (Debian 8 depolarındaki sürüm bu civarda olacaktır.)
Ayrıca, Nginx paketinin gerçekten yüklü olup olmadığını dpkg komutuyla da doğrulayabilirsiniz:
dpkg -l | grep nginx
Bu komut, Nginx ile ilgili yüklü paketleri listeler. Eğer Nginx yüklüyse, çıktıda ii nginx veya ii nginx-full gibi satırlar görmelisiniz.
Adım 3: Nginx Servisini Yönetme
Nginx bir sistem servisi olarak çalıştığı için, systemctl komutu ile kolayca yönetilebilir. İşte Nginx servisini yönetmek için kullanabileceğiniz temel komutlar:
* Nginx servisini başlatma:
sudo systemctl start nginx
* Nginx servisini durdurma:
sudo systemctl stop nginx
* Nginx servisini yeniden başlatma:
sudo systemctl restart nginx
Bu komut, Nginx’i tamamen durdurup yeniden başlatır.
* Nginx yapılandırmasını yeniden yükleme (reload):
sudo systemctl reload nginx
Bu komut, Nginx’i durdurmadan yapılandırma dosyalarında yapılan değişiklikleri uygular. Yeni bağlantılar için yeni yapılandırma kullanılırken, mevcut bağlantılar kesintiye uğramaz. Bu, genellikle bir web sitesi kesintisi olmadan yapılandırma değişikliklerini uygulamak için tercih edilen yöntemdir.
* Nginx servisinin durumunu kontrol etme:
sudo systemctl status nginx
Bu komut, Nginx servisinin çalışıp çalışmadığını, son hata mesajlarını ve diğer durum bilgilerini gösterir. Çıktıda Active: active (running) ifadesini görmelisiniz.
* Sistem başlangıcında Nginx’i otomatik başlatmayı etkinleştirme:
sudo systemctl enable nginx
Bu, sunucu her yeniden başlatıldığında Nginx’in otomatik olarak başlamasını sağlar. Nginx kurulumu sırasında bu genellikle otomatik olarak yapılır, ancak kontrol etmek veya manuel olarak etkinleştirmek isteyebilirsiniz.
* Sistem başlangıcında Nginx’i otomatik başlatmayı devre dışı bırakma:
sudo systemctl disable nginx
Adım 4: Güvenlik Duvarını Yapılandırma
Nginx kurulduktan sonra, dışarıdan gelen web trafiğine izin vermek için güvenlik duvarınızı yapılandırmanız gerekebilir. Debian’da yaygın olarak kullanılan güvenlik duvarı aracı ufw (Uncomplicated Firewall) veya iptables‘tır. Bu rehberde ufw kullanımına odaklanacağız, çünkü daha kullanıcı dostudur.
Eğer ufw sisteminizde yüklü değilse, öncelikle kurmanız gerekir:
sudo apt install ufw -y
ufw yüklendikten sonra, Nginx genellikle kendi profilini ufw‘ye ekler. Bu profilleri kontrol edebilirsiniz:
sudo ufw app list
Bu komutun çıktısında Nginx HTTP, Nginx HTTPS ve Nginx Full gibi profiller görmelisiniz:
* Nginx HTTP: Yalnızca 80 numaralı port (HTTP) trafiğine izin verir.
* Nginx HTTPS: Yalnızca 443 numaralı port (HTTPS) trafiğine izin verir.
* Nginx Full: Hem 80 (HTTP) hem de 443 (HTTPS) numaralı port trafiğine izin verir.
Web sitenizi barındırırken HTTP ve/veya HTTPS trafiğine izin vermeniz gerekecektir. Başlangıçta sadece HTTP’ye izin verebilirsiniz:
sudo ufw allow 'Nginx HTTP'
Eğer ileride SSL/TLS sertifikası kurup HTTPS kullanacaksanız, Nginx Full profilini kullanabilir veya Nginx HTTPS‘i ayrıca etkinleştirebilirsiniz:
sudo ufw allow 'Nginx Full'
Önemli: Sunucuya SSH ile erişiminizi kaybetmemek için SSH portuna (varsayılan olarak 22) izin vermeyi unutmayın:
sudo ufw allow OpenSSH
Şimdi güvenlik duvarını etkinleştirebilirsiniz. Bu işlem, SSH bağlantınızı kesebileceği için dikkatli olun. Emin değilseniz, önce bir sanal makinede veya test ortamında deneyin.
sudo ufw enable
Bir uyarı mesajı alacaksınız. y yazıp Enter tuşuna basarak devam edin.
Güvenlik duvarı kurallarınızı ve durumunu kontrol etmek için:
sudo ufw status
Çıktıda, Nginx HTTP (veya Full) ve OpenSSH kurallarının ALLOW olarak listelendiğini görmelisiniz.
Adım 5: Nginx Kurulumunu Doğrulama
Nginx kurulduktan ve güvenlik duvarı yapılandırıldıktan sonra, kurulumun başarılı olduğunu ve Nginx’in web isteklerine yanıt verdiğini doğrulamalısınız.
Bir web tarayıcısı açın ve sunucunuzun IP adresini veya alan adını (eğer DNS yapılandırmasını yaptıysanız) girin:
http://SUNUCU_IP_ADRESINIZ
veya
http://alanadiniz.com
Eğer her şey doğru yapılandırıldıysa, Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmelisiniz. Bu sayfa, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.
Adım 6: Nginx Yapılandırma Dosyaları
Nginx’in gücü, esnek ve modüler yapılandırma sisteminden gelir. Ana yapılandırma dosyaları ve dizinleri şunlardır:
* /etc/nginx/nginx.conf: Nginx’in ana yapılandırma dosyasıdır. Genel ayarları, worker süreçlerinin sayısını, log ayarlarını ve diğer global direktifleri içerir. Bu dosya genellikle diğer yapılandırma dosyalarını include direktifleriyle çağırır.
* /etc/nginx/sites-available/: Bu dizin, her biri ayrı bir web sitesi veya uygulamanın yapılandırmasını içeren “server block” dosyalarını barındırır. Bu dosyalar, Nginx tarafından varsayılan olarak okunmaz.
* /etc/nginx/sites-enabled/: Bu dizin, sites-available dizinindeki yapılandırma dosyalarına sembolik bağlantılar (symlink) içerir. Nginx, yalnızca bu dizindeki dosyaları okur ve işler. Bir siteyi etkinleştirmek için sites-available dizininden buraya bir sembolik bağlantı oluşturulur; devre dışı bırakmak için ise bu bağlantı kaldırılır.
* /etc/nginx/conf.d/: Bu dizin, küçük ve bağımsız yapılandırma parçacıklarını tutmak için kullanılır. nginx.conf dosyası genellikle bu dizindeki .conf uzantılı tüm dosyaları içerir.
* /var/www/html/: Nginx’in varsayılan olarak statik web dosyalarını sunduğu kök dizindir. “Welcome to Nginx!” sayfası bu dizinde bulunur.
* /var/log/nginx/access.log: Nginx’in gelen tüm web isteklerini kaydettiği erişim günlüğü dosyasıdır.
* /var/log/nginx/error.log: Nginx’in karşılaştığı tüm hata mesajlarını kaydettiği hata günlüğü dosyasıdır.
Varsayılan Nginx yapılandırma dosyası (/etc/nginx/sites-available/default) aşağıdaki gibi bir içeriğe sahip olabilir:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Bu yapılandırma, 80 numaralı porttan gelen tüm istekleri dinler, /var/www/html dizinini kök dizin olarak kullanır ve belirtilen index dosyalarını arar. server_name _ ifadesi, bu bloğun herhangi bir alan adı için varsayılan blok olarak davranacağını gösterir.
Adım 7: Yeni Bir Sanal Host (Server Block) Oluşturma
Birden fazla web sitesini aynı Nginx sunucusunda barındırmak için “server block” adı verilen sanal host yapılandırmalarını kullanırız. Şimdi ornek.com adında yeni bir site için bir server block oluşturalım.
1. Web Sitesi Kök Dizini Oluşturma:
Öncelikle, web sitenizin dosyalarını barındıracak bir dizin oluşturun. Her site için ayrı bir dizin oluşturmak iyi bir uygulamadır.
sudo mkdir -p /var/www/ornek.com/html
2. Test HTML Dosyası Oluşturma:
Yeni dizine basit bir index.html dosyası ekleyerek sitenin çalıştığını test edebiliriz.
sudo nano /var/www/ornek.com/html/index.html
Dosyanın içine aşağıdaki içeriği yapıştırın:
ornek.com - Nginx Test Sayfası
Bu, ornek.com için özel bir Nginx server block'undan sunulan test sayfasıdır.
Kaydedip kapatın (Ctrl+O, Enter, Ctrl+X).
3. Yeni Server Block Yapılandırma Dosyası Oluşturma:
Şimdi ornek.com için bir Nginx yapılandırma dosyası oluşturalım.
sudo nano /etc/nginx/sites-available/ornek.com
Dosyanın içine aşağıdaki içeriği yapıştırın:
server {
listen 80;
listen [::]:80;
root /var/www/ornek.com/html;
index index.html index.htm index.nginx-debian.html;
server_name ornek.com www.ornek.com;
location / {
try_files $uri $uri/ =404;
}
# Hata sayfaları (isteğe bağlı)
# error_page 404 /404.html;
# location = /404.html {
# internal;
# }
# PHP FPM ile entegrasyon için örnek (bu rehberde PHP FPM kurulmuyor)
# location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; # Debian 8 için örnek yol
# }
# Güvenlik için bazı başlıklar
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
}
* listen 80;: Bu server block’un 80 numaralı porttan gelen HTTP isteklerini dinlemesini sağlar.
* root /var/www/ornek.com/html;: Web sitesinin kök dizinini belirtir. Nginx, bu dizin altında dosya arayacaktır.
* index index.html ...;: Bir dizine erişildiğinde Nginx’in arayacağı varsayılan dosya adlarını belirtir.
* server_name ornek.com www.ornek.com;: Bu server block’un hangi alan adları için geçerli olduğunu tanımlar. Gelen isteğin Host başlığı bu isimlerden biriyle eşleşirse, bu blok kullanılır.
* location / { ... }: Kök URL (/) için isteklerin nasıl işleneceğini tanımlar. try_files direktifi, önce istenen dosyanın ($uri), sonra dizinin ($uri/) var olup olmadığını kontrol eder. Hiçbiri bulunamazsa, 404 hatası döndürür.
Kaydedip kapatın.
4. Server Block’u Etkinleştirme:
Yeni server block dosyamızı sites-enabled dizinine sembolik bir bağlantı oluşturarak etkinleştirebiliriz.
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
5. Varsayılan Server Block’u Devre Dışı Bırakma (İsteğe Bağlı):
Eğer yeni siteniz varsayılan site olacaksa ve ornek.com dışındaki isteklerin varsayılan “Welcome to Nginx!” sayfasını göstermesini istemiyorsanız, varsayılan server block’u devre dışı bırakabilirsiniz.
sudo rm /etc/nginx/sites-enabled/default
6. Yapılandırma Sözdizimi Kontrolü:
Nginx’i yeniden yüklemeden önce, yeni yapılandırma dosyasında herhangi bir sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir.
sudo nginx -t
Eğer her şey yolundaysa, aşağıdaki gibi bir çıktı görmelisiniz:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Herhangi bir hata varsa, nano ile yapılandırma dosyanızı açıp hatayı düzeltmeniz gerekir.
7. Nginx’i Yeniden Yükleme:
Yapılandırma değişikliklerinin etkili olması için Nginx’i yeniden yükleyin.
sudo systemctl reload nginx
8. Yeni Siteyi Test Etme:
Eğer gerçek bir alan adınız varsa ve DNS kayıtlarınız sunucunuzun IP adresine işaret ediyorsa, web tarayıcınızdan http://ornek.com adresine giderek yeni sitenizi kontrol edebilirsiniz.
Yerel Test (DNS yoksa):
Eğer gerçek bir alan adınız yoksa veya DNS’in yayılmasını beklemek istemiyorsanız, yerel bilgisayarınızın hosts dosyasını düzenleyerek test yapabilirsiniz. Bu, sadece sizin bilgisayarınızda geçerli olacaktır.
* Linux/macOS: sudo nano /etc/hosts
* Windows: Not Defteri’ni yönetici olarak çalıştırın ve C:\Windows\System32\drivers\etc\hosts dosyasını açın.
Dosyanın en altına aşağıdaki satırı ekleyin (SUNUCU_IP_ADRESINIZ yerine kendi sunucunuzun IP adresini yazın):
SUNUCU_IP_ADRESINIZ ornek.com www.ornek.com
Kaydedip kapatın. Şimdi web tarayıcınızdan http://ornek.com adresine gittiğinizde, kendi sunucunuzdaki yeni Nginx sayfasını görmelisiniz. Test bittiğinde hosts dosyasındaki bu satırı silmeyi unutmayın.
Adım 8: SSL/TLS ile Nginx Güvenliğini Sağlama (HTTPS)
Günümüzde tüm web sitelerinin HTTPS kullanması zorunludur. HTTPS, kullanıcılarınızın verilerini şifreleyerek güvenliği artırır ve SEO sıralamalarını da olumlu etkiler. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan popüler bir sertifika yetkilisidir ve Certbot aracı ile kolayca entegre edilebilir.
Debian 8 (Jessie) için Certbot kurulumu, doğrudan güncel Debian sürümlerindeki kadar basit olmayabilir, çünkü Debian 8’in varsayılan depoları Certbot’un en yeni sürümlerini içermez. Bu durumda, Certbot’u Debian Jessie’nin backports deposundan kurmak en iyi yöntemdir.
1. Jessie Backports Deposunu Ekleme:
backports deposunu sources.list.d dizinine ekleyin:
echo "deb http://deb.debian.org/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/jessie-backports.list
Paket listesini güncelleyin:
sudo apt update
2. Certbot ve Nginx Eklentisini Kurma:
backports deposundan Certbot ve Nginx eklentisini kurun. -t jessie-backports bayrağı, paketlerin özellikle bu depodan alınmasını sağlar.
sudo apt install certbot python-certbot-nginx -t jessie-backports -y
3. SSL Sertifikası Alma:
Certbot’u Nginx ile entegre ederek sertifika almak için aşağıdaki komutu kullanın. ornek.com ve www.ornek.com yerine kendi alan adlarınızı yazın.
sudo certbot --nginx -d ornek.com -d www.ornek.com
Certbot, etkileşimli bir süreç başlatacaktır:
* Bir e-posta adresi girmeniz istenecektir (bildirimler ve kayıp anahtar kurtarma için).
* Let’s Encrypt hizmet şartlarını kabul etmeniz istenecektir.
* IP adresinizin kaydedilip kaydedilmeyeceği sorulacaktır (isteğe bağlı).
* Certbot, Nginx yapılandırmanızı otomatik olarak algılayacak ve sertifikayı kuracaktır.
* Son olarak, HTTP trafiğini HTTPS’ye yönlendirmek isteyip istemediğiniz sorulacaktır. Genellikle 2: Redirect seçeneğini seçmek iyi bir uygulamadır.
İşlem tamamlandığında, Certbot size sertifikaların başarıyla yüklendiğini ve web sitenizin artık HTTPS üzerinden erişilebilir olduğunu bildirecektir. Ayrıca, Nginx yapılandırma dosyanızın (/etc/nginx/sites-available/ornek.com) otomatik olarak güncellendiğini göreceksiniz. Nginx’in 443 numaralı portu dinlemesi, SSL sertifikası yollarının eklenmesi ve HTTP’den HTTPS’ye yönlendirme kuralları otomatik olarak eklenmiş olacaktır.
4. Güvenlik Duvarını Güncelleme:
HTTPS trafiğine izin vermek için güvenlik duvarı kuralınızı güncellemeniz gerekebilir:
sudo ufw allow 'Nginx Full'
veya sadece 443 portuna izin vermek için:
sudo ufw allow 'Nginx HTTPS'
5. Sertifika Otomatik Yenilemesini Test Etme:
Let’s Encrypt sertifikaları 90 gün geçerlidir. Certbot, bu sertifikaları otomatik olarak yenilemek için bir cron job veya systemd timer kurar. Yenileme işleminin düzgün çalıştığından emin olmak için bir test çalıştırabilirsiniz:
sudo certbot renew --dry-run
Eğer bu komut herhangi bir hata vermeden tamamlanırsa, otomatik yenileme mekanizması düzgün çalışıyor demektir.
Şimdi web tarayıcınızdan https://ornek.com adresine giderek sitenizin güvenli bir bağlantı üzerinden çalıştığını ve tarayıcınızın adres çubuğunda bir kilit simgesi veya “Güvenli” ibaresini gördüğünüzü doğrulayabilirsiniz.
Adım 9: Nginx Log Dosyaları ve Hata Ayıklama
Nginx, sunucu faaliyetlerini ve olası sorunları izlemek için iki ana log dosyası tutar:
* Erişim Logları (/var/log/nginx/access.log): Web sunucusuna yapılan her isteği kaydeder. Hangi IP adreslerinin sitenize eriştiğini, hangi sayfaları görüntülediklerini, kullanılan tarayıcıyı ve diğer bilgileri içerir. Bu loglar, trafik analizi ve kullanım istatistikleri için değerlidir.
* Hata Logları (/var/log/nginx/error.log): Nginx’in karşılaştığı tüm hata, uyarı ve kritik mesajları kaydeder. Yapılandırma hataları, dosya bulunamadı hataları, proxy hataları gibi sorunları gidermek için bu log dosyası hayati öneme sahiptir.
Bu log dosyalarını gerçek zamanlı olarak izlemek için tail -f komutunu kullanabilirsiniz:
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Hata Ayıklama İpuçları:
* nginx -t: Herhangi bir yapılandırma değişikliği yaptıktan sonra bu komutu çalıştırmak, sözdizimi hatalarını kontrol etmenin en hızlı yoludur.
* systemctl status nginx: Nginx servisinin durumunu kontrol etmek, çalışıp çalışmadığını veya neden çalışmadığını anlamak için ilk adımdır.
* Hata Loglarını Kontrol Etme: Nginx bir sorunla karşılaştığında, genellikle /var/log/nginx/error.log dosyasına detaylı bilgi yazar. Bu log dosyasını düzenli olarak kontrol etmek, sorunları hızlıca tespit etmenize yardımcı olur.
* İzinler: Nginx’in web dosyalarını okuyabilmesi için doğru dosya ve dizin izinlerine sahip olması gerekir. Web kök dizininizin ve dosyalarınızın Nginx kullanıcısı (genellikle www-data) tarafından okunabilir olduğundan emin olun. Örneğin: sudo chown -R www-data:www-data /var/www/ornek.com ve sudo chmod -R 755 /var/www/ornek.com.
Adım 10: Nginx Performans İpuçları (İleri Düzey)
Nginx’in varsayılan yapılandırması çoğu durum için yeterli olsa da, yüksek trafikli siteler veya belirli kullanım senaryoları için bazı optimizasyonlar yapılabilir. Bu optimizasyonlar genellikle nginx.conf dosyasında veya siteye özel server block’larda yapılır.
* worker_processes: Bu direktif, Nginx’in kaç tane worker sürecini çalıştıracağını belirler. Genellikle sunucunuzdaki CPU çekirdeği sayısına eşit veya biraz daha fazla ayarlanması önerilir. auto olarak ayarlamak, Nginx’in mevcut CPU çekirdek sayısını otomatik olarak algılamasını sağlar.
# /etc/nginx/nginx.conf içinde
worker_processes auto;
* keepalive_timeout: İstemci ile sunucu arasındaki bir bağlantının ne kadar süre açık kalacağını belirler. Daha yüksek bir değer, aynı istemciden gelen birden fazla isteğin daha hızlı işlenmesini sağlayabilir, ancak sunucu kaynaklarını daha uzun süre meşgul edebilir. Varsayılan 75 saniye genellikle iyidir.
# /etc/nginx/nginx.conf içinde http bloğunda
keepalive_timeout 65;
* Gzip Sıkıştırma: Nginx, metin tabanlı dosyaları (HTML, CSS, JavaScript) istemciye göndermeden önce sıkıştırarak bant genişliğini azaltabilir ve yükleme sürelerini hızlandırabilir.
# /etc/nginx/nginx.conf içinde http bloğunda
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
* Statik Dosya Önbellekleme (Browser Caching): Tarayıcıların statik dosyaları (resimler, CSS, JS) belirli bir süre önbelleğe almasını sağlayarak, sonraki ziyaretlerde sunucudan tekrar indirilmesini önler. Bu, özellikle server block içinde location direktifi ile yapılır.
# ornek.com server block içinde
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d;
log_not_found off;
}
* Buffer Boyutları: Nginx’in istemci isteği ve yanıtı için kullandığı buffer boyutlarını ayarlamak, özellikle büyük dosya yüklemeleri veya yüksek trafik durumlarında performansı etkileyebilir.
# /etc/nginx/nginx.conf içinde http bloğunda
client_body_buffer_size 128k;
client_header_buffer_size 16k;
client_max_body_size 250m; # Maksimum yükleme boyutu
large_client_header_buffers 4 16k;
Bu performans ipuçlarını uyguladıktan sonra her zaman sudo nginx -t ile yapılandırma sözdizimini kontrol etmeyi ve ardından sudo systemctl reload nginx ile Nginx’i yeniden yüklemeyi unutmayın.
Sonuç
Bu kapsamlı rehberde, Debian 8 (Jessie) işletim sistemi üzerine Nginx’i adım adım nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı, güvenlik duvarını nasıl yöneteceğinizi ve SSL/TLS ile sitenizi nasıl güvenli hale getireceğinizi öğrendiniz. Ayrıca, Nginx’in temel yapılandırma dosyalarını, loglama mekanizmalarını ve performans optimizasyonu için bazı ipuçlarını da inceledik.
Nginx, modern web altyapılarının temel taşıdır ve bu rehberde edindiğiniz bilgilerle kendi web sitelerinizi veya uygulamalarınızı güvenle barındırmak için sağlam bir temel oluşturmuş oldunuz. Nginx’in sunduğu olanaklar sadece web sunuculuğu ile sınırlı değildir; ters proxy, yük dengeleme, API ağ geçidi gibi birçok farklı senaryoda da kullanılabilir.
Sonraki Adımlar:
* PHP-FPM Entegrasyonu: Dinamik web siteleri (WordPress, Laravel vb.) için Nginx’i PHP-FPM (FastCGI Process Manager) ile entegre etmeniz gerekecektir. Bu, Nginx’in PHP dosyalarını işlemek için PHP-FPM’ye yönlendirmesini sağlar.
* Veritabanı Kurulumu: Web uygulamaları genellikle bir veritabanına (MySQL/MariaDB, PostgreSQL gibi) ihtiyaç duyar.
* Cache Mekanizmaları: Nginx FastCGI cache veya Redis/Memcached gibi harici cache sistemlerini kullanarak uygulamanızın performansını daha da artırabilirsiniz.
* Monitöring ve Log Analizi: Nginx sunucunuzun performansını ve sağlığını izlemek için Prometheus, Grafana veya ELK Stack gibi araçları kullanmayı düşünebilirsiniz.
Nginx ile çalışmaya devam ettikçe, dokümantasyonunu incelemek ve topluluk kaynaklarından faydalanmak, bilginizi derinleştirmenize ve daha karmaşık yapılandırmaları uygulamanıza yardımcı olacaktır. Güvenli ve yüksek performanslı web deneyimleri yaratma yolculuğunuzda başarılar dileriz!