İLE %100 UYUMLU: Güvenli E-Posta Hosting Hizmetimizi 1 AY ÜCRETSİZ Deneyin! HEMEN OLUŞTURUN
İçindekiler
Modern internet ekosisteminde, bir web sitesinin milisaniyeler içinde açılması ve on binlerce anlık ziyaretçiyi çökmeden kaldırabilmesi, yazılımın kod kalitesi kadar arka planda çalışan sunucu mimarisine de bağlıdır. Yıllar boyunca web dünyasının tartışmasız lideri olan LAMP (Linux, Apache, MySQL, PHP) yığını, günümüzün yüksek trafikli ve asenkron veri akışı gerektiren modern web uygulamaları karşısında performans darboğazları yaşamaya başlamıştır. Bu noktada, sahneye çok daha hafif, çevik ve inanılmaz derecede hızlı bir alternatif olan LEMP yığını çıkmıştır.
LEMP kısaltması; Linux işletim sistemini, Engine-X olarak okunan Nginx web sunucusunu, MySQL (veya MariaDB) veritabanı yönetim sistemini ve PHP (veya Python/Perl) programlama dilini temsil eder. Bu dörtlü kombinasyon, özellikle kaynak tüketimini minimumda tutarak maksimum eşzamanlı bağlantıya (Concurrency) ulaşmak isteyen sistem yöneticilerinin 2026 yılındaki bir numaralı tercihidir.
Eğer elinizde saf (ham) bir Ubuntu sunucu varsa ve bunu yüksek performanslı bir web makinesine dönüştürmek istiyorsanız, doğru yerdesiniz. Bu derinlemesine rehberde; Nginx’in asenkron mimarisinin Apache’den neden üstün olduğunu, PHP-FPM’in nasıl hayat kurtardığını ve sıfırdan bir Ubuntu sunucusu üzerine LEMP yığınının en güvenli şekilde nasıl kurulacağını tüm teknik komutlarıyla birlikte adım adım inceliyoruz.
Kurulum adımlarına geçmeden önce, altyapımızı neden Apache yerine Nginx (Engine-X) üzerine kurduğumuzu anlamak, bir sistem yöneticisinin vizyonu açısından hayati önem taşır.
Kıdemli bir DevOps mühendisi olan Ferit, yönettiği ulusal çaplı bir haber sitesinde her akşam saat 20:00’de flaş haberler girildiğinde sunucunun kilitlendiğini (Downtime) fark etmiştir. Ferit’in kullandığı eski Apache sunucusu, siteye giren her bir ziyaretçi için RAM ve işlemci tüketen yeni bir “İşlem” (Process/Thread) yaratmaktadır (Process-driven mimari). Anlık ziyaretçi sayısı 10.000’e ulaştığında, Apache tüm RAM’i tüketip sunucuyu çökertir. Ferit sistemi Nginx (LEMP) mimarisine taşır. Çünkü Nginx, her kullanıcı için yeni bir işlem başlatmak yerine “Olay Odaklı” (Event-driven) ve “Asenkron” (Non-blocking) bir döngü kullanır. Tek bir “Worker” (İşçi) süreci, binlerce bağlantıyı aynı anda tek bir iplikte (Thread) yönetebilir. Ferit’in sunucusu, aynı RAM miktarıyla Apache’nin 4 katı fazla trafiği hiç zorlanmadan taşımaya başlar.
Taze bir Ubuntu sunucusu (Örneğin Ubuntu 24.04 LTS veya güncel bir sürüm) kiraladığınızda, ilk yapmanız gereken şey sistemin paket dizinini tazelemek ve mevcut güvenlik yamalarını kurmaktır.
Veri merkezi uzmanı Ayla, yeni kurduğu bulut sunucusuna SSH protokolü üzerinden (ssh root@sunucu_ip_adresi) bağlantı sağlar. Herhangi bir yazılım kurmadan önce, çakışmaları ve güvenlik açıklarını önlemek için terminale şu iki komutu yazar:
ssh root@sunucu_ip_adresi
Bash
sudo apt update sudo apt upgrade -y
Bu komutlar, Ubuntu’nun küresel paket depolarına (Repositories) bağlanarak en son sürümleri listeler ve ardından sistemi tamamen günceller. Sunucunun yeniden başlatılmaya ihtiyacı varsa, temiz bir başlangıç için sudo reboot komutuyla makine yeniden başlatılır.
sudo reboot
Sistemimiz güncel olduğuna göre, LEMP yığınının “E” harfini temsil eden web sunucumuzu kurmaya başlayabiliriz. Ubuntu’nun resmi depolarında Nginx her zaman stabil bir sürümle yer alır.
Kurulum için şu komutu çalıştırıyoruz:
sudo apt install nginx -y
İndirme ve kurma işlemi saniyeler içinde tamamlanacaktır. Ubuntu’da Nginx kurulduğu anda arka planda otomatik olarak çalışmaya başlar. Servisin sorunsuz çalışıp çalışmadığını kontrol etmek için:
sudo systemctl status nginx
Ekranda yeşil renkli “active (running)” ibaresini görüyorsanız, web sunucunuz ayağa kalkmış demektir.
Güvenlik Duvarı (UFW) Ayarları: Dışarıdan gelen ziyaretçilerin web sitemize ulaşabilmesi için Ubuntu’nun güvenlik duvarından HTTP (Port 80) ve HTTPS (Port 443) trafiğine izin vermemiz gerekir.
sudo ufw allow 'Nginx Full'
Bu komutun ardından tarayıcınızı açıp sunucunuzun IP adresini (http://sizin_ip_adresiniz) yazdığınızda, ekranda meşhur “Welcome to nginx!” karşılama sayfasını göreceksiniz. Nginx artık emrinize amadedir.
http://sizin_ip_adresiniz
Web sitemizin verilerini (kullanıcı bilgileri, makaleler, ayarlar) güvenle depolayabilmek için LEMP yığınının “M” harfi olan MySQL’i kuruyoruz. (Dileyen kullanıcılar MySQL’in açık kaynaklı çatalı olan MariaDB’yi de tercih edebilir, mimari olarak tamamen aynıdır).
Kurulum komutu:
sudo apt install mysql-server -y
Kurulum tamamlandığında MySQL çalışmaya başlar ancak varsayılan haliyle hiç güvenli değildir. Siber güvenlik uzmanı Sinan, veritabanına dışarıdan yapılabilecek saldırıları (Brute-force, Injection) engellemek için derhal MySQL’in yerleşik güvenlik komut dosyasını çalıştırır:
sudo mysql_secure_installation
Bu sihirbaz, Sinan’a sırasıyla şu soruları sorar ve yapılandırmasını ister:
Y
Bu adımların ardından MySQL veritabanınız, dış müdahalelere kapalı ve güvenli bir şekilde veri depolamaya hazırdır.
Eski LAMP sistemlerinde Apache, PHP kodlarını doğrudan kendi içine gömdüğü mod_php modülü ile okurdu. Ancak Nginx mimarisinde süreç çok daha profesyonel ve izole çalışır. Nginx tek başına PHP kodlarını anlayamaz; statik dosyaları (HTML, CSS, görseller) kendisi hızlıca ziyaretçiye gönderirken, karmaşık PHP işlemlerini (örneğin bir WordPress sayfasının veritabanından çekilip derlenmesini) arkada çalışan PHP-FPM (FastCGI Process Manager) adlı özel bir servise paslar (Reverse Proxy).
mod_php
Bu nedenle, sadece PHP’yi değil, FPM modülünü ve PHP’nin MySQL ile konuşmasını sağlayan veritabanı sürücüsünü de kurmalıyız. (Not: Sürüm numaraları Ubuntu deponuza göre php8.1, php8.3 vb. değişiklik gösterebilir. Sadece php-fpm yazdığınızda Ubuntu en uygun güncel sürümü indirecektir.)
php-fpm
sudo apt install php-fpm php-mysql -y
Kurulum bittikten sonra PHP-FPM servisinin çalışıp çalışmadığını kontrol edebilirsiniz:
sudo systemctl status php8.3-fpm
(Yukarıdaki örnekte Ubuntu 24.04 için yaygın olan 8.3 sürümü baz alınmıştır. Kendi sürümünüze göre komutu güncelleyebilirsiniz.)
Buraya kadar tüm yazılımları kurduk ancak Nginx henüz gelen PHP dosyalarını kime göndereceğini bilmiyor. Bunun için Nginx içinde web sitemize ait bir “Sunucu Bloğu” (Apache’deki adıyla Virtual Host) oluşturmalıyız.
Yazılım geliştirici Meryem, ornekdomain.com adında yeni bir proje yayına alacaktır. Öncelikle web sitesinin dosyalarının barınacağı klasörü oluşturur ve yetkilerini ayarlar:
ornekdomain.com
sudo mkdir -p /var/www/ornekdomain.com/html sudo chown -R $USER:$USER /var/www/ornekdomain.com/html sudo chmod -R 755 /var/www/ornekdomain.com
Ardından Nginx’in sites-available klasörü içinde bu alan adına özel bir yapılandırma dosyası yaratır:
sites-available
sudo nano /etc/nginx/sites-available/ornekdomain.com
Açılan boş metin düzenleyicisine, Nginx ile PHP-FPM’in köprü kurmasını sağlayan şu hayati kod bloğunu yapıştırır:
Nginx
server { listen 80; server_name ornekdomain.com www.ornekdomain.com; root /var/www/ornekdomain.com/html; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; } location ~ /\.ht { deny all; } }
Bu kodda Meryem Nginx’e şu emri vermiştir: “80 portundan (HTTP) gelen ziyaretçileri dinle. Eğer birisi ornekdomain.com adresine girerse, kök dizin olarak belirttiğim klasöre bak. Gelen istek bir .php uzantılı dosyaysa (location ~ .php$), bunu kendin okumaya çalışma; hemen UNIX soketi üzerinden arka planda çalışan php8.3-fpm servisine gönder ve sonucu alıp ziyaretçiye göster.”
.php
php8.3-fpm
Dosyayı kaydedip kapattıktan sonra, bu sitenin Nginx tarafından aktif edilmesi için sites-enabled klasörüne bir kısayol (Symlink) oluşturulur:
sites-enabled
sudo ln -s /etc/nginx/sites-available/ornekdomain.com /etc/nginx/sites-enabled/
Son olarak Nginx yapılandırmasında yazım hatası olup olmadığını test etmek için sudo nginx -t komutu girilir. “Syntax is ok” mesajı alındığında ise sunucu yeniden yüklenir:
sudo nginx -t
sudo systemctl reload nginx
Her şeyin (Nginx ve PHP iletişiminin) kusursuz çalıştığını doğrulamak için web klasörümüzün içine küçük bir PHP dosyası eklemeliyiz.
nano /var/www/ornekdomain.com/html/info.php
İçine şu PHP kodunu yazıp kaydedin:
PHP
<?php phpinfo(); ?>
Şimdi tarayıcınızı açın ve [http://ornekdomain.com/info.php](http://ornekdomain.com/info.php) (veya sunucu IP adresiniz/info.php) adresine gidin. Ekranda devasa bir tablo eşliğinde PHP sürümünüzü, yüklenen modülleri ve “Server API” satırında FPM/FastCGI yazdığını görüyorsanız, LEMP kurulumunuz %100 başarıyla tamamlanmış demektir.
[http://ornekdomain.com/info.php](http://ornekdomain.com/info.php)
Önemli Güvenlik Notu: Meryem, sistemin çalıştığını onayladıktan hemen sonra sudo rm /var/www/[ornekdomain.com/html/info.php](https://ornekdomain.com/html/info.php) komutunu kullanarak bu dosyayı sunucudan derhal siler. Çünkü bu dosya; sunucunuzun iç yollarını, sürüm numaralarını ve kurulu olan tüm hassas bileşenleri açıkça gösterdiği için siber korsanlara bulunmaz bir bilgi kaynağı sağlar.
sudo rm /var/www/[ornekdomain.com/html/info.php](https://ornekdomain.com/html/info.php)
Ubuntu üzerinde bir LEMP yığını (Stack) kurmak; ilk başta komut satırı ekranına alışkın olmayanlar için ürkütücü görünse de, mimarinin arkasındaki temel mantığı anladığınızda ne kadar modüler ve düzenli bir sistem inşa ettiğinizi göreceksiniz.
Apache’nin tek parça halinde çalışan ağır yapısına karşılık; Nginx’in dosyaları ışık hızında sunan asenkron çevikliği, PHP-FPM’in sadece ihtiyaç duyulduğunda devreye giren işçi süreçleri (Workers) ve MySQL’in sarsılmaz veri saklama becerisi birleştiğinde ortaya çıkan şey kusursuz bir web makinesidir. Bu altyapı; üzerinde WordPress barındırmak, Laravel ile yazılmış devasa otomasyon sistemleri koşturmak veya milyonlarca trafiğe sahip özel projeler (Custom Apps) yayınlamak için 2026 yılındaki en sağlam, en optimize ve en endüstri standardı temeldir. Artık sunucunuz, internetin en sert trafik dalgalarına bile göğüs germeye tamamen hazır!