Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

CentOS 7 üzerinde Nginx Kurulumu ve Yapılandırması: Eksiksiz Adım Adım Kılavuz

Nginx, dünyanın en güçlü ve yaygın olarak benimsenen açık kaynaklı web sunucularından biridir. Olağanüstü performansı, düşük bellek ayak izi ve binlerce eşzamanlı bağlantıyı işleme yeteneği ile bilinir. Nginx, statik içerik sunmak, ters proxy olarak hareket etmek ve dağıtılmış sistemler arasında yük dengelemesi gerçekleştirmek için tercih edilen çözümdür.

Kişisel bir blog, yüksek trafikli bir e-ticaret platformu veya karmaşık bir mikro hizmetler mimarisi çalıştırıyor olsanız da, Nginx kullanıcılarınızın talep ettiği hız ve güvenilirliği sunar. Bu kapsamlı rehber, bir CentOS 7 sunucusunda Nginx’i yükleme, yapılandırma, güvenli hale getirme ve optimize etmenin her adımında size yol gösterir — sistem hazırlığından başlayarak ücretsiz Let’s Encrypt SSL sertifikası ile HTTPS’yi etkinleştirmeye kadar.

> Ön Koşullar: Root veya sudo erişimi olan bir CentOS 7 sunucusu. Takip etmek için güvenilir, yüksek performanslı bir ortama ihtiyacınız varsa, AlexHost’tan VPS Hosting‘i keşfetmeyi düşünün — tam root erişimi ve SSD depolama alanı ile zorlu iş yükleri için özel olarak tasarlanmıştır.

Adım 1: Sisteminizi Güncelleyin

Yeni bir yazılım kurmadan önce, CentOS 7 sisteminizin tamamen güncel olduğundan emin olmak kritik öneme sahiptir. Eski paketler, güvenlik açıklarını ve kurulum sürecini karmaşıklaştıran bağımlılık çatışmalarını ortaya çıkarabilir.

Terminalinizi açın ve aşağıdaki komutu çalıştırın:

sudo yum update -y

Bu komut, tüm yüklü paketleri en son kullanılabilir sürümlerine günceller. -y bayrağı tüm istemleri otomatik olarak onaylar ve işlemi etkileşimsiz hale getirir. Devam etmeden önce güncellemenin tamamen tamamlanmasını bekleyin.

Adım 2: YUM aracılığıyla Nginx’i yükleyin

Nginx, varsayılan CentOS 7 temel depolarında mevcut değildir. Önce RHEL tabanlı dağıtımlar için geniş bir ek yazılım paketi yelpazesi sağlayan EPEL (Extra Packages for Enterprise Linux) deposunu yüklemeniz gerekir.

EPEL deposunu yükleyin:

sudo yum install epel-release -y

Nginx’i yükleyin:

sudo yum install nginx -y

Bu komut, Nginx’i ve tüm gerekli bağımlılıkları indirir ve yükler. Yükleme tamamlandıktan sonra, yüklü sürümü şu komutla doğrulayabilirsiniz:

nginx -v

Şuna benzer bir çıktı görmelisiniz:

nginx version: nginx/1.20.x

Adım 3: Nginx Hizmetini Başlatın ve Etkinleştirin

Nginx yüklendikten sonra, hizmeti başlatmanız ve sunucu her yeniden başlatıldığında otomatik olarak başlaması için yapılandırmanız gerekir.

Nginx hizmetini başlatın:

sudo systemctl start nginx

Nginx’i önyüklemede başlatmak için etkinleştirin:

sudo systemctl enable nginx

Hizmetin çalıştığını doğrulamak için hizmet durumunu kontrol edin:

sudo systemctl status nginx

Hizmetin etkin (çalışıyor) olduğunu gösteren bir çıktı görmelisiniz:

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; ...)
   Active: active (running) since ...

Hizmet başlatılamıyorsa, tanılama bilgileri için /var/log/nginx/error.log konumundaki hata günlüklerini gözden geçirin.

Adım 4: Güvenlik Duvarını Yapılandırın

CentOS 7, varsayılan güvenlik duvarı yönetim aracı olarak firewalld kullanır. Varsayılan olarak, HTTP (port 80) ve HTTPS (port 443) trafiği engellenir. Web trafiğinin Nginx sunucunuza ulaşmasına izin vermek için bu portları açıkça açmanız gerekir.

HTTP trafiğine izin verin:

sudo firewall-cmd --permanent --add-service=http

HTTPS trafiğine izin verin:

sudo firewall-cmd --permanent --add-service=https

Değişiklikleri uygulamak için güvenlik duvarını yeniden yükleyin:

sudo firewall-cmd --reload

Etkin kuralları doğrulayın:

sudo firewall-cmd --list-all

Çıktının services bölümünde hem http hem de https listelenmiş olmalıdır. Sunucunuz harici bir güvenlik duvarının veya güvenlik grubunun arkasında barındırılıyorsa (bulut sağlayıcılarında yaygındır), bu kuralların da 80 ve 443 numaralı portlardaki trafiğe izin vermek için güncellendiğinden emin olun.

Adım 5: Kurulumu Doğrulayın

Nginx’in doğru şekilde kurulduğunu ve içerik sunduğunu onaylamak için bir web tarayıcısı açın ve sunucunuzun genel IP adresine gidin:

http://your_server_ip

Varsayılan Nginx hoş geldiniz sayfası ile karşılanmalısınız; bu sayfa *"Welcome to nginx!"* mesajını görüntüler. Bu, web sunucusunun çalışır durumda olduğunu ve internetten erişilebilir olduğunu onaylar.

Hoş geldiniz sayfasını görmüyorsanız, aşağıdakileri yeniden kontrol edin:

  • Nginx hizmeti çalışıyor (sudo systemctl status nginx)
  • Güvenlik duvarı kuralları doğru şekilde uygulanmış
  • Sunucunuzun IP adresi doğru
  • Port 80’i işgal eden başka bir hizmet (Apache gibi) yok

Adım 6: Nginx Server Blocks’u Yapılandırın

Nginx, farklı alan adları veya alt alan adları için istekleri nasıl işleyeceğini tanımlamak için server blocks‘u (Apache’nin sanal hostlarına işlevsel olarak eşdeğer) kullanır. Her server block tipik olarak /etc/nginx/conf.d/ dizini içinde ayrı bir yapılandırma dosyası olarak depolanır.

Ana Nginx yapılandırma dosyası /etc/nginx/nginx.conf konumunda bulunur. conf.d dizininden tüm .conf dosyalarını otomatik olarak yükleyen bir direktif içerir ve yapılandırmanızı modüler ve yönetimi kolay tutarak saklar.

Adım 6a: Yeni bir Server Block Yapılandırma Dosyası Oluşturun

Alan adınız için yeni bir yapılandırma dosyası oluşturun. example.com yerine gerçek alan adınızı yazın:

sudo nano /etc/nginx/conf.d/example.com.conf

Aşağıdaki server block yapılandırmasını ekleyin:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.php;

    # Logging
    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

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

    # Deny access to hidden files
    location ~ /. {
        deny all;
    }
}

Açıklanan temel direktifler:

DirektifAçıklama
listen 80Nginx’e port 80 (HTTP) üzerinde gelen bağlantıları dinlemesini söyler
server_nameBu server block’un yanıt vereceği alan adlarını tanımlar
rootWeb sitesi dosyalarının depolandığı belge kök dizinini belirtir
indexBir dizin istendiğinde Nginx’in sunacağı varsayılan dosyaları tanımlar
try_filesİstenen URI’yi bir dosya olarak sunmaya çalışır, sonra bir dizin olarak ve hiçbiri yoksa 404 döndürür
access_log / error_logDaha kolay hata ayıklama için bu sanal host için ayrı günlük dosyaları tanımlar

Dosyayı kaydedin ve editörden çıkın (Ctrl+X, sonra Y, sonra nano’da Enter).

Adım 7: Document Root’u ve Test Dosyasını Oluşturun

Server block yapılandırmasında tanımladığınız document root dizinini oluşturun:

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

Server block’un düzgün çalışıp çalışmadığını doğrulamak için basit bir index.html dosyası oluşturun:

echo "<h1>Welcome to Example.com — Powered by Nginx on CentOS 7!</h1>" | sudo tee /var/www/example.com/html/index.html

Nginx’in dosyaları okuyabilmesi için doğru sahiplik ve izinleri ayarlayın:

sudo chown -R nginx:nginx /var/www/example.com/
sudo chmod -R 755 /var/www/example.com/

> SELinux Hakkında Not: CentOS 7 varsayılan olarak SELinux etkinleştirilmiş şekilde gelir. Nginx doğru izinlere rağmen web dosyalarınızı okuyamıyorsa, uygun SELinux bağlamını uygulamanız gerekebilir:

> “`bash

> sudo chcon -Rt httpd_sys_content_t /var/www/example.com/

> “`

Adım 8: Nginx Yapılandırmasını Test Edin

Nginx’i yeniden başlatmadan önce yeni yapılandırmanızı uygulamak için her zaman söz dizimi hatalarını test edin. Yanlış yapılandırılmış bir dosya tüm web sunucunuzu çökertebilir.

Yapılandırma testini çalıştırın:

sudo nginx -t

Başarılı bir test aşağıdaki çıktıyı üretir:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Hatalar bildirilirse, yapılandırma dosyalarınızdaki belirtilen satır numaralarını dikkatle gözden geçirin ve devam etmeden önce sorunları düzeltin.

Değişiklikleri uygulamak için Nginx’i yeniden başlatın:

sudo systemctl restart nginx

Alternatif olarak, etkin bağlantıları kesmeden yapılandırmayı yeniden yüklemek istiyorsanız (üretim ortamları için önerilir), şunu kullanın:

sudo systemctl reload nginx

Şimdi tarayıcınızda alan adınıza gidin. Özel index.html sayfanızı görmelisiniz.

Adım 9: HTTPS’i Let’s Encrypt ile Kurun

Bir web sitesini düz HTTP üzerinden çalıştırmak, kullanıcılarınızı olası dinleme ve ortadaki adam saldırılarına maruz bırakır. Sitenizi HTTPS ile güvence altına almak artık isteğe bağlı değildir — kullanıcı güveni, veri bütünlüğü ve arama motoru sıralaması için temel bir gerekliliktir.

Let’s Encrypt ücretsiz, otomatik ve güvenilir SSL/TLS sertifikaları sağlar. Ayrıca AlexHost’tan gelen premium SSL Sertifikaları‘nı keşfedebilirsiniz; bunlar genişletilmiş doğrulama ve kuruluş tarafından doğrulanan seçenekler sunar ve işletme web siteleri için daha yüksek güven seviyeleri sağlar.

Certbot ve Nginx Eklentisini Yükleyin

sudo yum install certbot python2-certbot-nginx -y

SSL Sertifikasını Alın ve Yükleyin

Certbot’u --nginx eklentisi ile çalıştırın; bu, HTTPS’i etkinleştirmek için Nginx yapılandırmanızı otomatik olarak değiştirir:

sudo certbot --nginx -d example.com -d www.example.com

Etkileşimli istemleri izleyin:

  1. Yenileme bildirimleri için e-posta adresinizi girin
  2. Let’s Encrypt Hizmet Şartları’nı kabul edin
  3. HTTP trafiğini HTTPS’e yönlendirip yönlendirmeyeceğinizi seçin (kuvvetle tavsiye edilir — seçenek 2‘yi seçin)

Certbot otomatik olarak:

  • Let’s Encrypt’ten imzalı bir sertifika alır
  • SSL yönergelerini içerecek şekilde /etc/nginx/conf.d/example.com.conf değiştirir
  • HTTP’den HTTPS’e yönlendirmeyi yapılandırır

Tamamlandıktan sonra, HTTPS yapılandırmasını ziyaret ederek doğrulayın:

https://example.com

Tarayıcınız, bağlantının şifrelendiğini onaylayan bir asma kilit simgesi görüntülemelidir.

Adım 10: Sertifika Yenilemesini Otomatikleştirin

Let's Encrypt sertifikaları 90 gün geçerlidir. Bunları süresi dolmadan yenilemezseniz, siteniz ziyaretçilere güvenlik uyarıları gösterecek ve kullanıcı güvenini ile trafiği ciddi şekilde etkileyecektir.

Yenileme İşlemini Test Edin

Otomasyonu kurmadan önce, yenileme işleminin doğru çalışıp çalışmadığını doğrulayın:

sudo certbot renew --dry-run

Başarılı bir test çalışması, otomatik yenilemenin sorunsuz çalışacağını doğrular.

Otomatik Yenileme için Cron İşi Ayarlayın

Root crontab’ı açın:

sudo crontab -e

Sertifikaları günde iki kez kontrol etmek ve yenilemek için aşağıdaki satırı ekleyin (önerilen sıklık):

0 0,12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"

Cron zamanlamasının açıklaması:

  • 0 0,12 * * * — Her gün gece yarısı ve öğlen saatinde çalışır
  • --quiet — Bir hata oluşmadığı sürece çıktıyı bastırır
  • --post-hook "systemctl reload nginx" — Başarılı bir yenilemeden sonra Nginx’i yeniden yükler ve kapalı kalma süresi olmadan yeni sertifikayı uygular

Crontab editörünü kaydedin ve kapatın. SSL sertifikalarınız artık otomatik olarak yenilenecek ve siteniz hiçbir manuel müdahale olmadan güvenli kalacaktır.

Nginx’de CentOS 7 için Performans Optimizasyonu İpuçları

Temel kurulumunuz tamamlandıktan sonra, Nginx performansını en üst düzeye çıkarmak için bu yapılandırma iyileştirmelerini göz önünde bulundurun:

Gzip Sıkıştırmasını Etkinleştirin

İstemcilere gönderilen yanıtların boyutunu azaltmak için aşağıdakileri nginx.conf içinde http {} bloğuna ekleyin:

gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

Tarayıcı Önbelleğini Yapılandırın

Sunucu yükünü azaltmak ve sayfa yükleme sürelerini iyileştirmek için statik varlıklar için cache-control başlıkları ekleyin:

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

Worker İşlemlerini Ayarlayın

/etc/nginx/nginx.conf içinde, worker işlemlerinin sayısını sunucunuzun CPU çekirdek sayısıyla eşleşecek şekilde ayarlayın:

worker_processes auto;
worker_connections 1024;

> Kaynak yoğun uygulamalar veya yüksek trafikli web siteleri için, garantili CPU, RAM ve depolama kaynakları sağlayan ve komşu gürültüsü etkisi olmayan AlexHost’tan Dedicated Servers‘a yükseltmeyi düşünün.

Nginx ile Birden Fazla Web Sitesini Yönetme

Nginx'in en büyük güçlerinden biri, server blokları aracılığıyla tek bir sunucuda birden fazla web sitesini barındırabilmesidir. Her ek alan adı için basitçe:

  1. .conf içinde yeni bir /etc/nginx/conf.d/ dosyası oluşturun
  2. Benzersiz bir server_name yönergesi tanımlayın
  3. root yönergesini uygun belge köküne yönlendirin
  4. sudo nginx -t ve sudo systemctl reload nginx komutlarını çalıştırın

Web sunucunuzu, sanal ana bilgisayarlarınızı, veritabanlarınızı ve e-posta hesaplarınızı yönetmek için grafik bir arayüz tercih ederseniz, cPanel ile VPS seçeneğini göz önünde bulundurun — sunucu yönetimini esneklikten ödün vermeden basitleştiren tam yönetilen bir kontrol paneli çözümüdür.

Alternatif olarak, AlexHost tarafından sunulan VPS Kontrol Panelleri seçeneklerinin tamamını keşfedin; Plesk, DirectAdmin ve farklı iş akışlarına ve teknik tercihlere uygun diğer seçenekler dahildir.

CentOS 7’de Nginx Sorunlarını Giderme

SorunOlası NedenÇözüm
Nginx başlatılamıyorPort 80/443 zaten kullanımdaÇakışan işlemi tanımlamak için `sudo ss -tlnpgrep :80` komutunu çalıştırın
403 Yasak hatasıYanlış dosya izinleri veya SELinux bağlamıchmod/chown kontrol edin ve SELinux için chcon uygulayın
502 Bad GatewayUpstream backend (PHP-FPM, Node.js) çalışmıyorBackend hizmetinin aktif olduğunu ve socket/port’un doğru olduğunu doğrulayın
SSL sertifikası yenilenmiyorCertbot port 80’e bağlanamıyorPort 80’in açık olduğundan ve başka bir işlem tarafından engellenmediğinden emin olun
Değişiklikler etkili olmuyorYapılandırma yeniden yüklenmediHer yapılandırma değişikliğinden sonra sudo systemctl reload nginx komutunu çalıştırın

Sonuç

Nginx’i CentOS 7’de başarıyla yüklediniz, yapılandırdınız ve güvenliğini sağladınız. Sunucunuz artık yüksek performansla web siteleri barındırmaya, eşzamanlı bağlantıları verimli bir şekilde işlemeye ve içeriği şifreli HTTPS bağlantıları üzerinden sunmaya hazırdır — bunların tümü modern, üretim sınıfı bir web ortamı için gerekli niteliklerdir.

Başarılan işlemlerin özeti:

  • ✅ CentOS 7 sistemini güncelledi ve EPEL deposu aracılığıyla Nginx yükledik
  • ✅ Nginx hizmetini başlattık ve önyükleme sırasında otomatik başlatma için etkinleştirdik
  • ✅ firewalld’yi HTTP ve HTTPS trafiğine izin verecek şekilde yapılandırdık
  • ✅ Bir etki alanı için özel bir sunucu bloğu oluşturduk ve yapılandırdık
  • ✅ Belge kökü için doğru dosya izinlerini ve SELinux bağlamlarını ayarladık
  • ✅ Değişiklikleri uygulamadan önce yapılandırmayı söz dizimi hataları açısından test ettik
  • ✅ Siteyi Certbot aracılığıyla ücretsiz Let’s Encrypt SSL sertifikası ile güvenliğe aldık
  • ✅ Sertifika yenilemeyi bir cron işi ile otomatikleştirdik

Güvenli ve yüksek performanslı bir web sunucusunun bakımı devam eden dikkat gerektirir. Nginx’i düzenli olarak güncel tutun, erişim ve hata günlüklerinizi izleyin ve sitenizin gereksinimleri geliştikçe yapılandırmanızı gözden geçirin.

Nginx ile çalışan projeleriniz için sağlam bir barındırma temeli arıyorsanız, AlexHost tam bir çözüm yelpazesi sunmaktadır — daha küçük siteler için giriş seviyesi Paylaşımlı Web Barındırma‘dan talep gören uygulamalar için yüksek performanslı VPS ve özel altyapıya kadar. Her plan, kurumsal sınıf donanım, 7/24 teknik destek ve çalışma süresi ile güvenliğe olan bağlılık ile desteklenmektedir.