Ubuntu 14.04 LTS Üzerine Nginx Kurulumu: Kapsamlı Bir Rehber
Nginx (Engine-x olarak okunur), Rus programcı Igor Sysoev tarafından geliştirilen ve açık kaynak kodlu, yüksek performanslı bir web sunucusu, ters proxy sunucusu ve HTTP önbelleği olarak kullanılan bir yazılımdır. Geleneksel Apache web sunucusuna kıyasla daha az kaynak tüketimi ve yüksek eşzamanlı bağlantıları işleme yeteneği ile bilinir. Özellikle yüksek trafikli web siteleri ve modern web uygulamaları için popüler bir seçimdir. Ubuntu 14.04 LTS (Trusty Tahr) sürümü, uzun süreli destek (Long Term Support) sunması nedeniyle birçok sunucu ortamında hala kullanılmaktadır. Bu makalede, Ubuntu 14.04 LTS işletim sistemi üzerine Nginx’i nasıl kuracağınızı, temel yapılandırmalarını nasıl yapacağınızı ve servis yönetimini nasıl gerçekleştireceğinizi adım adım, detaylı bir şekilde açıklayacağız.
Nginx Neden Tercih Edilmeli?
Nginx, modern web sunucularının karşılaştığı zorluklara çözüm sunmak üzere tasarlanmıştır. İşte Nginx’i tercih etmek için bazı önemli nedenler:
* Yüksek Performans ve Ölçeklenebilirlik: Nginx, olay tabanlı (event-driven) mimarisi sayesinde binlerce eşzamanlı bağlantıyı düşük bellek ve CPU tüketimiyle işleyebilir. Bu, özellikle yüksek trafikli siteler ve API’ler için kritik bir avantajdır.
* Düşük Kaynak Tüketimi: Apache gibi süreç tabanlı sunucuların aksine, Nginx her bağlantı için yeni bir süreç oluşturmaz. Bu da daha az RAM ve işlemci gücü kullanmasını sağlar.
* Ters Proxy ve Yük Dengeleme: Nginx, gelen istekleri birden fazla arka uç sunucuya dağıtarak yük dengeleme (load balancing) yapabilir. Bu, uygulamanızın daha kararlı ve ölçeklenebilir olmasını sağlar. Ayrıca, uygulamanızı dış dünyaya açmadan önce bir güvenlik katmanı olarak da işlev görebilir.
* Statik İçerik Sunma: Statik dosyaları (HTML, CSS, JavaScript, resimler vb.) çok verimli bir şekilde sunabilir. Bu, dinamik içerik üreten uygulamalar için Nginx’i bir “ön kapı” olarak kullanırken, dinamik içeriği Apache veya PHP-FPM gibi başka bir sunucuya iletmek için idealdir.
* Modüler Yapı: Nginx’in modüler yapısı, ihtiyacınız olmayan özellikleri devre dışı bırakarak sunucunun daha hafif çalışmasını sağlar.
* Kolay Yapılandırma: Nginx yapılandırma dosyaları genellikle Apache’ye göre daha anlaşılır ve düzenlidir, bu da yönetimi kolaylaştırır.
Ubuntu 14.04 LTS ise, Nisan 2014’te yayınlanmış ve Nisan 2019’a kadar standart destek, daha sonra Ubuntu Advantage aboneliği ile genişletilmiş destek almış, kararlı ve güvenilir bir işletim sistemi sürümüdür. Bu kombinasyon, özellikle eski sistemleri yöneten veya belirli bir kararlılık seviyesini korumak isteyen yöneticiler için hala geçerli bir seçenektir.
Ön Gereksinimler
Nginx kurulumuna başlamadan önce aşağıdaki ön gereksinimleri karşıladığınızdan emin olun:
* Ubuntu 14.04 LTS Sunucusu: Nginx’i kuracağınız çalışan bir Ubuntu 14.04 LTS sunucusu veya sanal makine.
* Sudo Yetkilerine Sahip Kullanıcı: Sunucuda sudo komutunu kullanabilen, root olmayan bir kullanıcı hesabına sahip olmanız şiddetle tavsiye edilir. Root kullanıcısı ile doğrudan çalışmak güvenlik riskleri taşıyabilir.
* İnternet Bağlantısı: Sunucunuzun paketleri indirebilmesi için internete bağlı olması gerekmektedir.
* Temel Linux Komut Bilgisi: Terminalde komut çalıştırma ve dosya düzenleme gibi temel Linux bilgisi faydalı olacaktır.
Sistemi Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce sisteminizin paket listelerini ve yüklü paketlerini güncel tutmak iyi bir uygulamadır. Bu, potansiyel bağımlılık sorunlarını önler ve en son güvenlik yamalarına sahip olmanızı sağlar.
Terminalinizi açın ve aşağıdaki komutları çalıştırın:
sudo apt-get update
Bu komut, yerel paket indeksinizi günceller. Yani, depoların en son paket bilgileriyle senkronize olmasını sağlar.
sudo apt-get upgrade
Bu komut ise, sisteminizdeki mevcut yüklü paketlerin yeni sürümleri varsa bunları yükseltir. upgrade komutunu çalıştırmak isteğe bağlıdır ancak önerilir. Eğer yalnızca Nginx kurmak istiyorsanız update yeterli olabilir, ancak sisteminizin genel sağlığı için upgrade yapmak önemlidir.
Nginx Kurulumu
Ubuntu 14.04 LTS’nin varsayılan depolarında Nginx mevcuttur. Bu, kurulumu oldukça basit hale getirir.
Nginx’i kurmak için aşağıdaki komutu kullanın:
sudo apt-get install nginx
Bu komut, Nginx paketini ve onunla birlikte gelen tüm bağımlılıkları indirir ve kurar. Kurulum sırasında sizden onay istenebilir (Y/n). Y tuşuna basıp Enter’a basarak devam edin.
Kurulum tamamlandıktan sonra Nginx servisi otomatik olarak başlatılmalıdır.
Güvenlik Duvarını Ayarlama (UFW)
Ubuntu’da varsayılan güvenlik duvarı aracı UFW (Uncomplicated Firewall) olarak adlandırılır. Nginx’in gelen HTTP (port 80) ve isteğe bağlı olarak HTTPS (port 443) isteklerini kabul edebilmesi için güvenlik duvarınızı yapılandırmanız gerekir.
Öncelikle UFW’nin durumunu kontrol edin:
sudo ufw status
Eğer UFW etkin değilse, çıktıda “Status: inactive” göreceksiniz.
Nginx kurulumu, UFW’ye bazı uygulama profilleri ekler. Bu profilleri görmek için:
sudo ufw app list
Bu komutun çıktısında aşağıdaki gibi profiller görmelisiniz:
Available applications:
Nginx HTTP
Nginx HTTPS
Nginx Full
OpenSSH
* Nginx HTTP: Yalnızca HTTP trafiğine (port 80) izin verir.
* Nginx HTTPS: Yalnızca HTTPS trafiğine (port 443) izin verir.
* Nginx Full: Hem HTTP (port 80) hem de HTTPS (port 443) trafiğine izin verir.
Şimdilik yalnızca HTTP trafiğine izin vereceğiz. HTTPS’i daha sonra yapılandırabilirsiniz.
HTTP trafiğine izin vermek için:
sudo ufw allow 'Nginx HTTP'
Eğer UFW daha önce etkinleştirilmediyse, şimdi etkinleştirin:
sudo ufw enable
Bu komut, güvenlik duvarını etkinleştirir ve sistem başlangıcında otomatik olarak başlamasını sağlar. Y tuşuna basarak onaylayın.
Son olarak, güvenlik duvarı kurallarınızı tekrar kontrol edin:
sudo ufw status
Çıktıda Nginx HTTP kuralının etkin olduğunu görmelisiniz:
Status: active
To Action From
-- ------ ----
Nginx HTTP ALLOW Anywhere
OpenSSH ALLOW Anywhere
Nginx HTTP (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Bu, Nginx web sunucusunun gelen HTTP isteklerini kabul etmeye hazır olduğu anlamına gelir.
Nginx Kurulumunu Doğrulama
Nginx servisi genellikle kurulumdan hemen sonra otomatik olarak başlar. Durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo service nginx status
Ubuntu 14.04, systemd yerine upstart veya sysvinit kullandığı için service komutu geçerlidir. Çıktıda Nginx’in çalıştığını (örneğin “nginx is running”) görmelisiniz.
Nginx’in doğru şekilde çalıştığını ve web isteklerini yanıtladığını doğrulamak için, sunucunuzun IP adresini veya alan adını bir web tarayıcısında ziyaret edin.
Eğer sunucunuzun IP adresini bilmiyorsanız, aşağıdaki komutlardan birini kullanabilirsiniz:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
veya harici IP adresiniz için:
curl -4 icanhazip.com
Tarayıcınızda http://your_server_ip adresine gittiğinizde, Nginx’in varsayılan karşılama sayfasını görmelisiniz. Bu sayfa genellikle “Welcome to nginx!” başlığıyla başlar ve Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.
Bu sayfa, /usr/share/nginx/html/index.html dosyasından sunulmaktadır.
Nginx Servisini Yönetme
Nginx bir arka plan servisi olarak çalışır. Onu başlatmak, durdurmak, yeniden başlatmak veya yapılandırma değişikliklerini uygulamak için belirli komutlar kullanmanız gerekir. Ubuntu 14.04 üzerinde bu işlemler için service komutunu kullanırız.
* Nginx’i Başlatma: Eğer Nginx çalışmıyorsa veya manuel olarak durdurduysanız, başlatmak için:
sudo service nginx start
* Nginx’i Durdurma: Nginx servisini tamamen durdurmak için:
sudo service nginx stop
* Nginx’i Yeniden Başlatma: Yapılandırma dosyalarında önemli değişiklikler yaptıysanız ve bu değişikliklerin hemen uygulanmasını istiyorsanız, Nginx’i yeniden başlatmanız gerekir. Bu işlem servisi tamamen durdurup yeniden başlatır:
sudo service nginx restart
* Nginx’i Yeniden Yükleme (Reload): Nginx yapılandırma dosyalarında küçük değişiklikler yaptığınızda (örneğin yeni bir sanal ana bilgisayar eklediğinizde), servisi yeniden başlatmak yerine yeniden yüklemek daha iyidir. reload komutu, mevcut bağlantıları kesmeden yeni yapılandırmayı yükler:
sudo service nginx reload
* Sistem Başlangıcında Otomatik Başlatmayı Etkinleştirme: Nginx kurulumu genellikle servisi otomatik olarak başlatılacak şekilde ayarlar. Ancak, manuel olarak devre dışı bıraktıysanız veya emin olmak istiyorsanız, sistem başlangıcında Nginx’in otomatik olarak başlamasını sağlamak için aşağıdaki komutu kullanabilirsiniz:
sudo update-rc.d nginx defaults
Bu komut, Nginx servisinin sistem başlangıç seviyelerine uygun sembolik bağlantılarını oluşturur.
Nginx Yapılandırmasının Temelleri
Nginx’in gücü ve esnekliği, yapılandırma dosyalarında yatar. Nginx yapılandırması hiyerarşik bir yapıya sahiptir.
* Ana Yapılandırma Dosyası: Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır. Bu dosya, global ayarları (örneğin worker süreçlerinin sayısı, log ayarları, MIME tipleri) içerir ve genellikle diğer yapılandırma dosyalarını include direktifi ile çağırır.
* Site Yapılandırma Dosyaları (Sanal Ana Bilgisayarlar): Web sitelerinizin veya uygulamalarınızın özel yapılandırmaları genellikle /etc/nginx/sites-available/ dizininde bulunur. Bu dizindeki her dosya, bir “sunucu bloğu” (server block) olarak adlandırılan ayrı bir web sitesi veya uygulama için yapılandırma içerir.
* Etkinleştirilmiş Siteler: /etc/nginx/sites-enabled/ dizini, /etc/nginx/sites-available/ dizinindeki yapılandırma dosyalarına sembolik bağlantılar (symlinks) içerir. Nginx yalnızca bu dizindeki bağlantıları izleyerek yapılandırmaları yükler. Bir siteyi etkinleştirmek için sites-available dizininden sites-enabled dizinine bir sembolik bağlantı oluşturmanız gerekir.
* Varsayılan Web Kök Dizini: Nginx’in varsayılan olarak statik dosyaları sunduğu dizin /usr/share/nginx/html‘dir. Ancak, kendi web siteleriniz için genellikle /var/www/your_domain/html gibi özel dizinler oluşturmanız önerilir.
Örnek Bir Sunucu Bloğu (Sanal Ana Bilgisayar) Oluşturma
Kendi web sitenizi barındırmak için yeni bir sunucu bloğu oluşturmanız gerekir. Aşağıdaki adımları izleyerek example.com adında bir site için yapılandırma yapalım.
1. Web Kök Dizinini Oluşturma:
Öncelikle web sitenizin dosyalarını barındıracağınız bir dizin oluşturun. Genellikle bu dizin /var/www/ altında olur ve alan adınızla adlandırılır.
sudo mkdir -p /var/www/example.com/html
sudo komutu ile bu dizini oluştururken, web sunucusu kullanıcısının (genellikle www-data) bu dizine erişim haklarına sahip olduğundan emin olmalıyız. Sahip ve grup ayarlarını www-data olarak değiştirebiliriz:
sudo chown -R www-data:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
2. Örnek Bir HTML Dosyası Oluşturma:
Web sunucunuzun doğru çalıştığını test etmek için bu dizinde basit bir index.html dosyası oluşturalım:
sudo nano /var/www/example.com/html/index.html
Açılan editöre aşağıdaki HTML içeriğini yapıştırın:
Nginx Test Sayfası - example.com
Bu, example.com için Nginx sunucunuzun başarıyla yapılandırıldığını gösteren bir test sayfasıdır.
Ubuntu 14.04 LTS üzerinde Nginx kurulumu başarılı!
Kaydedip kapatın (Ctrl+X, Y, Enter).
3. Yeni Bir Sunucu Bloğu Yapılandırma Dosyası Oluşturma:
Şimdi /etc/nginx/sites-available/ dizininde example.com için yeni bir yapılandırma dosyası oluşturalım:
sudo nano /etc/nginx/sites-available/example.com
Açılan editöre aşağıdaki içeriği yapıştırın:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
error_log /var/log/nginx/example.com_error.log;
access_log /var/log/nginx/example.com_access.log;
}
Yapılandırma Açıklaması:
* listen 80;: Bu sunucu bloğunun HTTP trafiği için 80 numaralı portu dinleyeceğini belirtir.
* listen [::]:80;: IPv6 trafiği için 80 numaralı portu dinleyeceğini belirtir.
* root /var/www/example.com/html;: Web sitenizin dosyalarının bulunduğu kök dizini tanımlar.
* index index.html index.htm;: Bir dizin istendiğinde Nginx’in hangi dosyaları arayacağını belirtir (öncelik sırasına göre).
* server_name example.com www.example.com;: Bu sunucu bloğunun hangi alan adlarına yanıt vereceğini belirtir. Kendi alan adınızı buraya yazmalısınız.
* location / { ... }: Gelen isteklerin nasıl işleneceğini tanımlayan bir bloktur. Buradaki / tüm istekleri kapsar.
* try_files $uri $uri/ =404;: Nginx’in bir dosyayı bulmaya çalışmasını sağlar. Önce istenen URI’yi bir dosya olarak, sonra bir dizin olarak arar. Hiçbir şey bulunamazsa 404 hatası döndürür.
* error_log ve access_log: Bu sunucu bloğuna özel hata ve erişim günlüklerinin nereye yazılacağını belirtir.
Kaydedip kapatın.
4. Sunucu Bloğunu Etkinleştirme:
Yeni oluşturduğunuz sunucu bloğunu etkinleştirmek için /etc/nginx/sites-available/ dizininden /etc/nginx/sites-enabled/ dizinine bir sembolik bağlantı oluşturun:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
5. Varsayılan Sunucu Bloğunu Devre Dışı Bırakma (İsteğe Bağlı ama Önerilir):
Nginx varsayılan olarak /etc/nginx/sites-enabled/default adlı bir sunucu bloğu ile gelir. Kendi sitenizi barındırırken çakışmaları önlemek için bunu devre dışı bırakmanız önerilir:
sudo rm /etc/nginx/sites-enabled/default
6. Nginx Yapılandırmasını Test Etme:
Değişiklikleri uygulamadan önce Nginx yapılandırma dosyalarınızda 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, Nginx size hatanın nerede olduğunu söyleyecektir. Hataları düzeltin ve tekrar test edin.
7. Nginx’i Yeniden Yükleme:
Yapılandırma testiniz başarılı olduktan sonra, değişiklikleri uygulamak için Nginx servisini yeniden yükleyin:
sudo service nginx reload
Şimdi, tarayıcınızdan http://example.com (veya sunucunuzun IP adresi, eğer DNS ayarlarını yapmadıysanız) adresine gittiğinizde, kendi oluşturduğunuz “Merhaba Nginx!” sayfasını görmelisiniz. Eğer bir alan adı kullanıyorsanız, alan adınızın DNS kayıtlarının sunucunuzun IP adresine işaret ettiğinden emin olun.
Önemli Nginx Dizinleri ve Dosyaları
Nginx yönetimi sırasında sıkça kullanacağınız bazı önemli dizinler ve dosyalar şunlardır:
* /etc/nginx/: Nginx yapılandırma dosyalarının ana dizini.
* /etc/nginx/nginx.conf: Nginx’in ana yapılandırma dosyası. Global ayarları ve diğer yapılandırma dosyalarını içerir.
* /etc/nginx/sites-available/: Her bir web sitesi veya uygulama için ayrı yapılandırma dosyalarının saklandığı dizin.
* /etc/nginx/sites-enabled/: Etkin olan web sitelerinin yapılandırma dosyalarına sembolik bağlantıların bulunduğu dizin. Nginx yalnızca bu dizindeki bağlantıları işler.
* /etc/nginx/conf.d/: Ek yapılandırma parçacıklarını (örneğin, GZIP veya fastcgi_params ayarları) içeren dizin. nginx.conf genellikle bu dizindeki .conf uzantılı tüm dosyaları içerir.
* /var/log/nginx/access.log: Nginx’in tüm gelen isteklere ilişkin erişim günlüklerini kaydettiği dosya.
* /var/log/nginx/error.log: Nginx’in karşılaştığı hata günlüklerini kaydettiği dosya.
* /var/www/html/: Nginx’in varsayılan web kök dizini. Kendi siteleriniz için genellikle /var/www/your_domain/html gibi özel dizinler oluşturulur.
* /usr/sbin/nginx: Nginx çalıştırılabilir dosyası.
* /etc/init.d/nginx: Nginx servisinin başlatma/durdurma betiği (Ubuntu 14.04 için).
Temel Güvenlik Hususları
Nginx’i kurduktan sonra, sunucunuzun ve web sitenizin güvenliğini sağlamak için bazı temel adımları göz önünde bulundurmanız önemlidir:
* Sistemi Güncel Tutun: İşletim sisteminizi ve Nginx gibi tüm yazılımlarınızı düzenli olarak güncelleyin (sudo apt-get update && sudo apt-get upgrade). Bu, bilinen güvenlik açıklarının kapatılmasını sağlar.
* Güvenlik Duvarını Yapılandırın: Yalnızca gerekli portlara (HTTP için 80, HTTPS için 443, SSH için 22) erişime izin verin. Diğer tüm portları kapatın. UFW, bu konuda size yardımcı olacaktır.
* SSH Güvenliği: SSH erişiminizi daha güvenli hale getirmek için şunları yapın:
* Varsayılan 22 numaralı portu değiştirin.
* Parola yerine SSH anahtarları kullanın.
* Root ile doğrudan oturum açmayı devre dışı bırakın.
* fail2ban gibi araçlarla kaba kuvvet saldırılarına karşı koruma sağlayın.
* Minimum Yetki Prensibi: Nginx’in www-data gibi düşük yetkili bir kullanıcı altında çalışmasını sağlayın. Web sitenizin dosyaları da bu kullanıcının erişebileceği, ancak başka bir kullanıcının değiştiremeyeceği şekilde ayarlanmalıdır.
* Logları İzleyin: Nginx erişim ve hata günlüklerini düzenli olarak kontrol edin. Anormal aktiviteler veya hatalar, potansiyel güvenlik sorunlarının veya yapılandırma hatalarının göstergesi olabilir.
* HTTPS Kullanın: Hassas veriler aktarıyorsanız veya SEO sıralamanızı iyileştirmek istiyorsanız, web sitenizi HTTPS (SSL/TLS) ile güvenli hale getirin. Let’s Encrypt gibi ücretsiz sertifika sağlayıcıları bu süreci oldukça kolaylaştırmıştır. (Bu makalenin kapsamı dışında olsa da, önemli bir güvenlik adımıdır.)
* Dizin Listelemeyi Devre Dışı Bırakın: Nginx varsayılan olarak dizin listelemeyi devre dışı bırakır. Ancak, yanlışlıkla etkinleştirmediğinizden emin olun, aksi takdirde ziyaretçileriniz sunucunuzdaki tüm dosyaları görebilir.
Sorun Giderme
Nginx ile ilgili sorunlarla karşılaşırsanız, aşağıdaki adımları izleyebilirsiniz:
* Yapılandırma Sözdizimini Kontrol Edin: Her zaman sudo nginx -t komutunu kullanarak yapılandırma dosyalarınızda hata olup olmadığını kontrol edin. Bu, en yaygın sorunları önleyecektir.
* Nginx Servis Durumunu Kontrol Edin: sudo service nginx status komutuyla Nginx’in çalışıp çalışmadığını kontrol edin.
* Günlük Dosyalarını İnceleyin: /var/log/nginx/error.log ve /var/log/nginx/access.log dosyalarını inceleyerek hataların veya erişim sorunlarının nedenini bulabilirsiniz.
* Güvenlik Duvarını Kontrol Edin: sudo ufw status komutuyla güvenlik duvarınızın Nginx’in ihtiyaç duyduğu portları açık tuttuğundan emin olun.
* Port Çakışmaları: Başka bir servisin (örneğin Apache) 80 veya 443 portlarını kullanıp kullanmadığını kontrol edin. sudo netstat -tulpn | grep :80 komutuyla hangi uygulamanın 80 portunu dinlediğini görebilirsiniz.
* Dosya İzinleri: Web kök dizininizin ve dosyalarınızın Nginx’in www-data kullanıcısı tarafından okunabilir olduğundan emin olun.
Sonuç
Bu kapsamlı rehberde, Ubuntu 14.04 LTS işletim sistemi üzerine Nginx web sunucusunu başarıyla nasıl kuracağınızı ve temel yapılandırmalarını nasıl yapacağınızı öğrendiniz. Nginx’in kurulumu, güvenlik duvarı ayarları, servis yönetimi ve sanal ana bilgisayar yapılandırması gibi adımları adım adım uyguladık. Nginx, performanslı ve ölçeklenebilir web uygulamaları için mükemmel bir seçimdir ve bu temel bilgilerle kendi web sitelerinizi veya uygulamalarınızı kolayca barındırabilirsiniz.
Nginx’i daha ileri düzeyde kullanmak için ters proxy yapılandırmaları, yük dengeleme, FastCGI PHP entegrasyonu, SSL/TLS sertifikaları ile HTTPS etkinleştirme ve gelişmiş önbellekleme gibi konuları araştırmanız önerilir. Bu adımlar, web sunucunuzun performansını ve güvenliğini daha da artırmanıza yardımcı olacaktır. Unutmayın ki sunucu yönetimi sürekli bir öğrenme sürecidir ve güvenlik güncellemelerini ve iyi uygulamaları takip etmek her zaman önemlidir.