Takip et

Ubuntu 18.04 Üzerine Nginx Kurulumu [Hızlı Başlangıç Rehberi]

Ubuntu 18.04 Üzerine Nginx Kurulumu [Hızlı Başlangıç Rehberi] Giriş Günümüzün dijital dünyasında web sitelerinin ve uygulamaların hız

Ubuntu 18.04 Üzerine Nginx Kurulumu [Hızlı Başlangıç Rehberi]

Giriş

Günümüzün dijital dünyasında web sitelerinin ve uygulamaların hızlı, güvenilir ve yüksek performanslı bir şekilde sunulması kritik öneme sahiptir. Bu ihtiyaçları karşılamak üzere geliştirilen web sunucuları arasında Nginx (engine-x olarak telaffuz edilir), özellikle yüksek trafikli sitelerde gösterdiği üstün performans, düşük kaynak tüketimi ve esnek mimarisi ile öne çıkmaktadır. Nginx, ilk olarak Igor Sysoev tarafından 2004 yılında piyasaya sürülmüş olup, Apache HTTP Sunucusu’na alternatif olarak ortaya çıkmıştır. O zamandan beri, ters proxy, yük dengeleyici (load balancer), HTTP önbelleği ve posta proxy sunucusu gibi çeşitli rollerde kullanılabilen güçlü bir araç haline gelmiştir.

Bu rehberde, Ubuntu 18.04 işletim sistemi üzerinde Nginx’in nasıl kurulacağını ve temel yapılandırmasının nasıl yapılacağını adım adım öğreneceksiniz. Ubuntu 18.04, uzun süreli destek (LTS) sunan stabil bir sürüm olması nedeniyle sunucu ortamlarında hala yaygın olarak kullanılmaktadır. Bu hızlı başlangıç rehberi, Nginx ile tanışmak isteyen veya mevcut bir Ubuntu 18.04 sunucusuna Nginx kurmak isteyen herkes için pratik ve anlaşılır bir yol haritası sunmaktadır. Amacımız, kurulum sürecini olabildiğince basitleştirmek ve Nginx’in temel işlevlerini anlamanıza yardımcı olmaktır.

Nginx’in tercih edilmesinin başlıca nedenleri arasında, asenkron ve olay tabanlı mimarisi sayesinde binlerce eşzamanlı bağlantıyı düşük bellek kullanımıyla işleyebilmesi yer alır. Bu özellik, özellikle dinamik içerik sunan veya yüksek eşzamanlı kullanıcı sayısına sahip uygulamalar için büyük bir avantaj sağlar. Ayrıca, ters proxy yetenekleri sayesinde birden fazla backend uygulamasını tek bir Nginx sunucusu arkasında çalıştırmak, yük dengeleme ile trafiği dağıtmak ve SSL/TLS sonlandırma gibi gelişmiş işlevleri kolayca yapılandırmak mümkündür.

Bu rehberin sonunda, Ubuntu 18.04 sunucunuzda çalışan bir Nginx örneğine sahip olacak, temel yönetim komutlarını öğrenecek ve kendi web siteniz için basit bir sunucu bloğu oluşturup etkinleştirebileceksiniz. Güvenlik duvarı yapılandırmasından, Nginx’in servis yönetimini ve yapılandırma dosyalarının nasıl çalıştığına kadar birçok önemli konuya değineceğiz.

Ön Koşullar

Nginx kurulumuna başlamadan önce aşağıdaki ön koşulların yerine getirildiğinden emin olmanız gerekmektedir:

* Ubuntu 18.04 Sunucusu: Bu rehber için bir Ubuntu 18.04 işletim sistemine sahip bir sunucuya (fiziksel sunucu, sanal makine veya VPS) ihtiyacınız olacaktır. Sunucunun güncel olduğundan emin olun.
* sudo Yetkilerine Sahip Kullanıcı: Sunucunuzda sudo ayrıcalıklarına sahip, root olmayan bir kullanıcı hesabına sahip olmanız şiddetle tavsiye edilir. Güvenlik açısından doğrudan root kullanıcısı ile işlem yapmak yerine sudo kullanmak daha güvenlidir.
* İnternet Bağlantısı: Nginx paketlerini indirmek ve sistem güncellemelerini yapmak için sunucunuzun aktif bir internet bağlantısına sahip olması gerekmektedir.
* Temel Linux Komut Satırı Bilgisi: Temel Linux komutları (dizinlerde gezinme, dosya düzenleme, paket yönetimi vb.) hakkında bilgi sahibi olmak, rehberdeki adımları sorunsuz bir şekilde uygulamanıza yardımcı olacaktır.
* Güvenlik Duvarı (UFW) Bilgisi: Ubuntu’da genellikle varsayılan olarak gelen UFW (Uncomplicated Firewall) güvenlik duvarının nasıl yönetileceği hakkında temel bilgiye sahip olmak, Nginx’e dışarıdan erişimi sağlamak için önemlidir. Bu rehberde UFW yapılandırması da detaylı olarak ele alınacaktır.

Bu ön koşulları sağladığınızda, Nginx kurulumuna güvenle başlayabiliriz.

Sistemi Güncelleme

Herhangi bir yeni yazılım kurulumuna başlamadan önce, sunucunuzdaki paket listelerini ve yüklü paketleri güncel tutmak iyi bir uygulamadır. Bu, hem güvenlik açıklarını kapatmaya yardımcı olur hem de yeni yazılımların bağımlılık sorunları olmadan doğru bir şekilde kurulmasını sağlar.

İlk olarak, paket listelerinizi güncellemek için aşağıdaki komutu çalıştırın:

sudo apt update

Bu komut, yerel paket indeksinizi uzak depolardaki en son bilgilerle senkronize eder. Böylece sisteminiz, hangi paketlerin güncellenebileceği ve hangi yeni paketlerin mevcut olduğu hakkında bilgi sahibi olur.

Ardından, mevcut yüklü paketleri en son sürümlerine yükseltmek için aşağıdaki komutu kullanın:

sudo apt upgrade

Bu komut, apt update tarafından tespit edilen tüm güncellenebilir paketleri indirip kuracaktır. Yükseltme işlemi sırasında bazı servislerin yeniden başlatılması gerekebilir veya sizden onay istenebilir (Y/n). Onay vermeniz durumunda işlem devam edecektir.

Bu iki komut, sunucunuzun güncel ve sağlıklı bir durumda olmasını sağlar. Bu adımı tamamladıktan sonra Nginx kurulumuna geçmeye hazırız.

Nginx Kurulumu

Ubuntu’nun varsayılan depolarında Nginx paketi bulunmaktadır, bu da kurulumu oldukça basit hale getirir.

Nginx Paketlerini Yükleme

Nginx’i yüklemek için aşağıdaki apt komutunu kullanın:

sudo apt install nginx

Bu komutu çalıştırdığınızda, sistem sizden disk alanı kullanımını onaylamanızı isteyebilir. Y tuşuna basıp Enter’a basarak devam edin. apt paket yöneticisi, Nginx paketini ve onunla birlikte gelen tüm bağımlılıkları indirip kuracaktır.

Kurulum tamamlandığında, Nginx servisi otomatik olarak başlayacak ve sistem açılışında otomatik olarak çalışacak şekilde ayarlanacaktır.

Nginx Servisini Kontrol Etme

Nginx’in başarılı bir şekilde kurulup kurulmadığını ve çalışıp çalışmadığını kontrol etmek için systemctl komutunu kullanabilirsiniz:

systemctl status nginx

Bu komutun çıktısı Nginx servisinin durumunu gösterecektir. Başarılı bir kurulumda, çıktıda active (running) ifadesini görmeniz gerekir. Örneğin:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-10-26 10:00:00 UTC; 5min ago
     Docs: man:nginx(8)
 Main PID: 1234 (nginx)
    Tasks: 2 (limit: 1152)
   CGroup: /system.slice/nginx.service
           ├─1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─1235 nginx: worker process

Eğer Nginx çalışmıyorsa (inactive veya failed durumunda ise), aşağıdaki komutla manuel olarak başlatabilirsiniz:

sudo systemctl start nginx

Nginx’in sistem başlangıcında otomatik olarak başlamasını sağlamak için (eğer zaten enabled değilse):

sudo systemctl enable nginx

Bu adımları tamamladığınızda, Nginx sunucunuz Ubuntu 18.04 sisteminizde başarıyla kurulmuş ve çalışır durumda olacaktır. Ancak, dışarıdan erişilebilir olması için güvenlik duvarı yapılandırması yapmamız gerekmektedir.

Güvenlik Duvarı Yapılandırması

Ubuntu 18.04 sunucularında genellikle varsayılan olarak UFW (Uncomplicated Firewall) güvenlik duvarı etkin gelir. Nginx’in dışarıdan erişilebilir olması için güvenlik duvarında ilgili portların açılması gerekmektedir.

UFW Durumunu Kontrol Etme

Öncelikle UFW’nin etkin olup olmadığını kontrol edelim:

sudo ufw status

Eğer UFW etkin değilse, çıktıda Status: inactive ifadesini görürsünüz. Eğer etkinse, mevcut kuralları listeler.

Nginx İçin UFW Profilleri

Nginx, kurulumuyla birlikte UFW için bazı uygulama profilleri tanımlar. Bu profiller, Nginx’e erişim için gerekli portları kolayca açmamızı sağlar. Mevcut Nginx profillerini listelemek için:

sudo ufw app list

Bu komutun çıktısı aşağıdaki gibi Nginx ile ilgili profilleri gösterecektir:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

* Nginx Full: Hem HTTP (port 80) hem de HTTPS (port 443) trafiğine izin verir.
* Nginx HTTP: Yalnızca HTTP (port 80) trafiğine izin verir.
* Nginx HTTPS: Yalnızca HTTPS (port 443) trafiğine izin verir.

HTTP Erişimi İçin Kural Ekleme

Bu rehberin başlangıç aşamasında, Nginx’in HTTP üzerinden erişilebilir olmasını sağlayacağız. Daha sonra isterseniz HTTPS’i de yapılandırabilirsiniz. HTTP erişimine izin vermek için Nginx HTTP profilini etkinleştirin:

sudo ufw allow 'Nginx HTTP'

Bu komut, Nginx’in standart HTTP portu olan 80 üzerinden gelen bağlantılara izin verecektir.

UFW’yi Etkinleştirme (Gerekliyse)

Eğer sudo ufw status komutu Status: inactive döndürdüyse, UFW’yi etkinleştirmeniz gerekmektedir:

sudo ufw enable

Bu komut, güvenlik duvarını etkinleştirecek ve mevcut kuralları uygulamaya başlayacaktır. Bu işlem sırasında SSH bağlantınızın kesilme riski olabileceği uyarısı alabilirsiniz. Eğer SSH portuna (varsayılan 22) izin veren bir kuralınız yoksa, bağlantınız kesilebilir. Genellikle OpenSSH profili varsayılan olarak izinlidir veya siz zaten manuel olarak eklemişsinizdir. Emin değilseniz, UFW’yi etkinleştirmeden önce SSH erişimine izin verdiğinizden emin olun: sudo ufw allow 'OpenSSH'.

Yapılandırmayı Doğrulama

Güvenlik duvarı kurallarını uyguladıktan sonra, değişikliklerin doğru bir şekilde etkinleştirildiğini doğrulamak için UFW durumunu tekrar kontrol edin:

sudo ufw status

Çıktıda, Nginx HTTP profilinin etkin olduğunu ve port 80’e gelen bağlantılara izin verildiğini görmelisiniz:

Status: active

To                         Action      From
--                         ------      ----
80/tcp (Nginx HTTP)        ALLOW       Anywhere
22/tcp (OpenSSH)           ALLOW       Anywhere
80/tcp (Nginx HTTP (v6))   ALLOW       Anywhere (v6)
22/tcp (OpenSSH (v6))      ALLOW       Anywhere (v6)

Bu adım tamamlandığında, Nginx sunucunuz dışarıdan web tarayıcıları aracılığıyla erişilebilir hale gelmiş demektir.

Nginx Kurulumunu Doğrulama

Nginx’in başarıyla kurulup güvenlik duvarı tarafından erişilebilir hale getirildiğini doğrulamak için, bir web tarayıcısı kullanarak sunucunuzun IP adresine erişmeye çalışabilirsiniz.

Sunucunun IP Adresini Öğrenme

Sunucunuzun genel IP adresini öğrenmek için çeşitli yöntemler kullanabilirsiniz:

1. ip a komutu:

ip a show eth0

Bu komut, eth0 ağ arayüzünüzün IP adresini gösterecektir. Eğer farklı bir ağ arayüzü kullanıyorsanız (örneğin enp0s3), komutu buna göre ayarlamanız gerekebilir. inet ile başlayan satırı arayın.

2. curl ile harici servis kullanma:

curl -4 icanhazip.com

Bu komut, sunucunuzun dışarıdan görünen genel IPv4 adresini döndürecektir.

IP adresinizi öğrendikten sonra, bir web tarayıcısı açın ve bu IP adresini URL çubuğuna yazarak Enter tuşuna basın. Örneğin, IP adresiniz 203.0.113.1 ise, tarayıcınızda http://203.0.113.1 adresine gidin.

“Welcome to Nginx!” Sayfasını Görme

Eğer her şey doğru yapılandırıldıysa, tarayıcınızda 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 çalıştığını gösterir.

Bu sayfa, Nginx’in doğru bir şekilde kurulduğunu, çalıştığını ve güvenlik duvarı kurallarının da düzgün bir şekilde ayarlandığını teyit eder. Artık Nginx sunucunuzu yönetmeye ve yapılandırmaya hazırsınız.

Nginx Servisini Yönetme

Nginx bir systemd servisi olarak çalıştığı için, onu başlatmak, durdurmak, yeniden başlatmak ve yapılandırma değişikliklerini uygulamak için systemctl komutunu kullanabilirsiniz.

Servis Komutları

İşte Nginx servisini yönetmek için kullanabileceğiniz temel komutlar:

* Nginx servisini durdurma:

sudo systemctl stop nginx

Bu komut, Nginx sunucusunu durdurur. Web siteniz artık erişilebilir olmayacaktır.

* Nginx servisini başlatma:

sudo systemctl start nginx

Bu komut, durdurulmuş bir Nginx servisini başlatır.

* Nginx servisini yeniden başlatma:

sudo systemctl restart nginx

Bu komut, Nginx servisini durdurur ve sonra tekrar başlatır. Yapılandırma dosyalarında önemli değişiklikler yaptığınızda veya yeni modüller eklediğinizde kullanışlıdır. Bu işlem sırasında kısa bir kesinti yaşanabilir.

* Nginx yapılandırma değişikliklerini yeniden yükleme (reload):

sudo systemctl reload nginx

Bu komut, Nginx’e yeni yapılandırmayı yüklemesini ancak mevcut bağlantıları kesmeden yapmasını söyler. Bu, web sitenizde herhangi bir kesinti olmadan yapılandırma değişikliklerini uygulamanın tercih edilen yoludur. Genellikle sunucu blokları (virtual hosts) veya diğer yapılandırma dosyalarında değişiklik yaptığınızda kullanılır.

* Nginx servisinin durumunu kontrol etme:

systemctl status nginx

Bu komut, Nginx servisinin çalışıp çalışmadığını, ne kadar süredir çalıştığını ve diğer ilgili bilgileri gösterir.

* Nginx’in sistem başlangıcında otomatik başlamasını devre dışı bırakma:

sudo systemctl disable nginx

Bu komut, Nginx’in sunucu yeniden başlatıldığında otomatik olarak başlamasını engeller.

* Nginx’in sistem başlangıcında otomatik başlamasını etkinleştirme:

sudo systemctl enable nginx

Bu komut, Nginx’in sunucu yeniden başlatıldığında otomatik olarak başlamasını sağlar (varsayılan olarak zaten etkin olmalıdır).

Bu komutlar, Nginx sunucunuzun yaşam döngüsünü yönetmek için temel araçlardır. Özellikle reload komutu, kesintisiz hizmet sunumu için yapılandırma değişikliklerini uygularken çok önemlidir.

Nginx Yapılandırma Dosyaları

Nginx, esnek ve modüler bir yapıya sahiptir ve bu yapılandırma dosyaları aracılığıyla yönetilir. Nginx’in ana yapılandırma dizini /etc/nginx/ altındadır. Bu dizin içinde farklı amaçlar için çeşitli dosyalar ve alt dizinler bulunur.

Ana Yapılandırma Dosyası

* /etc/nginx/nginx.conf: Bu, Nginx’in ana yapılandırma dosyasıdır. Genellikle global ayarları, worker process (işçi süreçleri) sayısı, event modülü ayarları ve HTTP blokları gibi ana yapılandırma bloklarını içerir. Bu dosya, diğer yapılandırma dosyalarını (include direktifi ile) da çağırır.

# /etc/nginx/nginx.conf dosyasının basitleştirilmiş bir görünümü
    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;

    events {
        worker_connections 768;
        # multi_accept on;
    }

    http {
        ##
        # Temel Ayarlar
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Ayarları
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Loglama Ayarları
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Ayarları
        ##
        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;

        ##
        # Sanal Host Yapılandırmaları
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    }

Yukarıdaki örnekte http bloğu içinde include /etc/nginx/sites-enabled/*; satırını göreceksiniz. Bu satır, Nginx’in /etc/nginx/sites-enabled/ dizinindeki tüm yapılandırma dosyalarını okumasını sağlar. Bu dizin genellikle sanal host (server block) yapılandırmalarını içerir.

Sunucu Blokları (Virtual Hosts)

Nginx’te Apache’deki sanal hostlara benzer şekilde “server block” adı verilen yapılar kullanılır. Bu bloklar, farklı alan adları veya IP adresleri için ayrı ayrı web siteleri yapılandırmanıza olanak tanır.

* /etc/nginx/sites-available/: Bu dizin, tüm Nginx sunucu blok yapılandırma dosyalarınızı sakladığınız yerdir. Burada yapılandırdığınız siteler henüz etkin değildir.
* /etc/nginx/sites-enabled/: Bu dizin, etkin olan sunucu bloklarına işaret eden sembolik bağlantıları (symlink) içerir. Bir sunucu bloğunu etkinleştirmek için, /etc/nginx/sites-available/ dizinindeki ilgili dosyaya buradan bir sembolik bağlantı oluşturmanız gerekir.

Varsayılan olarak, Nginx bir default sunucu bloğu ile gelir. Bu blok, sunucunuza bir alan adı belirtmeden IP adresiyle eriştiğinizde veya yapılandırılan hiçbir alan adıyla eşleşmeyen bir istek geldiğinde devreye girer.

Bir sunucu bloğu genellikle aşağıdaki direktifleri içerir:
* listen: Nginx’in hangi portu dinlemesi gerektiğini belirtir (örn. 80 veya 443).
* server_name: Bu bloğun hangi alan adı (veya alan adları) için geçerli olduğunu belirtir (örn. example.com www.example.com).
* root: Web sitesinin kök dizinini belirtir (örn. /var/www/example.com/html).
* index: Dizin istendiğinde hangi dosyanın sunulacağını belirtir (örn. index.html).
* location: Belirli URL yolları için özel yapılandırmalar tanımlar (örn. / tüm istekler için).
* access_log ve error_log: Bu sunucu bloğuna özel erişim ve hata günlüklerinin kaydedileceği yolları belirtir.

Genel Yapılandırma Dosyaları

/etc/nginx/conf.d/: Bu dizin, genellikle ana nginx.conf dosyasında include /etc/nginx/conf.d/.conf; direktifi ile çağrılır. Küçük, özel yapılandırma parçacıklarını veya modül yapılandırmalarını ayrı dosyalarda tutmak için kullanılabilir.
* /etc/nginx/snippets/: Bu dizin, birden fazla sunucu bloğunda tekrar eden kod parçacıklarını (örn. SSL yapılandırmaları, ortak güvenlik başlıkları) saklamak için kullanılabilir. Bu sayede kod tekrarından kaçınılır ve yapılandırma daha düzenli hale gelir.

Yapılandırma Testi

Nginx yapılandırma dosyalarında herhangi bir değişiklik yaptıktan sonra, değişiklikleri uygulamadan önce sözdizimi hatalarını kontrol etmek çok önemlidir. Bunu yapmak için aşağıdaki komutu kullanın:

sudo nginx -t

Eğer yapılandırmanızda bir hata yoksa, çıktıda syntax is ok ve test is successful mesajlarını görürsünüz. Eğer bir hata varsa, Nginx hatanın hangi dosyada ve hangi satırda olduğunu belirtmeye çalışacaktır. Hataları düzelttikten sonra tekrar test edin.

Yapılandırma testi başarılı olduğunda, değişiklikleri uygulamak için Nginx servisini yeniden yükleyebilirsiniz:

sudo systemctl reload nginx

Bu bölümdeki bilgiler, Nginx’in yapılandırma dosyaları hiyerarşisini anlamanıza ve kendi web sitelerinizi kurmak için nasıl düzenlemeler yapmanız gerektiğini kavramanıza yardımcı olacaktır.

Örnek: Yeni Bir Web Sitesi Oluşturma

Şimdi, Nginx üzerinde yeni bir alan adı için basit bir web sitesi (sunucu bloğu) nasıl oluşturulacağını adım adım görelim. Bu örnekte example.com alan adını kullanacağız. Eğer gerçek bir alan adınız varsa, onu kullanabilirsiniz. Yerel test için /etc/hosts dosyanızı düzenleyerek example.com‘u sunucunuzun IP adresine yönlendirebilirsiniz.

Dizin Yapısı Oluşturma

Web sitesi dosyalarınızı saklamak için bir dizin oluşturalım. Nginx genellikle /var/www/ altında siteye özel dizinler kullanır.

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

Bu komut, example.com için html alt diziniyle birlikte gerekli dizinleri oluşturur.

Ardından, web sunucusunun bu dizinlere erişebilmesi için uygun izinleri ayarlamamız gerekiyor. Genellikle www-data kullanıcısı Nginx worker süreçleri tarafından kullanılır. Ayrıca, kendi kullanıcı hesabınızın da bu dizinlerde dosya oluşturabilmesi için sahipliği ayarlamak iyi bir uygulamadır:

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

İlk komut, oluşturduğunuz dizinin sahipliğini mevcut kullanıcınıza verir. İkinci komut ise dizinlere ve dosyalara okuma, yazma ve çalıştırma izinlerini ayarlar.

Örnek HTML Dosyası Oluşturma

Şimdi, web sitesinde görüntülenecek 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:




    Welcome to Example.com!
    


    
    

This is a custom landing page for your new Nginx server block.

Kaydedin ve kapatın (CTRL+X, Y, Enter).

Sunucu Bloğu Oluşturma

Şimdi bu web sitesi için bir Nginx sunucu bloğu yapılandırma dosyası oluşturalım. Bu dosyayı /etc/nginx/sites-available/ dizinine kaydedeceğiz:

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

Açılan editöre aşağıdaki yapılandırmayı 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;
    }

    access_log /var/log/nginx/example.com_access.log;
    error_log /var/log/nginx/example.com_error.log;
}

Bu yapılandırma bloğunu açıklayalım:
* listen 80; ve listen [::]:80;: Nginx’in hem IPv4 hem de IPv6 için 80 numaralı portu dinlemesini sağlar.
* root /var/www/example.com/html;: Web sitesinin kök dizinini belirtir.
* index index.html ...;: Bir dizine erişildiğinde Nginx’in sırasıyla hangi dosyaları arayacağını belirtir.
* server_name example.com www.example.com;: Bu sunucu bloğunun hangi alan adları için geçerli olduğunu belirtir. İstek başlığındaki Host bilgisi bu alan adlarından biriyle eşleşirse bu blok kullanılır.
* location / { ... }: Tüm istekler için geçerli olan bir konum bloğudur. try_files direktifi, gelen isteğin URI’sini sırasıyla dosya, dizin olarak arar ve bulunamazsa 404 hatası döndürür.
* access_log ve error_log: Bu sunucu bloğuna özel erişim ve hata günlüklerinin tutulacağı dosyaları belirtir.

Kaydedin ve kapatın.

Sunucu Bloğunu Etkinleştirme

Sunucu bloğunu etkinleştirmek için, sites-available dizinindeki yapılandırma dosyasına sites-enabled dizininden bir sembolik bağlantı oluşturmamız gerekir:

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

Varsayılan Sunucu Bloğunu Devre Dışı Bırakma (İsteğe Bağlı)

Eğer sadece example.com sunucu bloğunuzun çalışmasını istiyorsanız ve Nginx’in varsayılan “Welcome to Nginx!” sayfasını göstermesini istemiyorsanız, varsayılan sunucu bloğunu devre dışı bırakabilirsiniz:

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

Bu adım, varsayılan yapılandırmanın sembolik bağlantısını kaldırır.

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

Yeni yapılandırmayı uygulamadan önce sözdizimi hatalarını kontrol edin:

sudo nginx -t

Eğer syntax is ok ve test is successful mesajlarını görüyorsanız, Nginx servisini yeniden yükleyebilirsiniz:

sudo systemctl reload nginx

Bu, Nginx’in kesinti olmadan yeni yapılandırmayı yüklemesini sağlar.

Test Etme

Şimdi bir web tarayıcısı açın ve http://example.com adresine gidin. Eğer gerçek bir alan adınız varsa ve DNS kayıtlarınız doğru ayarlanmışsa, oluşturduğunuz “Welcome to Example.com!” sayfasını görmelisiniz.

Eğer gerçek bir alan adınız yoksa ve yerel test yapıyorsanız, bilgisayarınızın /etc/hosts (Linux/macOS) veya C:\Windows\System32\drivers\etc\hosts (Windows) dosyasına aşağıdaki satırı ekleyerek testi yapabilirsiniz (sunucu_ip_adresiniz yerine sunucunuzun gerçek IP adresini yazın):

sunucu_ip_adresiniz example.com www.example.com

Bu değişiklikten sonra tarayıcınızdan http://example.com adresine eriştiğinizde, Nginx’in yeni oluşturduğunuz sayfayı sunduğunu göreceksiniz. Bu, Nginx’in birden fazla web sitesini aynı sunucu üzerinde barındırma yeteneğini (virtual hosting) başarılı bir şekilde yapılandırdığınız anlamına gelir.

Sık Karşılaşılan Sorunlar ve Çözümleri

Nginx kurulumu ve yapılandırması sırasında veya sonrasında bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bunlardan bazıları ve olası çözümleri:

1. Nginx Başlamıyor veya Yeniden Yüklenmiyor:
* Sorun: sudo systemctl status nginx komutu failed durumunu gösteriyor veya sudo systemctl reload nginx komutu hata veriyor.
* Çözüm: Büyük olasılıkla yapılandırma dosyalarınızda bir sözdizimi hatası var. sudo nginx -t komutunu çalıştırın. Bu komut, hatanın hangi dosyada ve hangi satırda olduğunu size söyleyecektir. Hataları düzeltip tekrar deneyin. Ayrıca, 80 veya 443 gibi Nginx’in dinlediği portların başka bir servis tarafından kullanılıp kullanılmadığını kontrol edin (sudo netstat -tulnp | grep :80).

2. “502 Bad Gateway” Hatası:
* Sorun: Nginx çalışıyor ancak web sitenize eriştiğinizde tarayıcınızda “502 Bad Gateway” hatası görüyorsunuz.
* Çözüm: Bu hata genellikle Nginx’in bir arka uç (backend) uygulamasıyla (örn. PHP-FPM, Gunicorn, Node.js uygulaması) iletişim kurmaya çalıştığında ancak arka ucun çalışmaması veya Nginx’in arka uca doğru şekilde bağlanamaması durumunda ortaya çıkar.
* Arka uç uygulamanızın (örneğin PHP-FPM) çalışıp çalışmadığını kontrol edin: sudo systemctl status php7.2-fpm (PHP sürümünüze göre değişir).
* Nginx yapılandırma dosyanızdaki proxy_pass direktifinin veya FastCGI ayarlarının doğru olduğundan emin olun. Arka uç uygulamasının dinlediği soket veya IP:Port adresinin Nginx yapılandırmasında doğru belirtildiğini kontrol edin.
* Nginx hata günlüklerini kontrol edin: /var/log/nginx/error.log. Bu günlükler, sorunun kaynağı hakkında daha fazla bilgi verebilir.

3. “403 Forbidden” Hatası:
* Sorun: Web sitenize eriştiğinizde “403 Forbidden” hatası alıyorsunuz.
* Çözüm: Bu hata genellikle Nginx’in istenen dosyaya veya dizine erişim izni olmadığını gösterir.
* Web sitesi kök dizininin (root direktifinde belirtilen) ve içindeki dosyaların Nginx’in çalıştığı kullanıcı (genellikle www-data) tarafından okunabilir olduğundan emin olun. sudo chown -R www-data:www-data /var/www/example.com ve sudo chmod -R 755 /var/www/example.com komutlarını deneyin.
* Kök dizinde index direktifinde belirtilen bir dosyanın (örn. index.html) mevcut olduğundan emin olun. Eğer dizin listeleme kapalıysa (varsayılan olarak kapalıdır) ve bir index dosyası yoksa 403 hatası alırsınız.

4. “404 Not Found” Hatası:
* Sorun: Web sitenize eriştiğinizde “404 Not Found” hatası alıyorsunuz.
* Çözüm: Bu hata, Nginx’in istenen kaynağı bulamadığı anlamına gelir.
* Nginx yapılandırmanızdaki root direktifinin doğru web sitesi kök dizinini işaret ettiğinden emin olun.
* server_name direktifinin doğru alan adlarını içerdiğinden emin olun.
* location bloklarınızdaki try_files direktifinin doğru yapılandırıldığından emin olun. Dosya yollarını ve dosya adlarını dikkatlice kontrol edin.
* İstenen dosyanın gerçekten belirtilen yolda mevcut olup olmadığını kontrol edin.

5. Web Sitesine Dışarıdan Erişilemiyor (Bağlantı Zaman Aşımı):
* Sorun: Nginx çalışıyor ve yerel olarak erişilebiliyor ancak dışarıdan bir tarayıcı ile IP adresine veya alan adına erişmeye çalıştığınızda bağlantı zaman aşımına uğruyor.
* Çözüm: Bu genellikle güvenlik duvarı sorunudur.
* UFW’nin etkin olup olmadığını ve Nginx için gerekli portlara (80 ve/veya 443) izin veren kuralların olup olmadığını kontrol edin: sudo ufw status.
* Eğer bir bulut sağlayıcısı (AWS, Google Cloud, Azure, DigitalOcean vb.) kullanıyorsanız, sağlayıcınızın kendi güvenlik duvarı (security groups, firewall rules) ayarlarını kontrol edin ve 80/443 portlarına gelen trafiğe izin verildiğinden emin olun.

6. Değişiklikler Uygulanmıyor:
* Sorun: Yapılandırma dosyasında değişiklik yaptınız ancak web sitesinde bir etki görmüyorsunuz.
* Çözüm: Nginx yapılandırma dosyalarında değişiklik yaptıktan sonra, değişikliklerin etkili olması için Nginx servisini yeniden yüklemeniz veya yeniden başlatmanız gerekir. sudo systemctl reload nginx komutunu kullandığınızdan emin olun. Önce sudo nginx -t ile yapılandırmayı test etmeyi unutmayın.

Günlük Dosyalarını Kontrol Etme:
Karşılaştığınız herhangi bir sorun için Nginx’in günlük dosyalarını kontrol etmek, sorunun kaynağını belirlemede en önemli adımdır:
* Erişim günlükleri: /var/log/nginx/access.log (Web sitenize yapılan tüm istekleri kaydeder)
* Hata günlükleri: /var/log/nginx/error.log (Nginx’in karşılaştığı tüm hataları kaydeder)
Bu günlük dosyalarını tail -f /var/log/nginx/error.log gibi komutlarla canlı olarak izleyerek sorunları anında tespit edebilirsiniz.

Bu sık karşılaşılan sorunlar ve çözümleri, Nginx yapılandırmanızda ortaya çıkabilecek çoğu problemi gidermenize yardımcı olacaktır.

Sonuç

Bu kapsamlı rehberde, Ubuntu 18.04 sunucunuz üzerine Nginx web sunucusunu başarıyla kurmayı ve temel yapılandırmasını yapmayı öğrendiniz. Nginx’in ne olduğu, neden tercih edildiği ve sisteminizde nasıl çalıştığı hakkında temel bir anlayış kazandınız.

Adım adım ilerleyerek şunları gerçekleştirdiniz:

* Sisteminizi güncellediniz ve Nginx kurulumu için hazırladınız.
* Ubuntu depolarından Nginx’i yüklediniz ve servis durumunu kontrol ettiniz.
* UFW güvenlik duvarını yapılandırarak Nginx’e dışarıdan erişimi sağladınız.
* Kurulumu bir web tarayıcısı üzerinden doğrulayarak “Welcome to Nginx!” sayfasını görüntülediniz.
* Nginx servisini başlatma, durdurma, yeniden başlatma ve yapılandırma değişikliklerini yeniden yükleme gibi temel yönetim komutlarını öğrendiniz.
* Nginx’in ana yapılandırma dosyalarını, sunucu bloklarının (sites-available ve sites-enabled) nasıl çalıştığını ve genel yapılandırma hiyerarşisini anladınız.
* Kendi alan adınız için özel bir sunucu bloğu oluşturarak basit bir web sitesini Nginx üzerinden yayınlamayı başardınız.
* Sık karşılaşılan sorunlar ve bu sorunların nasıl giderileceği hakkında bilgi edindiniz.

Nginx, yüksek performanslı ve esnek bir web sunucusu olmasının yanı sıra, ters proxy, yük dengeleyici ve HTTP önbelleği gibi gelişmiş işlevleri de yerine getirebilen güçlü bir araçtır. Bu rehber, Nginx ile yolculuğunuzun sadece başlangıcıdır.

Sonraki Adımlar:

* HTTPS (SSL/TLS) Kurulumu: Web sitenizin güvenliğini artırmak için Let’s Encrypt gibi ücretsiz sertifika sağlayıcıları kullanarak HTTPS’i etkinleştirmeyi öğrenin.
* Performans Optimizasyonu: Nginx’in performansını daha da artırmak için Gzip sıkıştırma, önbellekleme ve bağlantı ayarları gibi ileri düzey yapılandırmaları keşfedin.
* Ters Proxy ve Yük Dengeleme: Nginx’i birden fazla backend uygulaması önünde bir ters proxy olarak kullanmayı veya yüksek trafikli siteler için yük dengeleme çözümleri oluşturmayı deneyin.
* PHP veya Diğer Uygulama Sunucuları ile Entegrasyon: Dinamik içerik sunmak için Nginx’i PHP-FPM, Gunicorn (Python), Passenger (Ruby) gibi uygulama sunucularıyla nasıl entegre edeceğinizi araştırın.
* Güvenlik İyileştirmeleri: Nginx’i daha güvenli hale getirmek için çeşitli güvenlik başlıkları, DDoS koruması ve erişim kontrol listeleri (ACL) gibi konuları inceleyin.

Nginx’in gücü ve esnekliği, onu modern web altyapılarının vazgeçilmez bir bileşeni haline getirmektedir. Bu rehberle edindiğiniz temel bilgilerle, kendi projelerinizi başarıyla hayata geçirebilir ve Nginx’in sunduğu olanakları keşfetmeye devam edebilirsiniz. Başarılar dileriz!

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

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.