Takip et

Ubuntu 16.04 Üzerinde Nginx Sunucu Blokları (Sanal Hostlar) Kurulumu ve Yapılandırması

Ubuntu 16.04 Üzerinde Nginx Sunucu Blokları (Sanal Hostlar) Kurulumu ve Yapılandırması Giriş Günümüzün dinamik web ortamında, tek bir sunu

Ubuntu 16.04 Üzerinde Nginx Sunucu Blokları (Sanal Hostlar) Kurulumu ve Yapılandırması

Giriş

Günümüzün dinamik web ortamında, tek bir sunucu üzerinde birden fazla web sitesini barındırmak yaygın bir gereksinimdir. Bu, sunucu kaynaklarının daha verimli kullanılmasına olanak tanır ve maliyetleri düşürür. Nginx, yüksek performanslı, hafif ve esnek bir web sunucusu olarak bu ihtiyacı karşılamak için “sunucu blokları” (server blocks) adı verilen bir mekanizma sunar. Apache’deki sanal hostlara benzer şekilde, Nginx sunucu blokları, aynı IP adresi ve port üzerinde farklı alan adları için ayrı web siteleri yapılandırmanıza olanak tanır.

Bu kapsamlı teknik makalede, Ubuntu 16.04 işletim sistemi üzerinde Nginx sunucu bloklarının nasıl kurulacağını ve yapılandırılacağını adım adım inceleyeceğiz. Ubuntu 16.04, uzun süreli destek (LTS) sürümü olması nedeniyle birçok üretim ortamında hala kullanılmaktadır ve Nginx yapılandırma prensipleri bu sürümde de geçerlidir. Makale boyunca, temel bir sunucu bloğu oluşturmaktan, birden fazla siteyi yapılandırmaya, SSL/TLS entegrasyonuna ve yaygın sorun giderme yöntemlerine kadar birçok konuyu ele alacağız. Amacımız, Nginx ile sanal hostları yönetme konusunda size sağlam bir temel sağlamaktır.

Ön Koşullar

Bu makaledeki adımları takip edebilmek için aşağıdaki ön koşulların yerine getirilmiş olması gerekmektedir:

* Ubuntu 16.04 Sunucusu: SSH erişimi olan bir Ubuntu 16.04 sunucusuna sahip olmanız gerekmektedir.
* Root veya Sudo Yetkileri: Sunucuda komutları çalıştırmak için root kullanıcısı olmanız veya sudo yetkilerine sahip bir kullanıcı hesabınızın bulunması.
* Nginx Kurulumu: Nginx’in sunucunuza kurulu olması. Eğer kurulu değilse, sonraki bölümde nasıl kurulacağını anlatacağız.
* Alan Adları (Opsiyonel ama Önerilir): Yapılandırmak istediğiniz her web sitesi için bir veya daha fazla kayıtlı alan adınızın olması ve bu alan adlarının DNS kayıtlarının sunucunuzun IP adresine yönlendirilmiş olması (A kaydı). Test amaçlı olarak alan adları olmadan da ilerlenebilir, ancak gerçek dünya senaryoları için alan adları gereklidir.
* Temel Linux Komut Bilgisi: nano veya vi gibi metin düzenleyicileri kullanma ve temel dosya sistemi komutları hakkında bilgi sahibi olmak.

Nginx Kurulumu (Eğer Kurulmadıysa)

Eğer Nginx sunucunuzda henüz kurulu değilse, aşağıdaki adımları izleyerek kolayca kurabilirsiniz.

1. Paket Listesini Güncelleme:
İlk olarak, sunucunuzdaki paket listesini güncelleyerek en son yazılım bilgilerini edinin:

sudo apt update

2. Nginx’i Kurma:
Güncelleme tamamlandıktan sonra, Nginx paketini kurun:

sudo apt install nginx

Kurulum sırasında sizden onay istenirse Y tuşuna basıp Enter’a basın.

3. Nginx Servisini Başlatma ve Etkinleştirme:
Nginx kurulumdan sonra otomatik olarak başlamayabilir. Servisi başlatın ve sunucu her yeniden başlatıldığında otomatik olarak başlaması için etkinleştirin:

sudo systemctl start nginx
    sudo systemctl enable nginx

4. Güvenlik Duvarı Yapılandırması (UFW):
Ubuntu’da varsayılan güvenlik duvarı olan UFW (Uncomplicated Firewall) etkinse, Nginx’in web trafiğini alabilmesi için HTTP ve HTTPS portlarını açmanız gerekir.

Mevcut Nginx UFW profillerini listeleyin:

sudo ufw app list

Çıktı aşağıdaki gibi olacaktır:

Available applications:
      Nginx Full
      Nginx HTTP
      Nginx HTTPS
      OpenSSH

* Nginx HTTP: Yalnızca 80 portunu (HTTP) açar.
* Nginx HTTPS: Yalnızca 443 portunu (HTTPS) açar.
* Nginx Full: Hem 80 hem de 443 portunu (HTTP ve HTTPS) açar.

Şimdilik sadece HTTP erişimine izin verelim:

sudo ufw allow 'Nginx HTTP'

UFW’nin etkin olduğundan emin olun ve durumunu kontrol edin:

sudo ufw enable
    sudo ufw status

Durum çıktısında Nginx HTTP kuralının ALLOW Anywhere olarak göründüğünü teyit edin.

5. Nginx’in Çalıştığını Doğrulama:
Web tarayıcınızdan sunucunuzun IP adresine gidin (örneğin, http://sizin_ip_adresiniz). Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmeniz gerekmektedir. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.

Sunucu Bloğu Kavramı ve Yapısı

Nginx’te sunucu blokları, Apache’deki sanal hostların karşılığıdır. Temel olarak, gelen bir HTTP isteğinin hangi web sitesine yönlendirileceğini belirleyen yapılandırma parçalarıdır. Her sunucu bloğu, belirli bir alan adı, IP adresi ve port kombinasyonu için bir dizi kural tanımlar.

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır. Bu dosya, http bloğu içinde include yönergesini kullanarak ek yapılandırma dosyalarını dahil eder. Varsayılan olarak, bu yönerge aşağıdaki gibidir:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

Bu, Nginx’in /etc/nginx/conf.d/ dizinindeki tüm .conf uzantılı dosyaları ve /etc/nginx/sites-enabled/ dizinindeki dosyaları okuyacağı anlamına gelir.

/etc/nginx/sites-available/ ve /etc/nginx/sites-enabled/ Dizini:
* /etc/nginx/sites-available/: Bu dizin, tüm sunucu bloğu yapılandırma dosyalarınızı sakladığınız yerdir. Burada birden fazla web sitesi için yapılandırma dosyaları oluşturabilirsiniz, ancak bu dosyalar doğrudan Nginx tarafından okunmaz.
* /etc/nginx/sites-enabled/: Bu dizin, Nginx’in gerçekten okuyup kullandığı yapılandırma dosyalarını içerir. Bir sunucu bloğunu etkinleştirmek için, sites-available dizinindeki ilgili dosyaya bu dizinden bir sembolik bağlantı (symlink) oluşturmanız gerekir. Bu ayrım, web sitelerini kolayca etkinleştirmenize veya devre dışı bırakmanıza olanak tanır.

Bir sunucu bloğu temel olarak server { ... } bloğu içinde tanımlanır ve aşağıdaki temel yönergeleri içerir:

* listen: Nginx’in hangi IP adresi ve portu dinlemesi gerektiğini belirtir. Çoğu zaman listen 80; (HTTP için) ve listen 443 ssl; (HTTPS için) kullanılır. IPv6 desteği için listen [::]:80; gibi ifadeler de eklenir.
server_name: Bu sunucu bloğunun hangi alan adları için geçerli olduğunu belirtir. Nginx, gelen isteğin Host başlığını bu yönergedeki değerlerle eşleştirerek doğru sunucu bloğunu bulur. Birden fazla alan adı veya joker karakterler (.alanadiniz.com) kullanabilirsiniz.
* root: Web sitesinin dosyalarının (HTML, CSS, JS vb.) bulunduğu kök dizini belirtir.
* index: Bir dizine yapılan istekte Nginx’in hangi dosyayı varsayılan olarak sunacağını belirtir (örneğin, index.html, index.php).
* location: Belirli URL desenleri için özel kurallar tanımlamak için kullanılır. Örneğin, belirli bir URL’ye erişimi kısıtlamak, bir uygulamaya ters proxy yapmak veya statik dosyaları sunmak için.

İlk Sunucu Bloğunuzu Oluşturma

Şimdi alanadiniz.com adında hayali bir alan adı için ilk Nginx sunucu bloğumuzu oluşturalım.

Dizin Yapısı Oluşturma

Her web sitesi için ayrı bir doküman kökü (document root) oluşturmak iyi bir uygulamadır. Bu, web sitelerinin dosyalarını birbirinden izole tutar.
alanadiniz.com için bir doküman kökü oluşturalım:

sudo mkdir -p /var/www/alanadiniz.com/html

Bu komut, /var/www/alanadiniz.com/html yolunu oluşturur. html dizini, web sitesinin ana dosyalarını içerecektir.

Ardından, bu dizinin sahipliğini ve izinlerini ayarlayalım. Varsayılan olarak root kullanıcısı tarafından oluşturulduğu için, kendi kullanıcı hesabınıza (örneğin $USER değişkeni ile) sahipliği vermeniz, daha sonra bu dizin içinde dosya oluşturup düzenlemenizi kolaylaştırır.

sudo chown -R $USER:$USER /var/www/alanadiniz.com/html
sudo chmod -R 755 /var/www/alanadiniz.com

* chown -R $USER:$USER /var/www/alanadiniz.com/html: Bu komut, /var/www/alanadiniz.com/html dizininin ve içindeki tüm dosyaların sahipliğini mevcut kullanıcınıza ($USER) ve grubuna atar.
* chmod -R 755 /var/www/alanadiniz.com: Bu komut, dizine ve içindeki dosyalara okuma, yazma ve çalıştırma (dizinler için) izinleri verir. 755 izinleri, sahibin tam erişime sahip olduğu, diğer kullanıcıların ve grupların ise sadece okuma ve çalıştırma iznine sahip olduğu anlamına gelir. Nginx’in web dosyalarını okuyabilmesi için bu izinler gereklidir.

Test Sayfası Oluşturma

Sunucu bloğumuzun doğru çalıştığını test etmek için, yeni oluşturduğumuz doküman köküne basit bir index.html dosyası oluşturalım:

sudo nano /var/www/alanadiniz.com/html/index.html

Açılan dosyaya aşağıdaki HTML içeriğini yapıştırın:




    Hoş Geldiniz - alanadiniz.com
    


    
    

Bu, Nginx sunucu bloğunuzun başarıyla yapılandırıldığını gösteren bir test sayfasıdır.

Dosyayı kaydedin (Ctrl+O, Enter) ve kapatın (Ctrl+X).

Sunucu Bloğu Yapılandırma Dosyası Oluşturma

Şimdi alanadiniz.com için yeni bir sunucu bloğu yapılandırma dosyası oluşturalım. Bu dosyayı sites-available dizininde tutacağız:

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

Açılan dosyaya aşağıdaki yapılandırmayı yapıştırın:

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

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

    server_name alanadiniz.com www.alanadiniz.com;

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

    # Hata sayfaları için özel yapılandırmalar (isteğe bağlı)
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    # Güvenlik için sunucu sürümünü gizle (önerilir)
    server_tokens off;
}

Bu yapılandırmayı inceleyelim:

* listen 80; ve listen [::]:80;: Nginx’in hem IPv4 hem de IPv6 adreslerinde 80 numaralı portu (standart HTTP portu) dinlemesini sağlar.
* root /var/www/alanadiniz.com/html;: Bu sunucu bloğu için web sitesi dosyalarının kök dizinini belirtir.
* index index.html index.htm index.nginx-debian.html;: Bir dizine yapılan istekte (örneğin http://alanadiniz.com/) Nginx’in bu listedeki dosyaları sırasıyla aramasını sağlar. Bulduğu ilk dosyayı sunar.
* server_name alanadiniz.com www.alanadiniz.com;: Bu, Nginx’in gelen isteğin Host başlığını kontrol ettiği alan adlarıdır. Eğer gelen istek alanadiniz.com veya www.alanadiniz.com içinse, bu sunucu bloğu kullanılacaktır. Birden fazla alan adı virgülle ayrılır.
* location / { ... }: Kök URL’ye (/) yapılan tüm istekler için geçerli olan bir location bloğudur.
* try_files $uri $uri/ =404;: Bu yönerge çok önemlidir. Gelen isteğe karşılık gelen bir dosya ($uri) veya dizin ($uri/) olup olmadığını kontrol eder. Eğer bulunamazsa, 404 hatası döndürür. Bu, temiz URL’ler ve dosya bulunamadığında doğru davranış için kullanılır.
* error_page 404 /404.html;: İsteğe bağlı olarak, 404 hatası durumunda 404.html dosyasını göstermesini sağlar.
* server_tokens off;: Nginx’in hata sayfalarında veya HTTP yanıt başlıklarında Nginx sürüm numarasını göstermesini engeller. Bu, potansiyel güvenlik açıklarını gizlemek için iyi bir uygulamadır.

Dosyayı kaydedin ve kapatın.

Sunucu Bloğunu Etkinleştirme

Oluşturduğumuz sunucu bloğu dosyası şu anda sites-available dizininde bulunuyor ve Nginx tarafından okunmuyor. Onu etkinleştirmek için, sites-enabled dizinine sembolik bir bağlantı oluşturmamız gerekiyor:

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

Bu komut, alanadiniz.com yapılandırma dosyasının bir kısayolunu sites-enabled dizinine yerleştirir.

Nginx Yapılandırmasını Test Etme ve Yeniden Yükleme

Yeni yapılandırmayı uygulamadan önce, herhangi bir sözdizimi hatası olup olmadığını kontrol etmek her zaman iyi bir fikirdir:

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üzelttikten sonra tekrar test edin.

Yapılandırma testi başarılı olduktan sonra, Nginx’i yeniden yükleyerek değişiklikleri uygulayın:

sudo systemctl reload nginx

reload komutu, Nginx’in çalışan servisleri kesintiye uğratmadan yeni yapılandırmayı yüklemesini sağlar.

Sonucu Tarayıcıda Kontrol Etme

Şimdi web tarayıcınızı açın ve http://alanadiniz.com adresine gidin. Eğer alan adınızın DNS kayıtları sunucunuzun IP adresine doğru şekilde yönlendirilmişse, az önce oluşturduğunuz “alanadiniz.com’a Hoş Geldiniz!” sayfasını görmeniz gerekir.

İkinci Bir Sunucu Bloğu Oluşturma

Tek bir sunucuda birden fazla web sitesi barındırmanın temel amacı budur. Şimdi ikincialanadiniz.com adında ikinci bir alan adı için benzer adımları izleyerek bir sunucu bloğu oluşturalım.

1. Dizin Yapısı Oluşturma:

sudo mkdir -p /var/www/ikincialanadiniz.com/html
    sudo chown -R $USER:$USER /var/www/ikincialanadiniz.com/html
    sudo chmod -R 755 /var/www/ikincialanadiniz.com

2. Test Sayfası Oluşturma:

sudo nano /var/www/ikincialanadiniz.com/html/index.html

İçeriği aşağıdaki gibi değiştirin:


    
    
        Hoş Geldiniz - ikincialanadiniz.com
        
    
    
        
        

Bu, ikinci Nginx sunucu bloğunuzun başarıyla yapılandırıldığını gösteren bir test sayfasıdır.

Kaydedin ve kapatın.

3. Sunucu Bloğu Yapılandırma Dosyası Oluşturma:

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

Aşağıdaki yapılandırmayı ekleyin:

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

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

        server_name ikincialanadiniz.com www.ikincialanadiniz.com;

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

        error_page 404 /404.html;
        location = /404.html {
            internal;
        }

        server_tokens off;
    }

Kaydedin ve kapatın.

4. Sunucu Bloğunu Etkinleştirme:

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

5. Nginx Yapılandırmasını Test Etme ve Yeniden Yükleme:

sudo nginx -t
    sudo systemctl reload nginx

6. Sonucu Tarayıcıda Kontrol Etme:
Tarayıcınızdan http://ikincialanadiniz.com adresine gidin ve ikinci web sitenizin çalıştığını doğrulayın.

Bu adımlarla, aynı sunucu üzerinde iki farklı alan adı için iki ayrı web sitesini başarıyla yapılandırmış oldunuz. Her bir sunucu bloğu tamamen bağımsızdır ve kendi kök dizini, yapılandırması ve alan adlarına sahiptir.

Varsayılan Sunucu Bloğu ve Öncelik

Nginx, bir isteğin hangi sunucu bloğuna yönlendirileceğine karar verirken belirli bir öncelik sırası izler:

1. En İyi server_name Eşleşmesi: Nginx, gelen isteğin Host başlığını server_name yönergeleriyle karşılaştırır. Tam eşleşme (örneğin, www.alanadiniz.com), joker karakterli eşleşmelerden (*.alanadiniz.com) veya düzenli ifade eşleşmelerinden önce gelir.
2. default_server Yönergesi: Eğer hiçbir server_name eşleşmesi bulunamazsa, Nginx listen yönergesinde default_server parametresi belirtilmiş olan sunucu bloğunu kullanır.
3. İlk Sunucu Bloğu: Eğer default_server belirtilmemişse ve hiçbir server_name eşleşmesi yoksa, Nginx dinlediği port için bulduğu ilk sunucu bloğunu kullanır.

Ubuntu’da Nginx kurulumunda, /etc/nginx/sites-enabled/default konumunda varsayılan bir sunucu bloğu bulunur. Bu blok, genellikle sunucu IP adresine doğrudan erişildiğinde veya bilinmeyen bir alan adına yapılan isteklerde gösterilen “Welcome to Nginx!” sayfasını sunar.

Varsayılan Bloğu Devre Dışı Bırakma veya Değiştirme:
Kendi sunucu bloklarınızı yapılandırdıktan sonra, varsayılan bloğu devre dışı bırakmak isteyebilirsiniz. Bunun nedeni, bilinmeyen alan adlarına veya doğrudan IP adresine yapılan isteklerin kendi sitelerinizden birine yönlendirilmesini istemeniz veya sadece Nginx’in varsayılan sayfasını göstermeyi bırakmak istemeniz olabilir.

Varsayılan bloğu devre dışı bırakmak için sembolik bağlantısını silebilirsiniz:

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

Ardından Nginx’i yeniden yükleyin:

sudo systemctl reload nginx

Artık sunucunuzun IP adresine gittiğinizde veya eşleşmeyen bir alan adına eriştiğinizde, Nginx default_server olarak işaretlenmiş başka bir sunucu bloğu yoksa, sites-enabled dizininde alfabetik olarak ilk bulduğu sunucu bloğunu kullanacaktır.

Kendi Varsayılan Bloğunuzu Belirleme:
Eğer kendi sitelerinizden birini varsayılan olarak ayarlamak isterseniz, o sunucu bloğunun listen yönergesine default_server parametresini ekleyebilirsiniz:

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

    root /var/www/alanadiniz.com/html;
    index index.html;
    server_name alanadiniz.com www.alanadiniz.com;
    # ... diğer yapılandırmalar ...
}

Önemli: Bir port için yalnızca tek bir default_server bloğu tanımlanmalıdır. Birden fazla tanımlarsanız, Nginx hangisini kullanacağını bilemez ve beklenmedik davranışlar sergileyebilir.

Yaygın Hatalar ve Sorun Giderme

Nginx sunucu blokları yapılandırırken karşılaşılabilecek bazı yaygın hatalar ve bunların çözümleri:

1. Sözdizimi Hataları:
* Belirti: sudo nginx -t komutu hata veriyor. Nginx yeniden yüklenmiyor veya başlamıyor.
* Çözüm: nginx -t komutunun çıktısını dikkatlice okuyun. Hatanın hangi dosyada ve hangi satırda olduğunu genellikle belirtir. Noktalı virgül eksikliği, yanlış yönerge adları veya yanlış parantez kullanımı en yaygın nedenlerdir.

2. İzin Hataları:
* Belirti: Tarayıcıda 403 Forbidden hatası alıyorsunuz. Nginx hata günlüklerinde (genellikle /var/log/nginx/error.log) “permission denied” mesajları görünüyor.
* Çözüm: Nginx’in web dosyalarını okuyabilmesi için doğru dosya ve dizin izinlerine sahip olduğundan emin olun. Doküman kök dizini için sudo chmod -R 755 /var/www/alanadiniz.com ve dosyalar için sudo chown -R www-data:www-data /var/www/alanadiniz.com/html (veya chown -R $USER:$USER ve Nginx kullanıcısının bu dizini okuyabildiğinden emin olun) komutlarını kullanın. Nginx varsayılan olarak www-data kullanıcısı altında çalışır.

3. Firewall (Güvenlik Duvarı) Engeli:
* Belirti: Tarayıcıda “siteye ulaşılamıyor” veya bağlantı zaman aşımına uğradı hatası alıyorsunuz.
* Çözüm: UFW veya başka bir güvenlik duvarının Nginx’in kullandığı portlara (80 ve/veya 443) izin verdiğinden emin olun. sudo ufw status komutuyla kontrol edin ve gerekirse sudo ufw allow 'Nginx HTTP' veya sudo ufw allow 'Nginx Full' komutlarıyla izin verin.

4. DNS Çözümleme Sorunları:
* Belirti: Alan adınızla siteye erişemiyor, ancak sunucunun IP adresiyle Nginx’in varsayılan sayfasını görebiliyorsunuz.
* Çözüm: Alan adınızın DNS kayıtlarının (A kaydı) sunucunuzun doğru IP adresine işaret ettiğinden emin olun. DNS değişikliklerinin yayılması biraz zaman alabilir (genellikle birkaç dakika ila birkaç saat). dig alanadiniz.com komutuyla DNS çözümlemesini kontrol edebilirsiniz.

5. server_name Çakışmaları veya Yanlış Yapılandırma:
* Belirti: Yanlış web sitesi gösteriliyor veya beklendiği gibi çalışmıyor.
* Çözüm: Tüm sunucu bloklarınızdaki server_name yönergelerini dikkatlice kontrol edin. Aynı alan adını birden fazla sunucu bloğunda tanımlamayın. server_name yönergesinin doğru alan adlarını içerdiğinden emin olun.

6. Sembolik Bağlantı Eksikliği veya Hatalı Bağlantı:
* Belirti: sites-available içinde yapılandırma dosyasını oluşturmanıza rağmen Nginx sitenizi sunmuyor.
* Çözüm: ls -l /etc/nginx/sites-enabled/ komutuyla sembolik bağlantının doğru şekilde oluşturulup oluşturulmadığını kontrol edin. Eğer eksikse sudo ln -s ... komutuyla oluşturun.

7. Nginx Yeniden Yüklenmedi/Başlatılmadı:
* Belirti: Yapılandırma dosyasında değişiklik yaptınız ancak web sitesinde bir değişiklik görmüyorsunuz.
* Çözüm: Her yapılandırma değişikliğinden sonra sudo systemctl reload nginx (hatasız değişiklikler için) veya sudo systemctl restart nginx (büyük değişiklikler veya sorun giderme için) komutunu çalıştırmayı unutmayın.

SSL/TLS (HTTPS) ile Sunucu Blokları

Modern web’de HTTPS, bir web sitesinin olmazsa olmazıdır. Kullanıcı verilerini korur, SEO sıralamasını iyileştirir ve sitenize güvenilirlik katar. Let’s Encrypt gibi ücretsiz sertifika otoriteleri sayesinde HTTPS kurulumu oldukça kolaylaşmıştır.

SSL/TLS ile bir sunucu bloğu yapılandırmak, temel HTTP bloğuna ek olarak 443 portunu dinleyen ve SSL sertifikası dosyalarını belirten yönergeler eklemeyi gerektirir.

Örneğin, alanadiniz.com için Let’s Encrypt ile SSL sertifikası aldığınızı varsayalım (bu adımlar genellikle certbot aracı ile yapılır). Sertifika dosyalarınızın /etc/letsencrypt/live/alanadiniz.com/fullchain.pem ve /etc/letsencrypt/live/alanadiniz.com/privkey.pem konumlarında olduğunu varsayarsak, HTTPS sunucu bloğunuz şöyle görünebilir:

server {
    listen 80;
    listen [::]:80;
    server_name alanadiniz.com www.alanadiniz.com;

    # HTTP'den HTTPS'ye yönlendirme
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name alanadiniz.com www.alanadiniz.com;

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

    ssl_certificate /etc/letsencrypt/live/alanadiniz.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/alanadiniz.com/privkey.pem;

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=63072000" always; # HSTS
    add_header X-Frame-Options "DENY";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

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

    # ... diğer yapılandırmalar ...
}

Bu yapılandırmada:
* İlk server bloğu, 80 portunu dinler ve tüm HTTP isteklerini 301 kalıcı yönlendirmeyle HTTPS’ye yönlendirir.
* İkinci server bloğu, 443 portunu ssl ve http2 (HTTP/2 protokolü için) parametreleriyle dinler.
* ssl_certificate ve ssl_certificate_key yönergeleri, sertifika ve özel anahtar dosyalarının yollarını belirtir.
* ssl_protocols ve ssl_ciphers yönergeleri, güvenlik için önerilen SSL/TLS protokollerini ve şifre süitlerini belirler.
* add_header yönergeleri, güvenlik geliştirmeleri için HTTP yanıt başlıkları ekler (örneğin, HSTS, X-Frame-Options).

SSL/TLS kurulumu başlı başına ayrı bir konu olduğundan, bu örnek sadece Nginx sunucu blokları ile nasıl entegre edildiğini göstermektedir. Detaylı Let’s Encrypt ve Certbot kurulumu için ilgili belgelere başvurmanız önerilir.

Gelişmiş Nginx Yapılandırmaları

Nginx, sadece statik web sayfalarını sunmaktan çok daha fazlasını yapabilir. Sunucu blokları içinde kullanılabilecek bazı gelişmiş özellikler şunlardır:

Ters Proxy (Reverse Proxy)

Nginx’i bir ters proxy olarak kullanmak, Node.js, Python (Django, Flask), Ruby on Rails gibi uygulama sunucularını Nginx’in arkasına gizlemenizi sağlar. Nginx, gelen istekleri uygulama sunucusuna yönlendirir ve uygulama sunucusunun yanıtlarını istemciye geri iletir. Bu, güvenlik, performans (Nginx statik dosyaları daha iyi sunar) ve yük dengeleme için faydalıdır.

server {
    listen 80;
    server_name api.alanadiniz.com;

    location / {
        proxy_pass http://localhost:3000; # Uygulamanızın çalıştığı adres ve port
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Bu örnek, api.alanadiniz.com adresine gelen istekleri localhost:3000 adresinde çalışan bir uygulamaya yönlendirir.

Yük Dengeleme (Load Balancing)

Birden fazla uygulama sunucusuna sahip olduğunuzda, gelen istekleri bu sunucular arasında dağıtmak için Nginx’i bir yük dengeleyici olarak kullanabilirsiniz. Bu, uygulamanızın ölçeklenebilirliğini ve hata toleransını artırır.

upstream backend_servers {
    server 192.168.1.100:8000;
    server 192.168.1.101:8000;
    # Diğer sunucuları buraya ekleyin
}

server {
    listen 80;
    server_name uygulama.alanadiniz.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

upstream bloğu, uygulama sunucularının listesini tanımlar. server bloğu içindeki proxy_pass yönergesi, istekleri bu upstream grubuna yönlendirir.

FastCGI (PHP Uygulamaları için)

Nginx, PHP gibi sunucu taraflı betik dillerini çalıştırmak için doğrudan destek sağlamaz. Bunun yerine, FastCGI protokolü aracılığıyla PHP-FPM (FastCGI Process Manager) gibi bir PHP işlemcisine istekleri iletir.

server {
    listen 80;
    server_name phpapp.alanadiniz.com;
    root /var/www/phpapp.alanadiniz.com/html;
    index index.php index.html;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock; # Ubuntu 16.04 için PHP 7.0 soket yolu
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Bu örnekte, .php ile biten tüm istekler PHP-FPM soketine (unix:/run/php/php7.0-fpm.sock) yönlendirilir. snippets/fastcgi-php.conf dosyası, Nginx’in PHP ile iletişim kurması için gerekli temel ayarları içerir. Ubuntu 16.04’te genellikle PHP 7.0 kullanılır, bu nedenle soket yolu buna göre belirtilmiştir.

Sonuç

Bu makalede, Ubuntu 16.04 üzerinde Nginx sunucu bloklarının (sanal hostlar) nasıl kurulacağını ve yapılandırılacağını ayrıntılı bir şekilde ele aldık. Nginx’in kurulumundan başlayarak, her bir web sitesi için ayrı dizinler oluşturmayı, temel sunucu bloğu yapılandırma dosyasını yazmayı, sembolik bağlantılarla etkinleştirmeyi ve yapılandırmayı test edip yeniden yüklemeyi öğrendik. Ayrıca, birden fazla web sitesi kurma, varsayılan sunucu bloğunu yönetme, yaygın sorun giderme yöntemleri ve SSL/TLS ile gelişmiş proxy ve FastCGI yapılandırmalarına dair temel bilgileri de sunduk.

Nginx sunucu blokları, tek bir sunucu üzerinde birden fazla web uygulamasını veya statik siteyi verimli bir şekilde barındırmanın temel taşıdır. Bu esneklik, web altyapınızı ölçeklendirmenize ve yönetmenize olanak tanır. Edindiğiniz bu bilgilerle, kendi Nginx sunucunuzu güvenle yapılandırabilir ve web projelerinizi hayata geçirebilirsiniz. Nginx’in sunduğu daha birçok gelişmiş özellik ve optimizasyon seçeneği bulunmaktadır; bu makale size bir başlangıç noktası sağlamıştır ve daha derinlemesine keşfetmeye teşvik eder.

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