Nginx (Engine-x olarak telaffuz edilir), yüksek performanslı, açık kaynaklı bir web sunucusu, ters proxy sunucusu, yük dengeleyici ve HTTP önbelleğidir. Özellikle yüksek trafikli web siteleri için tasarlanmış olup, düşük bellek kullanımı ve eşzamanlı bağlantıları olağanüstü bir şekilde işleme yeteneği ile bilinir. CentOS 7 ise kurumsal düzeyde kararlılığı ve güvenliği ile tanınan popüler bir Linux dağıtımıdır. Nginx’i CentOS 7 üzerine kurmak, web uygulamalarınız için güçlü ve verimli bir altyapı oluşturmanın ilk adımıdır.
Bu rehberde, Nginx’i CentOS 7 sunucunuza adım adım nasıl kuracağınızı, temel yapılandırmaları nasıl yapacağınızı ve web sitelerinizi nasıl yayınlayacağınızı detaylı bir şekilde anlatacağız.
Nginx Nedir ve Neden Kullanılır?
Nginx, modern web altyapısının temel taşlarından biridir. Orijinal olarak Igor Sysoev tarafından tasarlanan Nginx, Apache HTTP Sunucusu’na alternatif olarak ortaya çıkmıştır ve özellikle “C10k problemi” olarak bilinen, aynı anda on binlerce bağlantıyı işleme sorununu çözmek için optimize edilmiştir.
Nginx’in Temel Özellikleri ve Avantajları:
- Yüksek Performans: Asenkron, olay tabanlı mimarisi sayesinde, özellikle statik içerik sunumu ve eşzamanlı bağlantıların yönetimi konusunda Apache gibi geleneksel sunuculardan çok daha hızlıdır.
- Düşük Kaynak Tüketimi: Bellek ve CPU kullanımı açısından oldukça verimlidir, bu da daha az donanım kaynağıyla daha fazla trafiği yönetebilmesini sağlar.
- Ters Proxy ve Yük Dengeleyici: Gelen istekleri birden fazla arka uç sunucusuna (uygulama sunucuları gibi) yönlendirebilir ve sunucular arasındaki yükü dağıtarak uygulamanın performansını ve kullanılabilirliğini artırabilir.
- HTTP Önbellekleme: Sık erişilen içeriği önbelleğe alarak yanıt sürelerini kısaltır ve arka uç sunucularının yükünü azaltır.
- Güvenlik: Modüler yapısı ve sürekli güncellemeleri ile güvenli bir web sunucusu ortamı sunar. DDoS saldırılarına karşı koruma mekanizmalarına sahiptir.
- Kolay Yapılandırma: Yapılandırma dosyaları nispeten basittir ve anlaşılması kolaydır, bu da hızlı kurulum ve özelleştirme imkanı sunar.
Bu avantajlar sayesinde Nginx, küçük kişisel bloglardan devasa kurumsal web sitelerine kadar geniş bir yelpazede tercih edilmektedir. Özellikle WordPress, Drupal gibi popüler içerik yönetim sistemleri ve Node.js, Python, Ruby gibi uygulama geliştirme ortamlarıyla birlikte sıklıkla kullanılır.
CentOS 7 Sistemini Güncelleme ve Ön Gereksinimleri Hazırlama
Nginx kurulumuna başlamadan önce, CentOS 7 sunucunuzun güncel olduğundan ve gerekli ön gereksinimlerin karşılandığından emin olmalıyız. Bu adımlar, sistem kararlılığını artırır ve olası bağımlılık sorunlarını önler.
Sistemi Güncelleme
İlk olarak, sunucunuzdaki tüm paketleri en son sürümlerine güncelleyelim. Bu, güvenlik yamalarını ve performans iyileştirmelerini almanızı sağlar.
sudo yum update -y
Bu komut, sistemdeki tüm kurulu paketleri günceller. -y parametresi, tüm sorulara otomatik olarak “evet” yanıtı vermeyi sağlar.
EPEL Deposunu Ekleme
Nginx, CentOS 7’nin varsayılan depolarında bulunmayabilir veya güncel sürümü olmayabilir. Bu nedenle, Extra Packages for Enterprise Linux (EPEL) deposunu eklememiz gerekmektedir. EPEL, Fedora projesi tarafından Enterprise Linux dağıtımları için ek paketler sağlayan bir topluluk deposudur.
sudo yum install epel-release -y
EPEL deposunu ekledikten sonra, paket listesini yeniden güncellemek iyi bir fikirdir:
sudo yum repolist
Bu komut, aktif depoları ve içerdikleri paket sayılarını listeler. EPEL’in listede olduğunu görmelisiniz.
Firewall Ayarlarını Yapılandırma
CentOS 7, varsayılan olarak firewalld hizmetini kullanır. Web sunucunuzun dışarıdan erişilebilir olması için HTTP (80) ve HTTPS (443) portlarını güvenlik duvarında açmanız gerekir. Aksi takdirde, Nginx çalışsa bile web sitenize erişilemez.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
--permanent: Bu kuralın kalıcı olmasını, yani sunucu yeniden başlatıldığında da geçerli olmasını sağlar.--add-service=http: HTTP trafiği için varsayılan port olan 80’i açar.--add-service=https: HTTPS trafiği için varsayılan port olan 443’ü açar.--reload: Güvenlik duvarı ayarlarını yeniden yükler ve değişiklikleri anında aktif hale getirir.
Güvenlik duvarı kurallarının doğru bir şekilde eklendiğini kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo firewall-cmd --list-all
Çıktıda services: http https satırını görmelisiniz.
Nginx Kurulumu
Ön gereksinimleri tamamladığımıza göre, artık Nginx’i kurmaya hazırız.
Nginx Paketini Yükleme
EPEL deposu etkinleştirildiğinde, Nginx’i standart yum komutu ile kolayca kurabiliriz:
sudo yum install nginx -y
Bu komut Nginx paketini ve bağımlılıklarını kuracaktır.
Nginx Servisini Başlatma ve Etkinleştirme
Kurulum tamamlandıktan sonra, Nginx servisini başlatmamız ve sunucu yeniden başlatıldığında otomatik olarak başlaması için etkinleştirmemiz gerekir.
sudo systemctl start nginx
sudo systemctl enable nginx
systemctl start nginx: Nginx servisini başlatır.systemctl enable nginx: Nginx servisini sistem açılışında otomatik olarak başlayacak şekilde ayarlar. Bu, sunucunuz yeniden başlatıldığında Nginx’in manuel olarak başlatılmasına gerek kalmamasını sağlar.
Nginx servisinin durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status nginx
Çıktıda Active: active (running) ifadesini görmelisiniz. Bu, Nginx’in başarıyla çalıştığı anlamına gelir.
Kurulumu Doğrulama
Nginx’in doğru şekilde kurulup çalışmadığını test etmek için web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını girin. Örneğin, http://your_server_ip veya http://your_domain.com.
Eğer her şey doğru kurulduysa, Nginx’in varsayılan hoş geldiniz sayfasını görmelisiniz. Bu sayfa genellikle “Welcome to Nginx on CentOS!” veya benzeri bir mesaj içerir.
Nginx Yapılandırması ve Yönetimi
Nginx’i kurduktan sonra, onu web sitelerinizi barındırmak için yapılandırmanız gerekir. Nginx’in yapılandırma dosyaları oldukça esnek ve güçlüdür.
Temel Yapılandırma Dosyaları ve Dizinleri
Nginx’in ana yapılandırma dosyası ve önemli dizinleri şunlardır:
/etc/nginx/nginx.conf: Nginx’in ana yapılandırma dosyasıdır. Genel Nginx ayarlarını (worker süreçleri, olay modülleri vb.) ve diğer yapılandırma dosyalarını (conf.ddizini altındaki dosyalar gibi) içerir./etc/nginx/conf.d/: Bu dizin, genellikle her bir web sitesi veya uygulama için ayrı yapılandırma dosyalarını (sanal hostlar) tutmak için kullanılır. Nginx,nginx.confdosyasında bu dizin altındaki.confuzantılı tüm dosyaları otomatik olarak okuyacak şekilde yapılandırılmıştır./usr/share/nginx/html: Nginx’in varsayılan web kök dizinidir. Tarayıcınızda sunucunuzun IP adresini girdiğinizde gördüğünüz “Welcome to Nginx” sayfası bu dizinde bulunur./var/log/nginx/: Nginx erişim (access.log) ve hata (error.log) günlüklerinin tutulduğu dizindir. Sorun giderme için bu günlükler oldukça önemlidir.
Sanal Host (Server Block) Oluşturma
Birden fazla web sitesini aynı Nginx sunucusu üzerinde barındırmak için “sanal host” veya Nginx terminolojisinde “server block” adı verilen yapılandırmaları kullanırız. Her bir server block, belirli bir alan adı veya IP adresi için Nginx’in nasıl davranacağını tanımlar.
Örnek olarak, example.com adında bir web sitesi için bir server block oluşturalım:
1. Web Sitesi Kök Dizinini Oluşturma:
Web sitenizin dosyalarını barındıracağı bir dizin oluşturalım. Genellikle /var/www/ altında sitelerinizi tutmak iyi bir uygulamadır.
sudo mkdir -p /var/www/example.com/html
2. Örnek Bir HTML Dosyası Oluşturma:
Web sitesinin çalıştığını doğrulamak için basit bir index.html dosyası oluşturalım.
echo "Merhaba Nginx! Bu example.com sitesidir.
" | sudo tee /var/www/example.com/html/index.html
3. Dizin İzinlerini Ayarlama:
Nginx’in bu dosyalara erişebilmesi için doğru izinleri ayarlamamız gerekir. Nginx genellikle nginx kullanıcısı ve grubu altında çalışır.
sudo chown -R nginx:nginx /var/www/example.com
sudo chmod -R 755 /var/www/example.com
4. Nginx Server Block Dosyasını Oluşturma:
/etc/nginx/conf.d/ dizininde yeni bir yapılandırma dosyası oluşturalım. Dosya adı, genellikle alan adınızla eşleşir ve .conf uzantısına sahip olur.
sudo nano /etc/nginx/conf.d/example.com.conf
Aşağıdaki içeriği dosyaya yapıştırın:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php; # php kullanacaksanız ekleyin
location / {
try_files $uri $uri/ =404;
}
# Hata sayfaları için
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# PHP İşleme (isteğe bağlı, PHP-FPM kuruluysa)
# location ~ \.php$ {
# fastcgi_pass unix:/run/php-fpm/www.sock; # PHP-FPM soket yolu
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
# }
}
Açıklamalar:
listen 80;: Nginx’in HTTP isteklerini 80 numaralı porttan dinlemesini sağlar.server_name example.com www.example.com;: Bu server block’un hangi alan adları için geçerli olduğunu belirtir. Kendi alan adınızı buraya yazmalısınız.root /var/www/example.com/html;: Web sitesi dosyalarının bulunduğu kök dizini belirtir.index index.html index.htm index.php;: Bir dizine erişildiğinde Nginx’in hangi dosyaları otomatik olarak arayacağını belirtir.location / { ... }: Gelen isteklerin nasıl işleneceğini tanımlar.try_filesyönergesi, istenen dosyanın veya dizinin var olup olmadığını kontrol eder.- PHP İşleme bloğu, eğer PHP tabanlı bir uygulama kullanıyorsanız ve PHP-FPM kurduysanız, yorum satırlarını kaldırarak etkinleştirmeniz gereken bir örnektir.
5. Nginx Yapılandırmasını Test Etme:
Değişiklikleri uygulamadan önce, yeni yapılandırma dosyasında sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir.
sudo nginx -t
Eğer çıktı test is successful benzeri bir mesaj içeriyorsa, yapılandırmanızda bir hata yok demektir.
6. Nginx’i Yeniden Yükleme:
Yapılandırma dosyalarındaki değişiklikleri uygulamak için Nginx servisini yeniden yüklememiz gerekir.
sudo systemctl reload nginx
reload komutu, mevcut bağlantıları kesmeden yapılandırmayı yeniden yükler. Bu, web sitenizde kesintisiz hizmet sağlamak için önemlidir. restart komutu ise servisi tamamen durdurup yeniden başlatır ve bu sırada kısa süreli bir kesintiye neden olabilir.
Şimdi tarayıcınızdan http://example.com (veya sunucunuzun IP adresi, eğer DNS ayarlarını yapmadıysanız) adresine giderek yeni web sitenizi kontrol edebilirsiniz.
SSL/TLS Yapılandırmasına Giriş (HTTPS)
Günümüzde, web sitelerinin HTTPS kullanması bir standart haline gelmiştir. HTTPS, verilerin şifrelenmesini sağlayarak güvenliği artırır. Nginx, SSL/TLS sertifikalarını yapılandırmak için mükemmel destek sunar.
Let’s Encrypt gibi ücretsiz sertifika sağlayıcıları ve Certbot gibi araçlar sayesinde HTTPS kurulumu oldukça basitleşmiştir. Bu rehberin kapsamı dışında olsa da, Nginx server block’unuza listen 443 ssl; yönergeleri ekleyerek ve sertifika yollarını belirterek HTTPS’i etkinleştirebilirsiniz.
Örneğin, Certbot ile otomatik kurulum yaptıktan sonra Nginx yapılandırmanız aşağıdaki gibi bir şeye benzeyebilir:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
# Diğer SSL ayarları...
include /etc/nginx/snippets/ssl-params.conf; # Güvenlik için önerilen SSL ayarları
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; # HTTP isteklerini HTTPS'e yönlendir
}
Bu, HTTP isteklerini otomatik olarak HTTPS’e yönlendirirken, 443 portunda güvenli bağlantılar sunan bir yapılandırma örneğidir.
Sonuç ve Sıkça Sorulan Sorular
Bu rehberde, Nginx’i CentOS 7 sunucunuza nasıl kuracağınızı ve temel bir web sitesini nasıl yapılandıracağınızı adım adım öğrendiniz. Nginx, yüksek performanslı web sunucuları kurmak için güçlü ve esnek bir araçtır. Temel kurulum ve yapılandırma adımlarını takip ederek, web projeleriniz için sağlam bir temel oluşturabilirsiniz. İleri seviye Nginx yapılandırmaları, ters proxy, yük dengeleme ve gelişmiş güvenlik ayarları gibi konuları keşfetmek, web altyapınızı daha da optimize etmenize olanak tanır.
Sıkça Sorulan Sorular (SSS)
1. Nginx servis durumunu nasıl kontrol ederim?
Nginx servisinin çalışıp çalışmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status nginx
Çıktıda Active: active (running) ifadesi varsa, Nginx sorunsuz çalışıyor demektir.
2. Nginx yapılandırmasını test etmek için ne yapmalıyım?
Yapılandırma dosyalarında herhangi bir değişiklik yaptıktan sonra, Nginx’i yeniden yüklemeden önce sözdizimi hatası olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:
sudo nginx -t
Bu komut, yapılandırmanızın geçerli olup olmadığını kontrol eder ve olası hataları size bildirir.
3. Nginx’i yeniden başlatmak ile yeniden yüklemek arasındaki fark nedir?
sudo systemctl restart nginx: Nginx servisini tamamen durdurur ve sonra tekrar başlatır. Bu işlem sırasında kısa süreli bir kesinti yaşanabilir. Genellikle sistem çapında önemli değişiklikler yapıldığında veya bir sorun giderilmeye çalışıldığında kullanılır.sudo systemctl reload nginx: Nginx’i durdurmadan yapılandırma dosyalarını yeniden yüklemesini sağlar. Mevcut bağlantıları kesmez ve hizmette herhangi bir kesinti yaşanmaz. Yapılandırma dosyalarında (sanal host ekleme, SSL ayarları vb.) değişiklikler yapıldığında tercih edilen yöntemdir.
4. Nginx varsayılan web kök dizini neresidir?
CentOS 7 üzerinde Nginx’in varsayılan web kök dizini /usr/share/nginx/html‘dir. Ancak, kendi web siteleriniz için genellikle /var/www/your_domain/html gibi özel dizinler oluşturmanız önerilir.
5. Bir sanal host (virtual host) nasıl eklerim?
Yeni bir sanal host eklemek için aşağıdaki adımları izleyin:
- Web sitenizin dosyaları için bir dizin oluşturun (örneğin,
/var/www/yenisite.com/html). - Bu dizine web sitenizin dosyalarını (örneğin,
index.html) yerleştirin. /etc/nginx/conf.d/dizininde yeni bir.confdosyası oluşturun (örneğin,yenisite.com.conf).- Bu dosyaya alan adınız ve kök dizininizi belirten bir
serverbloğu ekleyin. sudo nginx -tile yapılandırmayı test edin.sudo systemctl reload nginxile Nginx’i yeniden yükleyin.
Bu adımlar, CentOS 7 üzerinde Nginx ile web sunucusu deneyiminize başlamanız için sağlam bir temel sağlayacaktır. Başarılar dileriz!
