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.
İç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ı
| Özellik | Nginx | Apache |
|---|---|---|
| Mimari | Asenkron, event-driven | Process/thread tabanlı |
| Statik dosya | Çok hızlı | Daha yavaş |
| Dinamik içerik | Reverse proxy gerektirir | Yerleşik modüller |
| Bellek kullanımı | Düşük | Daha yüksek |
| Yapılandırma | Daha basit | .htaccess desteği |
| Kullanım alanı | Yüksek trafikli siteler | PHP 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
# 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
# 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
# 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
# Yapılandırma dosyası oluştur
sudo nano /etc/nginx/sites-available/example.com
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;
}
# 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ı
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
# 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
# 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
# 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ı
# Yapılandırma dosyası oluştur
sudo nano /etc/apache2/sites-available/example.com.conf
<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>
# 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:
# 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)
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ı
# 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.
İlgili Makaleler
VDS Sunucuya SSH ile Bağlanma Rehberi (PuTTY & Terminal)
Linux VDS sunucunuza SSH ile bağlanma adımları: PuTTY, Terminal, anahtar tabanlı kimlik doğrulama, Path Panel firewall kuralı ve güvenlik ipuçları.
Windows VDS'e RDP ile Bağlanma ve Güvenlik Rehberi
Windows Server VDS sunucunuza Uzak Masaüstü (RDP) ile bağlanma adımları, NLA güvenlik ayarları, Path Panel firewall kuralı ve sorun giderme rehberi.
VDS Sunucu İşletim Sistemi Değiştirme Rehberi (Reinstall)
REXE panel üzerinden VDS sunucunuzun işletim sistemini değiştirme adımları, yedekleme önerileri, desteklenen Linux ve Windows Server sürümleri.