Merhaba! macOS 15 Sequoia güncellemesi sonrasında birçok developer Apache ile ilgili sorunlar yaşıyor. Bu yazıda bu sorunların nedenlerini ve detaylı çözüm yöntemlerini göstereceğim.
Sorunun Kaynağı
macOS 15 Sequoia ile birlikte Apple, sistem güvenliği ve performansı için bazı değişiklikler yaptı. Bu değişiklikler özellikle web development araçlarını etkiliyor:
- Port 80 ve 443 Permission Changes: Sistem daha sıkı kontroller uyguluyor
- Homebrew Apache vs System Apache: İki farklı Apache instance çakışıyor
- Configuration File Changes: Güncelleme sırasında config dosyaları overwrite oluyor
Sorunu Teşhis Etme
1. Hangi Process’lerin Port Kullandığını Kontrol Et
# Port 80'i kullanan process'leri listele
sudo lsof -i:80
# Port 443'ü kullanan process'leri listele
sudo lsof -i:443
# Tüm Apache process'lerini bul
ps aux | grep httpd
ps aux | grep apache
2. Apache Status Kontrolü
# System Apache durumu
sudo apachectl status
# Homebrew Apache durumu (eğer yüklüyse)
brew services list | grep httpd
# Apache configuration test
sudo apachectl configtest
# Apache error logs
sudo tail -f /var/log/apache2/error_log
3. Configuration Dosyalarını Kontrol Et
# Ana configuration dosyası
sudo nano /etc/apache2/httpd.conf
# Homebrew Apache config (varsa)
nano /usr/local/etc/httpd/httpd.conf
# Document root kontrol
grep DocumentRoot /etc/apache2/httpd.conf
Adım Adım Çözüm
1. Tüm Apache Process’lerini Durdur
# System Apache'yi durdur
sudo apachectl stop
# Homebrew Apache'yi durdur (eğer varsa)
brew services stop httpd
# Zorla tüm Apache process'lerini kapat
sudo killall httpd
# System Launch Daemon'ı devre dışı bırak
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
# Port kontrolü
sudo lsof -i:80
2. Homebrew Apache Kurulumu (Önerilen)
# Homebrew'i güncelle
brew update
# Apache'yi kur
brew install httpd
# Service olarak başlat
brew services start httpd
# Otomatik başlama için
sudo brew services start httpd
3. Configuration Ayarları
# Homebrew Apache config dosyasını düzenle
nano /usr/local/etc/httpd/httpd.conf
Önemli ayarlar:
# Port ayarı (sistem apache ile çakışmaması için)
Listen 8080
# Server root
ServerRoot "/usr/local/var"
# Document root
DocumentRoot "/usr/local/var/www"
# Directory permissions
<Directory "/usr/local/var/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Server name
ServerName localhost:8080
# Error log
ErrorLog "/usr/local/var/log/httpd/error_log"
# Access log
CustomLog "/usr/local/var/log/httpd/access_log" common
# PHP support (eğer gerekiyorsa)
LoadModule php_module /usr/local/lib/httpd/modules/libphp.so
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
4. PHP Integration (İsteğe Bağlı)
# PHP'yi yükle
brew install php
# Apache config'e PHP modülünü ekle
echo 'LoadModule php_module /usr/local/lib/httpd/modules/libphp.so' >> /usr/local/etc/httpd/httpd.conf
echo 'AddType application/x-httpd-php .php' >> /usr/local/etc/httpd/httpd.conf
echo 'DirectoryIndex index.html index.php' >> /usr/local/etc/httpd/httpd.conf
# Apache'yi restart et
brew services restart httpd
5. SSL/HTTPS Konfigürasyonu
# SSL module'ünü aktif et
echo 'LoadModule ssl_module lib/httpd/modules/mod_ssl.so' >> /usr/local/etc/httpd/httpd.conf
# SSL configuration dosyasını include et
echo 'Include /usr/local/etc/httpd/extra/httpd-ssl.conf' >> /usr/local/etc/httpd/httpd.conf
# Self-signed certificate oluştur
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /usr/local/etc/httpd/server.key \
-out /usr/local/etc/httpd/server.crt \
-subj "/C=TR/ST=Istanbul/L=Istanbul/O=LocalDev/CN=localhost"
Script ile Otomatik Çözüm
Tüm bu adımları otomatikleştiren bir script:
#!/bin/bash
echo "🔧 macOS 15 Apache Düzeltme Script'i"
echo "====================================="
# Mevcut Apache process'lerini durdur
echo "📍 Apache process'leri durduruluyor..."
sudo apachectl stop 2>/dev/null
brew services stop httpd 2>/dev/null
sudo killall httpd 2>/dev/null
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
# Port kontrolü
echo "📍 Port kullanımı kontrol ediliyor..."
if sudo lsof -i:80 | grep -q LISTEN; then
echo "⚠️ Port 80 hala kullanımda:"
sudo lsof -i:80
echo "Manuel olarak bu process'leri kapatmanız gerekebilir."
fi
# Homebrew güncellemesi
echo "📍 Homebrew güncelleniyor..."
brew update
# Apache kurulumu
echo "📍 Apache kuruluyor..."
brew install httpd
# Configuration backup
echo "📍 Mevcut config yedekleniyor..."
cp /usr/local/etc/httpd/httpd.conf /usr/local/etc/httpd/httpd.conf.backup.$(date +%Y%m%d)
# Basic configuration
echo "📍 Temel konfigürasyon yapılıyor..."
cat > /usr/local/etc/httpd/httpd.conf << 'EOF'
ServerRoot "/usr/local/var"
Listen 8080
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
LoadModule php_module /usr/local/lib/httpd/modules/libphp.so
ServerName localhost:8080
DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php
ErrorLog "/usr/local/var/log/httpd/error_log"
CustomLog "/usr/local/var/log/httpd/access_log" common
EOF
# Log directory oluştur
mkdir -p /usr/local/var/log/httpd
# Test sayfası oluştur
echo "📍 Test sayfası oluşturuluyor..."
cat > /usr/local/var/www/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>Apache Test Page</title>
</head>
<body>
<h1>🎉 Apache Çalışıyor!</h1>
<p>macOS 15 Apache kurulumu başarılı.</p>
<p>Server: Apache/2.4 (Homebrew)</p>
<p>Port: 8080</p>
</body>
</html>
EOF
# PHP info sayfası
cat > /usr/local/var/www/info.php << 'EOF'
<?php
phpinfo();
?>
EOF
# Apache'yi başlat
echo "📍 Apache başlatılıyor..."
brew services start httpd
# Sonuç kontrolü
sleep 2
if curl -s http://localhost:8080 > /dev/null; then
echo "✅ Apache başarıyla çalışıyor!"
echo "🌐 Test URL: http://localhost:8080"
echo "🐘 PHP Info: http://localhost:8080/info.php"
else
echo "❌ Apache başlatılamadı. Log'ları kontrol edin:"
echo "tail -f /usr/local/var/log/httpd/error_log"
fi
echo ""
echo "🔧 Faydalı Komutlar:"
echo " Apache başlat: brew services start httpd"
echo " Apache durdur: brew services stop httpd"
echo " Apache restart: brew services restart httpd"
echo " Config test: /usr/local/bin/httpd -t"
echo " Error log: tail -f /usr/local/var/log/httpd/error_log"
Sık Karşılaşılan Problemler ve Çözümleri
1. “Permission Denied” Hatası
# Apache'yi root olarak başlatma
sudo /usr/local/bin/httpd -D FOREGROUND
# Veya port'u değiştir (1024 üzeri)
sed -i '' 's/Listen 80/Listen 8080/g' /usr/local/etc/httpd/httpd.conf
2. “Address Already in Use” Hatası
# Port'u kullanan process'i bul ve kapat
sudo lsof -i:80
sudo kill -9 <PID>
# Veya farklı port kullan
echo "Listen 8080" > /usr/local/etc/httpd/httpd.conf
3. PHP Module Yüklenmiyor
# PHP'yi yeniden yükle
brew reinstall php
# Module path'ini kontrol et
find /usr/local -name "libphp*.so" 2>/dev/null
# Config'e doğru path'i ekle
LoadModule php_module /usr/local/lib/httpd/modules/libphp.so
4. SSL Certificate Hatası
# Yeni certificate oluştur
sudo openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=TR/ST=Istanbul/L=Istanbul/O=Dev/CN=localhost" \
-keyout /usr/local/etc/httpd/server.key \
-out /usr/local/etc/httpd/server.crt
# Permissions düzelt
sudo chmod 600 /usr/local/etc/httpd/server.key
sudo chmod 644 /usr/local/etc/httpd/server.crt
Performance Tuning
# Worker modülü için optimizasyon
LoadModule mpm_worker_module lib/httpd/modules/mod_mpm_worker.so
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
# Caching
LoadModule cache_module lib/httpd/modules/mod_cache.so
LoadModule cache_disk_module lib/httpd/modules/mod_cache_disk.so
<IfModule mod_cache.c>
CacheQuickHandler off
CacheRoot /usr/local/var/cache/httpd
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
</IfModule>
Monitoring ve Logging
# Real-time log monitoring
tail -f /usr/local/var/log/httpd/error_log /usr/local/var/log/httpd/access_log
# Log rotation setup
cat > /usr/local/etc/newsyslog.d/httpd.conf << 'EOF'
# Apache log rotation
/usr/local/var/log/httpd/access_log 644 7 100 * J
/usr/local/var/log/httpd/error_log 644 7 100 * J
EOF
# Status module aktif et
echo 'LoadModule status_module lib/httpd/modules/mod_status.so' >> /usr/local/etc/httpd/httpd.conf
echo '<Location "/server-status">
SetHandler server-status
Require local
</Location>' >> /usr/local/etc/httpd/httpd.conf
Sonuç
macOS 15 Sequoia’da Apache sorunları yaygın ama çözülebilir. En iyi yaklaşım:
- Homebrew Apache kullanın - Sistem Apache’den daha esnek
- Port 8080 kullanın - Permission sorunlarından kaçının
- Configuration’ları yedekleyin - Güncelleme öncesi backup alın
- Log’ları takip edin - Sorunları erken tespit edin
Bu adımları takip ederek Apache’nizi sorunsuz çalıştırabilirsiniz. Development environment’ınızın stable kalması için regular backup ve monitoring önemli!