Ana içeriğe geç
Kategoriye Dön

Nginx ve Apache Kurulumu: Sanal Host Yapılandırma

Nginx ve Apache web sunucusu kurulumu, karşılaştırma, sanal host (virtual host) yapılandırma, SSL/TLS temelleri ve Linux sunucuda web servisi yönetimi rehberi.

Okuma süresi: 15 dk Sunucu Yönetimi
nginxapacheweb sunucusanal hostssllinuxhttphttps

İçindekiler

Nginx ve Apache Kurulumu: Sanal Host Yapılandırma

Nginx ve Apache, dünya genelinde en yaygın kullanılan iki web sunucusudur. Her ikisi de Linux sunucularda web uygulamaları, statik dosyalar ve reverse proxy olarak kullanılabilir. Bu rehberde her iki sunucunun kurulumunu, temel yapılandırmasını ve sanal host oluşturmayı ele alacağız.

Nginx vs Apache Karşılaştırması

ÖzellikNginxApache
MimariAsenkron, event-drivenProcess/thread tabanlı
Statik dosyaÇok hızlıDaha yavaş
Dinamik içerikReverse proxy gerektirirYerleşik modüller
Bellek kullanımıDüşükDaha yüksek
YapılandırmaDaha basit.htaccess desteği
Kullanım alanıYüksek trafikli sitelerPHP uygulamaları

Yüksek trafikli statik içerik veya reverse proxy için Nginx; PHP tabanlı uygulamalar (WordPress, Laravel) için Apache tercih edilir. İkisi birlikte de kullanılabilir: Nginx önde reverse proxy, Apache arkada uygulama sunucusu olarak.

Nginx Kurulumu

Debian/Ubuntu

hljs bash
# Paket listesini güncelle
sudo apt update

# Nginx kur
sudo apt install nginx -y

# Servisi başlat ve etkinleştir
sudo systemctl start nginx
sudo systemctl enable nginx

# Durumu kontrol et
sudo systemctl status nginx

RHEL/CentOS/AlmaLinux

hljs bash
# EPEL deposunu ekle
sudo dnf install epel-release -y

# Nginx kur
sudo dnf install nginx -y

# Servisi başlat ve etkinleştir
sudo systemctl start nginx
sudo systemctl enable nginx

Nginx Temel Komutlar

hljs bash
# Yapılandırmayı test et
sudo nginx -t

# Yapılandırmayı yeniden yükle (downtime yok)
sudo systemctl reload nginx

# Servisi yeniden başlat
sudo systemctl restart nginx

# Nginx sürümünü göster
nginx -v

Nginx Sanal Host Yapılandırması

Nginx'te her site için /etc/nginx/sites-available/ altında ayrı bir yapılandırma dosyası oluşturulur.

Temel Sanal Host

hljs bash
# Yapılandırma dosyası oluştur
sudo nano /etc/nginx/sites-available/example.com
hljs nginx
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;

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

    # PHP-FPM için
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    # Gizli dosyalara erişimi engelle
    location ~ /\.ht {
        deny all;
    }

    # Log dosyaları
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}
hljs bash
# Siteyi etkinleştir
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# Web dizinini oluştur
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# Yapılandırmayı test et ve yeniden yükle
sudo nginx -t && sudo systemctl reload nginx

Nginx Reverse Proxy Yapılandırması

hljs nginx
server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

Apache Kurulumu

Debian/Ubuntu

hljs bash
# Apache kur
sudo apt update
sudo apt install apache2 -y

# Servisi başlat ve etkinleştir
sudo systemctl start apache2
sudo systemctl enable apache2

# Durumu kontrol et
sudo systemctl status apache2

RHEL/CentOS/AlmaLinux

hljs bash
# Apache (httpd) kur
sudo dnf install httpd -y

# Servisi başlat ve etkinleştir
sudo systemctl start httpd
sudo systemctl enable httpd

Apache Temel Komutlar

hljs bash
# Yapılandırmayı test et
sudo apachectl configtest

# Yapılandırmayı yeniden yükle
sudo systemctl reload apache2

# Modül etkinleştir
sudo a2enmod rewrite
sudo a2enmod ssl

# Site etkinleştir/devre dışı bırak
sudo a2ensite example.com
sudo a2dissite 000-default

Apache Sanal Host Yapılandırması

hljs bash
# Yapılandırma dosyası oluştur
sudo nano /etc/apache2/sites-available/example.com.conf
hljs apache
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html

    <Directory /var/www/example.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>
hljs bash
# Web dizinini oluştur
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com

# Siteyi etkinleştir
sudo a2ensite example.com.conf

# Yapılandırmayı test et ve yeniden yükle
sudo apachectl configtest && sudo systemctl reload apache2

SSL/TLS Yapılandırması (Let's Encrypt)

Ücretsiz SSL sertifikası için Certbot kullanın:

hljs bash
# Certbot kur
sudo apt install certbot -y

# Nginx için
sudo apt install python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

# Apache için
sudo apt install python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com

# Otomatik yenilemeyi test et
sudo certbot renew --dry-run

Manuel SSL Yapılandırması (Nginx)

hljs nginx
server {
    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_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    root /var/www/example.com/html;
    index index.html;
}

# HTTP'yi HTTPS'e yönlendir
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

Firewall Ayarları

hljs bash
# ufw ile HTTP ve HTTPS'e izin ver
sudo ufw allow 'Nginx Full'
# veya
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Apache için
sudo ufw allow 'Apache Full'

REXE sunucularında Path Panel firewall'undan da HTTP (80) ve HTTPS (443) portlarını açmayı unutmayın.

Sonuç

Nginx ve Apache, farklı kullanım senaryoları için güçlü web sunucularıdır. Nginx yüksek performanslı statik içerik ve reverse proxy için idealken, Apache PHP uygulamaları ve .htaccess tabanlı yapılandırmalar için tercih edilir. Her iki sunucuda da sanal host yapılandırması ile birden fazla domain aynı sunucuda barındırılabilir.