Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Nginx Unit Kurulumu ve Yapılandırması: Dinamik Uygulama Yığınlarını Tek Süreçte Çalıştırma

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
12
Merhaba arkadaşlar, bugün sizlere sunucu optimizasyonu ve yönetim kolaylığı açısından benim de çok sık başvurduğum bir teknoloji olan Nginx Unit'ten bahsedeceğim. Eğer aynı sunucuda PHP, Python, Node.js, Go, Ruby gibi farklı dillerde yazılmış uygulamalarınız varsa ve bunları ayrı ayrı süreçlerle yönetmekten yorulduysanız, bu rehber tam size göre. Nginx Unit, tüm bu uygulamaları tek bir ana süreç (unitd) içinde yönetmenizi sağlayarak kaynak kullanımınızı iyileştirir ve yapılandırma yönetimini merkezileştirir.

🎯 Nginx Unit Nedir ve Neden Kullanmalıyım?

Nginx Unit, geleneksel Nginx web sunucusundan farklı, dinamik bir uygulama sunucusudur. En büyük avantajı, çalışırken (runtime'da) yeniden başlatmaya gerek kalmadan yapılandırmayı değiştirebilmeniz ve farklı programlama dillerini aynı süreç içinde destekleyebilmeniz. Özellikle konteyner ortamlarında veya mikroservis mimarilerinde yapılandırma esnekliği sağlamak için birebirdir. Benim sunucularımda kaynak tüketimini gözle görülür şekilde düşürdü ve yönetimi çok kolaylaştırdı.

⚙️ Kurulum Adımları (Ubuntu/Debian Örneği)

Kurulum oldukça basittir. Resmi reposunu sistemimize ekleyip paketi yükleyeceğiz. Aşağıdaki adımları root yetkisiyle veya sudo ile çalıştırmanız gerekiyor.

İlk olarak, gerekli tool'ları ve GPG anahtarını ekleyelim:

Bash:
sudo apt-get update
sudo apt-get install curl gnupg2 ca-certificates lsb-release debian-archive-keyring

Ardından, Nginx Unit'in resmi GPG anahtarını indirip sistemimize ekleyelim:

Bash:
curl -sSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-unit-keyring.gpg >/dev/null

Bir sonraki adım, apt kaynak listesine Unit reposunu eklemek:

Bash:
echo "deb [signed-by=/usr/share/keyrings/nginx-unit-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" | sudo tee /etc/apt/sources.list.d/unit.list
echo "deb-src [signed-by=/usr/share/keyrings/nginx-unit-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" | sudo tee -a /etc/apt/sources.list.d/unit.list

Son olarak, paket listesini güncelleyip Nginx Unit'i ve örneğin PHP modülünü kuralım:

Bash:
sudo apt-get update
sudo apt-get install unit unit-php

Bu komutla temel Unit sunucusu ve PHP dili modülünü yüklemiş olduk. Eğer Python, Node.js veya Go kullanacaksanız, unit-python, unit-nodejs, unit-go paketlerini de yükleyebilirsiniz.

🔧 Temel Yapılandırma ve İlk Uygulamamız

Unit, yapılandırmasını bir JSON veya RESTful API üzerinden yönetir. İlk yapılandırmamızı yapmak için /var/www/html dizininde basit bir info.php dosyası oluşturalım.

Bash:
sudo bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'

Şimdi asıl önemli kısma gelelim: Unit'e uygulamamızı ve route'umuzu (yönlendirmemizi) tanıtmak. Bunun için bir JSON konfigürasyon dosyası oluşturacağız. Ben genelde /etc/unit/config.json gibi bir yol kullanırım.

JSON:
{
  "listeners": {
    ":8300": {
      "pass": "routes"
    }
  },
  "routes": [
    {
      "match": {
        "uri": ".php"
      },
      "action": {
        "pass": "applications/php_app"
      }
    }
  ],
  "applications": {
    "php_app": {
      "type": "php",
      "processes": 4,
      "root": "/var/www/html",
      "user": "www-data",
      "group": "www-data"
    }
  }
}

Bu konfigürasyonda neler yaptık bir bakalım:
- :8300 portunu dinlemeye aldık ve gelen istekleri "routes" bölümüne yönlendirdik.
- "routes" bölümünde, eğer istek .php ile bitiyorsa, onu "php_app" isimli uygulamamıza gönder dedik.
- "applications" bölümünde ise PHP uygulamamızın temel ayarlarını (çalışacak proses sayısı, kök dizin, kullanıcı) tanımladık.

Bu JSON yapılandırmasını Unit'e uygulamak için curl komutunu kullanıyoruz:

Bash:
sudo curl -X PUT --data-binary @/etc/unit/config.json --unix-socket /var/run/control.unit.sock http://localhost/config/

Eğer her şey yolundaysa, terminalde yapılandırmanın JSON halini geri döndürecektir. Artık tarayıcınızdan http://SUNUCU_IP_ADRESINIZ:8300/info.php adresine giderek PHP bilgi sayfasını görebilirsiniz.

⚠️ Dikkat Edilmesi Gerekenler ve Optimizasyon İpuçları

Arkadaşlar, bu ayarları yaparken şu noktalara çok dikkat etmelisiniz:
- /var/run/control.unit.sock soketi, Unit'in yönetim arayüzüdür. Bu dosyaya erişimi sadece yetkili kullanıcılara (örn: root) bırakın.
- "processes" sayısını, sunucunuzun CPU çekirdek sayısına ve uygulamanızın yoğunluğuna göre ayarlayın. Ben genelde çekirdek sayısının 1.5-2 katı kadar proses açılmasını öneririm.
- Yapılandırmayı değiştirdikten sonra Unit servisini yeniden başlatmanıza GEREK YOKTUR. Yukarıdaki curl komutu ile anında devreye alınır. Bu, sıfır kesinti süresi (zero-downtime) demektir.
- Eğer Nginx'i reverse proxy olarak kullanmak isterseniz (ki tavsiye ederim), Nginx'in site konfigürasyonunda proxy_pass
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
şeklinde bir satır eklemeniz yeterli olacaktır.

🏁 Sonuç

Nginx Unit, özellikle modern, çok dilli uygulama yığınlarını yönetmek için harika bir araç. Kurulumu ve yapılandırması oldukça basit, ancak sağladığı esneklik ve performans avantajı çok büyük. Ben artık yeni projelerimde varsayılan uygulama sunucusu olarak Unit'i tercih ediyorum.

Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle "processes" sayısını veya farklı dil modüllerini (Python/Go) birlikte kullanma konusunda tecrübeleriniz neler? Aklınıza takılan herhangi bir soru olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri