Takip et

Nginx Nedir ve Neden Ubuntu 16.04 Üzerine Kurmalısınız?

Ubuntu 16.04 Üzerine Nginx Kurulumu: Adım Adım Kapsamlı Rehber

Web sunucusu seçimi, herhangi bir web projesinin temel taşlarından biridir. Performans, güvenlik ve ölçeklenebilirlik, doğru seçimi yaparken göz önünde bulundurmanız gereken kritik faktörlerdir. Ubuntu 16.04 gibi istikrarlı bir işletim sistemi üzerinde Nginx kurmak, bu hedeflere ulaşmanız için güçlü ve verimli bir yol sunar. Bu rehberde, Nginx’i sıfırdan kurmayı, temel yapılandırmaları yapmayı ve sunucunuzu güvenli ve yüksek performanslı hale getirmek için ipuçlarını keşfedeceksiniz.

Nginx Nedir ve Neden Ubuntu 16.04 Üzerine Kurmalısınız?

Dijital dünyada var olmak isteyen her işletme veya bireysel geliştirici için web sunucusu, internet üzerindeki kapınızdır. Bu kapıyı güçlü, hızlı ve güvenilir kılmak ise Nginx gibi modern bir çözümle mümkündür. Peki, Nginx tam olarak nedir ve neden özellikle Ubuntu 16.04 gibi daha eski, ancak hala yaygın olarak kullanılan bir işletim sistemi üzerinde tercih edilmelidir?

Nginx (Engine-X olarak telaffuz edilir), Igor Sysoev tarafından geliştirilen, açık kaynaklı, yüksek performanslı bir HTTP ve ters proxy sunucusu, bir e-posta proxy sunucusu ve genel bir TCP/UDP proxy sunucusudur. Geleneksel web sunucularının aksine, Nginx olay tabanlı (event-driven) ve asenkron mimarisi sayesinde binlerce eşzamanlı bağlantıyı düşük bellek kullanımıyla işleyebilir. Bu özelliği, onu özellikle yüksek trafikli web siteleri ve uygulamalar için ideal bir seçim haline getirir. Statik içerik sunumunda olağanüstü performans gösterirken, dinamik içerikler için de ters proxy olarak PHP-FPM, Node.js veya Python gibi uygulama sunucularıyla sorunsuz bir şekilde entegre olur. Ayrıca, yük dengeleme (load balancing) yetenekleri sayesinde trafiği birden fazla sunucuya dağıtarak uygulamanızın ölçeklenebilirliğini ve sürekliliğini artırır. Güvenlik ve kaynak verimliliği konularında da oldukça iddialıdır, bu da onu modern web altyapılarının vazgeçilmez bir parçası yapar.

Ubuntu 16.04 LTS (Xenial Xerus) ise, Nisan 2016’da piyasaya sürülen ve uzun süreli destek (Long Term Support) sağlayan bir Linux dağıtımıdır. Her ne kadar daha yeni Ubuntu sürümleri mevcut olsa da, birçok eski sistem, özellikle kurumsal ortamlarda veya belirli yazılım bağımlılıkları nedeniyle hala Ubuntu 16.04 kullanmaktadır. LTS sürümleri, genellikle beş yıl boyunca güvenlik güncellemeleri ve hata düzeltmeleri alarak yüksek düzeyde kararlılık ve güvenilirlik sunar. Bu durum, sunucu ortamlarında kritik öneme sahiptir çünkü sistem yöneticileri, sık sık sürüm yükseltme zahmetine girmeden uzun vadeli bir çözüm ararlar. Ubuntu 16.04’ün sağlam temeli ve Nginx’in performans odaklı mimarisi bir araya geldiğinde, eski donanımlarda bile modern web uygulamalarını verimli bir şekilde barındırmak için güçlü bir kombinasyon oluşturur. Bu kombinasyon, özellikle kaynakları sınırlı olan ancak yüksek performans bekleyen projeler için biçilmiş kaftandır. Örneğin, eski bir sunucuda çalışan ancak ani trafik artışlarına hazırlıklı olması gereken bir e-ticaret sitesi veya bir blog platformu için Ubuntu 16.04 ve Nginx ikilisi, maliyet etkin ve güvenilir bir çözüm sunabilir. Nginx’in düşük kaynak tüketimi, Ubuntu 16.04’ün kararlılığı ile birleştiğinde, hem bütçe dostu hem de performanslı bir altyapı oluşturmanın anahtarını sunar.

Nginx Kurulumuna Başlamadan Önce Gerekli Hazırlıklar Nelerdir?

Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin doğru şekilde hazırlandığından emin olmak, sorunsuz bir deneyim ve güvenli bir çalışma ortamı için hayati önem taşır. Nginx kurulumu da bu kuralın bir istisnası değildir. Ubuntu 16.04 sunucunuzda Nginx’i devreye almadan önce yapmanız gereken bazı temel hazırlık adımları bulunmaktadır. Bu adımlar, hem sisteminizin güncel kalmasını sağlar hem de olası güvenlik açıklarını minimize eder.

İlk ve en önemli adım, sisteminizin paket listesini güncellemek ve mevcut paketleri yükseltmektir. Bu işlem, hem yeni yazılım paketlerine erişmenizi sağlar hem de kurulu yazılımlardaki güvenlik açıklarını kapatır. Bir terminal penceresi açın ve aşağıdaki komutları sırasıyla çalıştırın:


sudo apt update
sudo apt upgrade -y

sudo apt update komutu, yerel paket indeksini uzak depolardaki en son bilgilerle senkronize eder. Bu, sunucunuzun hangi paketlerin yükseltilebileceğini ve hangi yeni paketlerin mevcut olduğunu bilmesini sağlar. Ardından, sudo apt upgrade -y komutu, mevcut tüm paketleri en son sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vererek yükseltme işlemini etkileşimli olmadan tamamlamanızı sağlar. Bu adımı düzenli olarak tekrarlamak, sunucunuzun güvenliğini ve performansını korumak için kritik bir alışkanlıktır.

Bir sonraki önemli hazırlık, güvenlik duvarı (firewall) yapılandırmasıdır. UFW (Uncomplicated Firewall), Ubuntu’da varsayılan olarak gelen ve kullanımı kolay bir güvenlik duvarı aracıdır. Nginx’i kurduktan sonra, web sunucunuzun dışarıdan erişilebilir olması için belirli portları açmanız gerekecektir. HTTP için genellikle 80. port, HTTPS için ise 443. port kullanılır. Nginx kurulumundan önce UFW’yi etkinleştirmek ve gerekli kuralları tanımlamak, sunucunuza yetkisiz erişimi engellemenin ilk adımıdır. Eğer UFW etkin değilse, aşağıdaki komutlarla etkinleştirebilirsiniz:


sudo ufw enable
sudo ufw allow OpenSSH

sudo ufw enable komutu güvenlik duvarını etkinleştirir. Ancak, SSH bağlantınızın kesilmemesi için öncelikle sudo ufw allow OpenSSH komutu ile SSH portunu (varsayılan olarak 22) açmanız önemlidir. Bu adımları tamamladıktan sonra, Nginx’i kurduktan sonra HTTP ve HTTPS portlarını açmak için geri döneceğiz. Bu hazırlık, sunucunuzun temel güvenlik duruşunu güçlendirir ve sadece izin verilen trafiğin içeri girmesini sağlar.

Son olarak, Nginx kurulumu ve yapılandırması için root ayrıcalıklarına sahip bir kullanıcı hesabı kullanmanız gerekecektir. Genellikle, Ubuntu’da kurulum yaparken sudo komutunu kullanarak geçici root ayrıcalıkları elde edersiniz. Eğer şu anki kullanıcınızın sudo ayrıcalıkları yoksa veya root kullanıcısı olarak işlem yapıyorsanız, bu adımı atlayabilirsiniz. Ancak, güvenlik en iyi uygulama olarak, root kullanıcısı yerine sudo ayrıcalıklarına sahip standart bir kullanıcı kullanılması önerilir. Bu, yanlışlıkla yapılabilecek kritik hataları önler. Bu hazırlıklar tamamlandığında, sunucunuz Nginx’i kurmaya ve yapılandırmaya hazır hale gelecektir. Bu adımlar, bir projenin temelini oluşturur ve gelecekteki olası sorunları minimize eder. Örneğin, bir başlangıç firması yeni web uygulamasını canlıya almadan önce bu adımları titizlikle takip ederek, hem güvenli hem de kararlı bir başlangıç yapmayı hedefler. Sistemin güncel olması, güvenlik duvarının etkinleştirilmesi ve doğru kullanıcı ayrıcalıklarıyla çalışmak, bu tür kritik projeler için vazgeçilmezdir.

Ubuntu 16.04 Üzerine Nginx Nasıl Kurulur? Adım Adım Rehber

Nginx’in güçlü performans ve esneklik özelliklerinden faydalanmaya hazır mısınız? Bu bölümde, Ubuntu 16.04 sunucunuza Nginx’i adım adım nasıl kuracağınızı ve temel işlevlerini nasıl yöneteceğinizi öğreneceksiniz. Kurulum süreci oldukça basittir ve Ubuntu’nun paket yönetim sistemi sayesinde hızlıca tamamlanabilir. Bu adımları takip ederek, kısa sürede bir web sunucusuna sahip olacaksınız.

Nginx’i Ubuntu 16.04’e kurmanın en kolay yolu, Ubuntu’nun varsayılan paket yöneticisi olan apt‘yi kullanmaktır. Daha önce sisteminizi güncellediğinizden ve yükselttiğinizden emin olun. Eğer yapmadıysanız, bir önceki bölümdeki komutları tekrar çalıştırın. Ardından, aşağıdaki komutu kullanarak Nginx’i yükleyebilirsiniz:


sudo apt install nginx -y

Bu komut, Nginx paketini ve onunla birlikte gelen tüm bağımlılıkları sunucunuza indirir ve kurar. Kurulum işlemi genellikle birkaç dakika sürer ve tamamlandığında Nginx servisi otomatik olarak başlatılır. -y bayrağı, kurulum sırasında çıkan tüm onay sorularına otomatik olarak “evet” yanıtı vermenizi sağlar, böylece süreci kesintisiz bir şekilde ilerletebilirsiniz.

Kurulum tamamlandıktan sonra, Nginx servisinin başarılı bir şekilde çalışıp çalışmadığını kontrol etmek önemlidir. Bunu yapmak için aşağıdaki systemctl komutunu kullanabilirsiniz:


systemctl status nginx

Bu komutun çıktısında “active (running)” ifadesini görmelisiniz. Eğer Nginx çalışmıyorsa veya bir hata mesajı alırsanız, kurulum sırasında bir sorun oluşmuş olabilir. Böyle bir durumda, hata mesajını dikkatlice inceleyerek sorunu gidermeye çalışmalısınız. Genellikle, paket bağımlılıkları veya sistem kaynakları ile ilgili sorunlar bu tür hatalara yol açabilir. Nginx servisini başlatmak, durdurmak veya yeniden başlatmak için de benzer systemctl komutlarını kullanabilirsiniz:


sudo systemctl start nginx    # Nginx servisini başlatır
sudo systemctl stop nginx     # Nginx servisini durdurur
sudo systemctl restart nginx  # Nginx servisini yeniden başlatır
sudo systemctl reload nginx   # Nginx yapılandırmasını yeniden yükler (servisi durdurmadan)

reload komutu, özellikle yapılandırma dosyalarında değişiklik yaptıktan sonra Nginx’i yeniden başlatmadan yeni ayarları uygulamanıza olanak tanır. Bu, web sitenizin kesintiye uğramadan güncellemeleri almasını sağlar.

Nginx başarıyla kuruldu ve çalışıyor. Şimdi, güvenlik duvarınızı yapılandırarak Nginx’in dışarıdan erişilebilir olmasını sağlamanız gerekiyor. Daha önce UFW’yi etkinleştirmiştik. Nginx, UFW ile entegre bir şekilde çalışır ve kurulum sırasında kendi profilini ekler. Bu profiller sayesinde HTTP ve HTTPS trafiğine izin vermek çok daha kolaydır. Mevcut Nginx UFW profillerini aşağıdaki komutla listeleyebilirsiniz:


sudo ufw app list

Bu komutun çıktısında “Nginx HTTP”, “Nginx HTTPS” ve “Nginx Full” gibi seçenekleri görmelisiniz. “Nginx HTTP” sadece 80. portu (HTTP) açar, “Nginx HTTPS” sadece 443. portu (HTTPS) açar ve “Nginx Full” hem 80 hem de 443. portları açar. Eğer sadece HTTP üzerinden hizmet verecekseniz, aşağıdaki komutu kullanın:


sudo ufw allow 'Nginx HTTP'

Daha sonra HTTPS’i de kullanmayı planlıyorsanız, şimdiden “Nginx Full” profilini etkinleştirebilirsiniz:


sudo ufw allow 'Nginx Full'

Güvenlik duvarı kurallarınızı uyguladıktan sonra, değişikliklerin etkin olduğunu doğrulamak için aşağıdaki komutu kullanabilirsiniz:


sudo ufw status

Çıktıda, Nginx tarafından kullanılan portların (80 ve/veya 443) “ALLOW” durumunda olduğunu görmelisiniz. Artık sunucunuzun IP adresini veya alan adınızı bir web tarayıcısına yazarak Nginx’in varsayılan karşılama sayfasını görebilirsiniz. Eğer bu sayfayı görüyorsanız, Nginx kurulumunuz başarılı bir şekilde tamamlanmıştır. Bu, bir geliştiricinin yeni bir proje için test ortamı kurarken attığı ilk adımlara benzer. Her şeyin düzgün çalıştığını görmek, sonraki yapılandırma adımları için sağlam bir zemin oluşturur ve motivasyonu artırır.

Nginx Yapılandırması: Temel Ayarlar ve Sanal Hostlar Nasıl Oluşturulur?

Nginx’in kurulumunu tamamladık ve varsayılan karşılama sayfasını görebiliyoruz. Ancak gerçek dünya senaryolarında, Nginx’i kendi web sitelerimizi veya uygulamalarımızı barındırmak için yapılandırmamız gerekir. Bu bölümde, Nginx’in temel yapılandırma dosyalarını, sunucu bloklarını (server blocks) veya diğer adıyla sanal hostları nasıl oluşturacağınızı ve yöneteceğinizi detaylı bir şekilde inceleyeceğiz. Bu adımlar, tek bir Nginx sunucusunda birden fazla web sitesini barındırmanın anahtarıdır.

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumunda bulunur. Bu dosya, Nginx’in global ayarlarını içerir ve genellikle doğrudan düzenlenmez. Bunun yerine, Nginx, siteye özel yapılandırmaları yönetmek için daha modüler bir yaklaşım sunar. Bu yapılandırma, genellikle /etc/nginx/sites-available/ ve /etc/nginx/sites-enabled/ dizinleri aracılığıyla yapılır. sites-available dizini, oluşturduğunuz tüm site yapılandırma dosyalarını içerir, ancak bu siteler henüz etkin değildir. Bir siteyi etkinleştirmek için, sites-available dizinindeki ilgili yapılandırma dosyasının sites-enabled dizinine sembolik bir bağlantı (symlink) oluşturulması gerekir. Nginx, yalnızca sites-enabled dizinindeki yapılandırma dosyalarını okur.

Yeni bir web sitesi veya uygulama için bir sunucu bloğu oluşturmakla başlayalım. Örnek olarak, example.com adında bir alan adı için bir yapılandırma dosyası oluşturacağız. İlk olarak, sites-available dizininde yeni bir dosya oluşturun:


sudo nano /etc/nginx/sites-available/example.com

Bu komutla açılan boş dosyaya aşağıdaki temel Nginx sunucu bloğu yapılandırmasını yapıştırın:


server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

Bu yapılandırma bloğunu adım adım açıklayalım:

  • listen 80; ve listen [::]:80;: Bu satırlar, Nginx’in hem IPv4 (80) hem de IPv6 ([::]:80) üzerinden 80. portu dinlemesini sağlar. Bu, web sitenizin hem IPv4 hem de IPv6 adreslerinden erişilebilir olacağı anlamına gelir.
  • root /var/www/example.com/html;: Bu, web sitenizin dosyalarının bulunduğu kök dizinidir. Nginx, bu dizin altında belirtilen dosyaları arayacaktır. Bu dizini henüz oluşturmadık, ancak birazdan oluşturacağız.
  • index index.html index.htm index.nginx-debian.html;: Bir dizine erişildiğinde Nginx’in arayacağı varsayılan dosya adlarını belirtir. Listedeki ilk mevcut dosya sunulur.
  • server_name example.com www.example.com;: Bu, Nginx’in hangi alan adları için bu sunucu bloğunu kullanacağını belirler. Gelen isteğin Host başlığı bu değerle eşleşirse, bu blok işlenir.
  • location / { ... }: Bu blok, gelen isteklerin nasıl işleneceğini tanımlar. try_files $uri $uri/ =404; ifadesi, Nginx’in önce istenen dosyayı ($uri), ardından bir dizin olup olmadığını ($uri/) kontrol etmesini ve eğer hiçbiri bulunamazsa 404 hatası döndürmesini sağlar.

Yapılandırma dosyasını kaydettikten sonra (Nano’da Ctrl+O, Enter, Ctrl+X), web sitenizin kök dizinini ve örnek bir index.html dosyasını oluşturmanız gerekir:


sudo mkdir -p /var/www/example.com/html
sudo echo "Merhaba Dünya! Bu example.com sitesidir." | sudo tee /var/www/example.com/html/index.html

Ayrıca, Nginx’in bu dosyalara erişebilmesi için doğru izinleri ayarlamanız önemlidir:


sudo chown -R www-data:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com/html

www-data kullanıcısı ve grubu, Nginx’in genellikle çalıştığı kullanıcıdır. Bu izinler, Nginx’in web dosyalarını okumasına ve sunmasına olanak tanır.

Şimdi, oluşturduğumuz sunucu bloğunu etkinleştirmemiz gerekiyor. Bunun için sites-available dizinindeki dosyadan sites-enabled dizinine sembolik bir bağlantı oluşturacağız:


sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Bu komut, Nginx’in yeni yapılandırma dosyanızı tanımasını sağlar. Ayrıca, varsayılan Nginx yapılandırma dosyasını (default) devre dışı bırakmak isteyebilirsiniz, böylece sadece kendi yapılandırmanız etkin olur:


sudo rm /etc/nginx/sites-enabled/default

Herhangi bir yapılandırma değişikliğinden sonra, Nginx yapılandırmanızda sözdizimi hatası olup olmadığını kontrol etmek her zaman iyi bir uygulamadır:


sudo nginx -t

Eğer her şey yolundaysa, “syntax is ok” ve “test is successful” mesajlarını görmelisiniz. Herhangi bir hata mesajı alırsanız, yapılandırma dosyanızı dikkatlice kontrol edin ve hataları düzeltin. Son olarak, Nginx’i yeniden yükleyerek yeni yapılandırmanın etkin olmasını sağlayın:


sudo systemctl reload nginx

Artık tarayıcınızdan example.com (veya sunucunuzun IP adresini, eğer bir alan adı yapılandırmadıysanız) adresine giderek “Merhaba Dünya! Bu example.com sitesidir.” mesajını görmelisiniz. Bu adımlar, tek bir sunucu üzerinde birden fazla web sitesi barındırmak isteyen bir web geliştiricisi için temel bir yetenektir. Her bir site için ayrı bir sunucu bloğu oluşturarak, kaynakları verimli bir şekilde kullanabilir ve yönetimi kolaylaştırabilirsiniz. Bu esneklik, Nginx’i küçük projelerden büyük ölçekli kurumsal uygulamalara kadar her türlü senaryoda tercih edilen bir çözüm haline getirir.

Güvenlik ve Performans İpuçları: Nginx Kurulumunuzu Nasıl Optimize Edersiniz?

Nginx’i kurmak ve temel bir web sitesini çalıştırmak harika bir başlangıçtır, ancak gerçek dünya uygulamalarında güvenlik ve performans, başarı için kritik öneme sahiptir. Bu bölümde, Nginx kurulumunuzu daha güvenli hale getirmek ve web sitenizin hızını artırmak için uygulayabileceğiniz ileri düzey ipuçlarını ve teknikleri ele alacağız. Bu optimizasyonlar, kullanıcı deneyimini iyileştirirken sunucunuzun kaynaklarını daha verimli kullanmanıza olanak tanır.

Güvenlik İçin Temel Adımlar: UFW ve SSL/TLS Yapılandırması

Bir web sunucusunun en önemli sorumluluklarından biri, sunulan içeriğin ve kullanıcı verilerinin güvenliğini sağlamaktır. Nginx ile güvenliği artırmak için atabileceğiniz birkaç temel adım bulunmaktadır.

İlk olarak, güvenlik duvarı (UFW) kurallarınızı doğru şekilde yapılandırdığınızdan emin olun. Daha önce Nginx’in portlarını açmıştık. Ancak, sadece gerekli portların açık kalması ve yetkisiz erişimlerin engellenmesi esastır. Eğer sadece HTTPS kullanıyorsanız, HTTP (80) portunu kapatmayı düşünebilirsiniz. Güvenlik duvarınızı kontrol edin:


sudo ufw status verbose

Eğer 80. portu kapatmak isterseniz:


sudo ufw deny 'Nginx HTTP'

Ancak çoğu zaman, HTTP’den HTTPS’e yönlendirme yapmak için 80. portun açık kalması istenir. Bu, ziyaretçilerin web sitenize güvenli bir bağlantı üzerinden erişmesini sağlamanın ilk adımıdır.

Web güvenliğinin en kritik bileşenlerinden biri SSL/TLS şifrelemesidir. SSL/TLS sertifikaları, sunucu ile istemci arasındaki iletişimi şifreleyerek hassas verilerin (şifreler, kredi kartı bilgileri vb.) güvenliğini sağlar. Let’s Encrypt gibi ücretsiz ve otomatik sertifika sağlayan bir hizmet, bu süreci oldukça kolaylaştırır. Ubuntu 16.04 için Certbot kullanarak Let’s Encrypt sertifikasını kurabilirsiniz. İlk olarak Certbot’u yükleyin:


sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt update
sudo apt install python-certbot-nginx -y

Ardından, Nginx için sertifika alıp yapılandırmak için aşağıdaki komutu kullanın (example.com yerine kendi alan adınızı yazın):


sudo certbot --nginx -d example.com -d www.example.com

Certbot, sertifikayı otomatik olarak alacak ve Nginx yapılandırma dosyanızı HTTPS’i kullanacak şekilde güncelleyecektir. Ayrıca, HTTP isteklerini otomatik olarak HTTPS’e yönlendirme seçeneği de sunacaktır. Bu adımı tamamladıktan sonra, web siteniz artık güvenli bir HTTPS bağlantısı üzerinden hizmet verecektir. Bu, sadece verilerinizi korumakla kalmaz, aynı zamanda arama motoru sıralamalarınız üzerinde de olumlu bir etki yaratır.

Uzman İpucu: Nginx’e HSTS (HTTP Strict Transport Security) başlığı eklemek, tarayıcıların sitenize her zaman HTTPS üzerinden erişmesini zorlar. Bu, man-in-the-middle saldırılarını önlemeye yardımcı olur ve güvenlik seviyenizi önemli ölçüde artırır.

Ek güvenlik için, Nginx yapılandırmanıza bazı güvenlik başlıkları ekleyebilirsiniz. Örneğin, X-Content-Type-Options, X-Frame-Options ve X-XSS-Protection gibi başlıklar, yaygın web saldırılarına karşı koruma sağlar. Bu başlıkları Nginx sunucu bloğunuza ekleyebilirsiniz:


server {
    # ... diğer yapılandırmalar ...
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";
    # ...
}

Performans İçin İpuçları: Önbellekleme ve Gzip Sıkıştırma

Web sitenizin hızı, kullanıcı deneyimi ve SEO açısından kritik bir faktördür. Nginx, performansı artırmak için birçok yerleşik özelliğe sahiptir. Bunlardan en önemlileri önbellekleme ve Gzip sıkıştırmadır.

Tarayıcı Önbellekleme (Browser Caching): Nginx, statik dosyaların (resimler, CSS, JavaScript) tarayıcı tarafından önbelleğe alınmasını sağlayarak tekrarlanan ziyaretlerde sayfa yükleme sürelerini önemli ölçüde azaltabilir. Bunu yapmak için, Nginx yapılandırma dosyanıza aşağıdaki gibi bir location bloğu ekleyebilirsiniz:


location ~* \.(jpg|jpeg|gif|png|webp|css|js|ico|woff|woff2|ttf|eot)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

Bu yapılandırma, belirli dosya türleri için tarayıcıya bu dosyaları 30 gün boyunca önbelleğe almasını söyler. Cache-Control "public, no-transform" başlığı, önbelleğe alınan içeriğin herhangi bir ara sunucu tarafından değiştirilmeden doğrudan istemciye sunulmasını sağlar.

Gzip Sıkıştırma: Gzip, web sunucusundan istemciye gönderilen metin tabanlı dosyaların (HTML, CSS, JavaScript) boyutunu sıkıştırarak bant genişliği kullanımını azaltır ve yükleme sürelerini hızlandırır. Nginx’te Gzip sıkıştırmayı etkinleştirmek için nginx.conf dosyanızın http bloğuna veya sunucu bloğunuza aşağıdaki ayarları ekleyebilirsiniz:


gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Bu ayarlar, Gzip sıkıştırmayı etkinleştirir, sıkıştırma seviyesini ayarlar (6 genellikle iyi bir denge sunar) ve hangi MIME türlerinin sıkıştırılacağını belirtir. Bu sayede, web sitenizin boyutunu ciddi oranda düşürebilir ve ziyaretçiler için daha hızlı bir deneyim sunabilirsiniz.

Worker Processes Optimizasyonu: Nginx, gelen bağlantıları işlemek için “worker process” adı verilen süreçleri kullanır. Bu süreçlerin sayısı, sunucunuzun CPU çekirdek sayısına göre optimize edilmelidir. Genellikle, sunucunuzdaki CPU çekirdeği sayısı kadar worker process ayarlamak iyi bir başlangıç noktasıdır. Bu ayarı nginx.conf dosyanızın en üstündeki main bloğuna ekleyebilirsiniz:


worker_processes auto; # veya CPU çekirdeği sayısı (örn: 4)

auto değeri, Nginx’in otomatik olarak CPU çekirdeği sayısını algılamasını sağlar. Bu optimizasyon, sunucunuzun donanım kaynaklarını en verimli şekilde kullanmasına yardımcı olur.

Mobil Uyumluluk İçin Not: Nginx doğrudan mobil uyumluluk sağlamaz, ancak web sitenizin mobil uyumlu olması, Nginx’in hızlı sunum yetenekleriyle birleştiğinde mükemmel bir kullanıcı deneyimi sunar. Web sitenizin HTML, CSS ve JavaScript kodlarını mobil cihazlara duyarlı olacak şekilde tasarlamanız gerekir. Bu genellikle CSS medya sorguları (media queries) kullanılarak yapılır. İşte basit bir örnek:


<style>
  /* Varsayılan stil: Geniş ekranlar için */
  .container {
    width: 960px;
    margin: 0 auto;
    background-color: lightblue;
  }

  /* Mobil cihazlar için medya sorgusu */
  @media (max-width: 768px) {
    .container {
      width: 100%;
      padding: 15px;
      background-color: lightcoral;
    }
  }
</style>
<div class="container">
  <p>Bu içerik, ekran boyutuna göre farklı görünecektir.</p>
</div>

Bu örnek, bir web sayfasının farklı ekran boyutlarına nasıl adapte olabileceğini gösterir. Nginx, bu optimize edilmiş içeriği hızlı bir şekilde sunarak mobil kullanıcılar için akıcı bir deneyim sağlar. Bu güvenlik ve performans optimizasyonlarını uygulayarak, Nginx sunucunuzu hem daha güvenli hem de daha hızlı hale getirebilirsiniz. Bu, özellikle yüksek trafikli bir blog veya e-ticaret platformu gibi senaryolarda, ziyaretçilerinizi memnun etmek ve sunucunuzun yükünü azaltmak için hayati öneme sahiptir.

Nginx ile Karşılaşılabilecek Yaygın Sorunlar ve Çözümleri Nelerdir?

Nginx kurulumu ve yapılandırması genellikle sorunsuz ilerlese de, zaman zaman çeşitli problemlerle karşılaşmak mümkündür. Bu sorunları hızlıca teşhis edip çözebilmek, bir sunucu yöneticisinin en önemli becerilerindendir. Bu bölümde, Nginx ile karşılaşabileceğiniz en yaygın sorunları ve bunların çözüm yollarını ele alacağız. Bu bilgiler, sorun giderme sürecinizi hızlandıracak ve web sitenizin kesintisiz çalışmasını sağlayacaktır.

1. Nginx Servisi Başlamıyor veya Hata Veriyor:

Bu, karşılaşılabilecek en temel sorunlardan biridir. Nginx servisinin başlamamasının veya hata vermesinin birkaç nedeni olabilir. İlk olarak, Nginx servisinin durumunu kontrol edin:


sudo systemctl status nginx

Çıktıda kırmızı renkte bir “failed” mesajı görüyorsanız, sorun gidermeye başlamalısınız. Genellikle, hata mesajında sorunun kökenine dair ipuçları bulunur. En yaygın nedenlerden biri yapılandırma hatasıdır. Nginx yapılandırma dosyalarınızda bir sözdizimi hatası olup olmadığını kontrol edin:


sudo nginx -t

Eğer bir hata varsa, Nginx size hatanın hangi dosyada ve hangi satırda olduğunu söyleyecektir. Örneğin, bir noktalı virgül eksikliği veya yanlış bir direktif adı bu tür hatalara yol açabilir. Hatayı düzeltin, dosyayı kaydedin ve tekrar sudo nginx -t komutunu çalıştırın. Hata giderildikten sonra Nginx servisini yeniden başlatmayı deneyin: sudo systemctl restart nginx.

Diğer bir yaygın neden ise port çakışmasıdır. Nginx varsayılan olarak 80 (HTTP) ve 443 (HTTPS) portlarını kullanır. Eğer sunucunuzda başka bir servis (örneğin Apache) bu portları kullanıyorsa, Nginx başlayamaz. Bu durumu kontrol etmek için:


sudo netstat -tulnp | grep ":80\|:443"

Bu komut, 80 ve 443 portlarını dinleyen süreçleri gösterecektir. Eğer Nginx dışında bir süreç görüyorsanız, o servisi durdurmanız veya Nginx’in farklı bir port kullanmasını sağlamanız gerekebilir.

2. “403 Forbidden” Hatası:

Bu hata, Nginx’in istenen dosyaya veya dizine erişim izni olmadığını gösterir. Genellikle yanlış dosya veya dizin izinlerinden kaynaklanır. Web sitenizin kök dizini (root direktifinde belirtilen) ve içindeki tüm dosyaların Nginx’in çalıştığı kullanıcı (genellikle www-data) tarafından okunabilir olması gerekir. İzinleri kontrol edin ve düzeltin:


sudo chown -R www-data:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com/html

chown komutu, dizinin ve içeriğinin sahipliğini www-data kullanıcısına ve grubuna atar. chmod komutu ise okuma, yazma ve çalıştırma izinlerini ayarlar (755, sahibi için tam izinler, diğerleri için okuma ve çalıştırma anlamına gelir). Ayrıca, Nginx yapılandırmanızda autoindex on; direktifi olmadan bir dizine erişmeye çalışıyorsanız da bu hatayı alabilirsiniz. Eğer dizin listelemesini istiyorsanız, bu direktifi eklemelisiniz. Ancak güvenlik nedeniyle genellikle dizin listelemesi devre dışı bırakılır.

3. “404 Not Found” Hatası:

Bu hata, Nginx’in istenen dosyayı veya kaynağı bulamadığı anlamına gelir. Bu durumun birkaç nedeni olabilir:

  • Yanlış Kök Dizin (Root Directory): Nginx yapılandırma dosyanızdaki root direktifinin, web sitenizin dosyalarının fiziksel konumunu doğru bir şekilde işaret ettiğinden emin olun.
  • Dosya Yolu Hatası: İstenen dosyanın URL’si, sunucudaki fiziksel dosya yoluyla eşleşmiyor olabilir. Özellikle yeniden yazma kuralları (rewrite rules) kullanılıyorsa, bu kuralların doğru çalıştığından emin olun.
  • try_files Direktifi Hatası: Sunucu bloğunuzdaki location / { try_files $uri $uri/ =404; } gibi bir direktif, Nginx’in dosyaları nasıl arayacağını belirler. Eğer bu direktif yanlış yapılandırılmışsa, dosyalar bulunamayabilir. Dinamik uygulamalar için (PHP, Node.js), try_files genellikle uygulama sunucusuna (örn. PHP-FPM) isteği iletmek üzere yapılandırılır.

4. “502 Bad Gateway” veya “504 Gateway Timeout” Hatası:

Bu hatalar, Nginx’in bir ters proxy olarak çalıştığı ve arka uç uygulama sunucusuyla (örneğin PHP-FPM, Node.js sunucusu) iletişim kurarken bir sorun yaşadığı anlamına gelir. Genellikle aşağıdaki nedenlerden kaynaklanır:

  • Uygulama Sunucusu Çalışmıyor: Arka uç uygulamanızın (örneğin PHP-FPM) çalışıp çalışmadığını kontrol edin. sudo systemctl status php7.0-fpm gibi bir komutla durumunu kontrol edebilirsiniz.
  • Uygulama Sunucusu Erişilebilir Değil: Nginx yapılandırmanızdaki proxy_pass direktifinin doğru IP adresini ve portu işaret ettiğinden emin olun. Uygulama sunucunuzun güvenlik duvarı tarafından engellenmediğinden de emin olun.
  • Zaman Aşımı (Timeout): Uygulama sunucunuz bir isteği çok uzun sürede yanıtlıyorsa (özellikle 504 hatasında), Nginx zaman aşımına uğrayabilir. Nginx’in proxy_read_timeout ve proxy_connect_timeout değerlerini artırmayı düşünebilirsiniz, ancak bu genellikle arka uç uygulamanızdaki performans sorunlarının bir belirtisidir.
Uzman İpucu: Nginx’in hata ve erişim loglarını düzenli olarak kontrol etmek, sorun gidermede size çok yardımcı olacaktır. Loglar genellikle /var/log/nginx/access.log ve /var/log/nginx/error.log konumlarında bulunur. Bu dosyalara bakarak hatanın nedenini daha net anlayabilirsiniz.

sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

Bu komutlar, log dosyalarının son satırlarını gerçek zamanlı olarak gösterir, bu da bir sorunu yeniden oluştururken ne olduğunu görmenizi sağlar. Sorun giderme, sabır ve sistematik bir yaklaşımla çözülebilecek bir süreçtir. Bu yaygın sorunları ve çözümlerini bilmek, web sunucunuzun sorunsuz çalışmasını sağlamak için size büyük avantaj sağlayacaktır. Bir örnek olarak, bir geliştiricinin yeni bir Node.js uygulamasını dağıtırken yaşadığı “502 Bad Gateway” hatası, genellikle Node.js uygulamasının düzgün çalışmaması veya Nginx’in uygulama sunucusuna doğru proxy yapamamasıyla ilgilidir. Logları kontrol etmek, bu tür durumların hızla çözülmesini sağlar.

Sonuç: Nginx ile Web Dünyasına Güçlü Bir Başlangıç

Bu kapsamlı rehber boyunca, Ubuntu 16.04 işletim sistemi üzerinde Nginx web sunucusunu nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı ve sunucunuzu güvenli ve performanslı hale getirmek için hangi adımları atmanız gerektiğini detaylı bir şekilde öğrendiniz. Nginx’in olay tabanlı mimarisi ve düşük kaynak tüketimi sayesinde, yüksek trafikli web sitelerinden basit bloglara kadar her türlü projede güçlü ve ölçeklenebilir bir çözüm sunduğunu gördük.

Kurulum öncesi sistem güncellemeleri ve güvenlik duvarı yapılandırması gibi hazırlık adımları, sorunsuz bir başlangıç için ne kadar kritik olduğunu gösterdi. Ardından, Nginx’i apt paketi yöneticisiyle kolayca kurduk ve servis yönetimini systemctl komutlarıyla nasıl yapacağımızı öğrendik. Sanal hostlar (server blocks) oluşturarak birden fazla web sitesini tek bir Nginx sunucusu üzerinde barındırma yeteneği, Nginx’in esnekliğinin temel bir göstergesiydi. Son olarak, SSL/TLS şifrelemesi ile güvenliği artırmanın ve önbellekleme ile Gzip sıkıştırma gibi tekniklerle performansı optimize etmenin yollarını keşfettik. Karşılaşılabilecek yaygın sorunlara ve bunların çözüm yollarına değinerek, olası aksaklıklar karşısında nasıl bir yol izlemeniz gerektiği konusunda size rehberlik ettik.

Nginx, modern web altyapılarının belkemiğidir ve bu rehberdeki bilgilerle, kendi web projeleriniz için sağlam, hızlı ve güvenli bir temel oluşturmak için gerekli tüm araçlara sahipsiniz. Unutmayın, sunucu yönetimi sürekli bir öğrenme sürecidir. Nginx’in zengin dokümantasyonunu keşfetmeye devam etmek, ileri düzey yapılandırmaları denemek ve güvenlik en iyi uygulamalarını takip etmek, becerilerinizi geliştirmek için önemlidir. Şimdi, Nginx’in gücünü kullanarak web dünyasında kendi izlerinizi bırakmaya hazırsınız!

Sıkça Sorulan Sorular (SSS)

1. Nginx mi yoksa Apache mi kullanmalıyım?

Her iki web sunucusunun da kendine özgü avantajları vardır. Apache, zengin modül desteği ve .htaccess dosyaları aracılığıyla dizin bazında yapılandırma esnekliği sunarken, Nginx yüksek eşzamanlı bağlantıları düşük kaynak tüketimiyle işleme konusunda üstündür. Genellikle, Nginx statik içerik sunumu, ters proxy ve yük dengeleme için daha performanslı kabul edilirken, Apache daha dinamik ve esnek yapılandırmalar için tercih edilebilir. Birçok modern kurulumda Nginx, statik içerik ve ters proxy olarak önde, Apache ise dinamik içerik (PHP gibi) için arka uç sunucusu olarak kullanılır. Seçim, projenizin özel ihtiyaçlarına ve trafik beklentilerinize bağlıdır.

2. Ubuntu 16.04 yerine daha yeni bir Ubuntu sürümü kullanmalı mıyım?

Evet, genellikle en güncel LTS (Uzun Süreli Destek) Ubuntu sürümünü kullanmanız önerilir. Ubuntu 16.04’ün resmi desteği sona ermiş veya sona ermek üzere olabilir (genellikle 5 yıl). Daha yeni sürümler, güncel yazılım paketleri, daha iyi performans optimizasyonları, yeni güvenlik yamaları ve daha uzun süreli destek sunar. Ancak, mevcut bir altyapınız varsa veya belirli yazılım bağımlılıklarınız Ubuntu 16.04’e kilitlenmişse, bu rehber size mevcut sisteminizi verimli bir şekilde kullanma imkanı sunar. Yeni projeler için kesinlikle daha güncel bir Ubuntu LTS sürümünü tercih etmelisiniz.

3. Nginx yapılandırma dosyalarını nerede bulabilirim?

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır. Siteye özel yapılandırma dosyaları ise genellikle /etc/nginx/sites-available/ dizininde bulunur ve etkinleştirildiklerinde /etc/nginx/sites-enabled/ dizinine sembolik bağlantılar oluşturulur. Ayrıca, Nginx modülleri için ek yapılandırma dosyaları /etc/nginx/conf.d/ veya /etc/nginx/snippets/ gibi dizinlerde yer alabilir. Bu dizinleri bilmek, Nginx’i özelleştirmeniz ve sorun gidermeniz için kritik öneme sahiptir.

4. Nginx log dosyaları nerede bulunur ve nasıl incelenir?

Nginx’in erişim (access) ve hata (error) log dosyaları genellikle /var/log/nginx/ dizininde bulunur. Varsayılan olarak, erişim logları access.log ve hata logları error.log olarak adlandırılır. Bu dosyaları incelemek için cat, less, tail veya grep gibi Linux komutlarını kullanabilirsiniz. Özellikle tail -f /var/log/nginx/error.log komutu, hata loglarını gerçek zamanlı olarak izlemenizi sağlar ve sorun giderme sırasında çok faydalıdır. Loglar, web sitenizdeki hataların, erişim sorunlarının ve genel trafiğin anlaşılması için değerli bilgiler içerir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version