Her domain ayrı IIS site
Farklı uygulama havuzu, kök dizin, log ve runtime ayarı gereken domainler için en açık modeldir.
IIS'te domain ekleme; site, fiziksel yol, application pool ve host header binding bileşenlerinin birlikte oluşturulmasını gerektirir. Hazır PowerShell betiği her domain için izole havuz, klasör, www binding ve CSV sonuç kaydı üretir.
Import-Module WebAdministration
New-WebAppPool -Name "eka-ornek.com"
New-Website -Name "eka-ornek.com" -Port 80 -IPAddress "*" -HostHeader "ornek.com" -PhysicalPath "C:\inetpub\siteler\ornek.com" -ApplicationPool "eka-ornek.com"
New-WebBinding -Name "eka-ornek.com" -Protocol http -Port 80 -HostHeader "www.ornek.com"
Toplu otomasyon yanlış mimariyi hızlandırmamalıdır. Müşteri izolasyonu, kaynak limiti, uygulama kökü, mail ve DNS sahipliği kararlarını önce verin.
Farklı uygulama havuzu, kök dizin, log ve runtime ayarı gereken domainler için en açık modeldir.
Aynı uygulamayı açan alias domainlerde tek siteye ek host header binding eklemek daha az kaynak kullanır.
Aynı güven sınırındaki düşük trafikli siteler pool paylaşabilir; farklı müşteriler için ayrı kimlik ve pool önerilir.
Aynı IP üzerinde çok sayıda HTTPS site için host name ve SNI binding planını sertifika otomasyonundan önce belirleyin.
Web-Server rolü, yönetim araçları ve PowerShell cmdlet'lerinin yüklü olduğunu doğrulayın.
Get-WindowsFeature Web-Server,Web-Mgmt-Tools
Get-Module -ListAvailable WebAdministration,IISAdministration Aynı site adı, host header veya port çakışmasını işlemden önce tespit edin.
Import-Module WebAdministration
Get-Website
Get-WebBinding NTFS izinlerini, application pool başlatmayı ve binding eşleşmesini doğrulayın.
Get-Content C:\Eka\domainler.txt -TotalCount 2 | Set-Content C:\Eka\domainler-test.txt Üretimde ExecutionPolicy'yi kalıcı olarak Bypass yapmak yerine betiği imzalayın veya tek süreç kapsamı kullanın.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass Site, pool, klasör ve binding oluşturma sonuçları CSV'ye kaydedilir.
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Eka\iis-toplu-domain.ps1 Get-Website, Get-WebBinding ve yerel Host header isteğiyle sonucu test edin.
Get-Website | Select Name,State,PhysicalPath
Invoke-WebRequest -Uri http://127.0.0.1 -Headers @{Host="ornek.com"} -UseBasicParsing Her domain için site, app pool, klasör, www binding, NTFS izni ve CSV kaydı oluşturur.
$HataEylemi = "Stop"
$DomainDosyasi = "C:\Eka\domainler.txt"
$WebKoku = "C:\inetpub\siteler"
$SonucDosyasi = "C:\Eka\iis-domain-sonuclari.csv"
$HataDosyasi = "C:\Eka\iis-domain-hatalari.log"
$ErrorActionPreference = $HataEylemi
Import-Module WebAdministration
New-Item -ItemType Directory -Path (Split-Path $SonucDosyasi) -Force | Out-Null
New-Item -ItemType Directory -Path $WebKoku -Force | Out-Null
"domain,durum,site,uygulama_havuzu,fiziksel_yol" | Set-Content -Path $SonucDosyasi -Encoding UTF8
"" | Set-Content -Path $HataDosyasi -Encoding UTF8
Get-Content $DomainDosyasi | ForEach-Object {
$Domain = $_.Trim().ToLowerInvariant()
$Domain = $Domain -replace '^https?://','' -replace '^www\.','' -replace '/.*$',''
if ([string]::IsNullOrWhiteSpace($Domain)) {
return
}
if ($Domain -notmatch '^[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$') {
"$Domain,gecersiz,,," | Add-Content -Path $SonucDosyasi -Encoding UTF8
return
}
$SiteAdi = "eka-$Domain"
$HavuzAdi = "eka-$Domain"
$FizikselYol = Join-Path $WebKoku $Domain
try {
New-Item -ItemType Directory -Path $FizikselYol -Force | Out-Null
"<!doctype html><html lang=`"tr`"><meta charset=`"utf-8`"><title>$Domain</title><h1>$Domain hazır</h1></html>" | Set-Content -Path (Join-Path $FizikselYol "index.html") -Encoding UTF8
if (-not (Test-Path "IIS:\AppPools\$HavuzAdi")) {
New-WebAppPool -Name $HavuzAdi | Out-Null
}
if (-not (Test-Path "IIS:\Sites\$SiteAdi")) {
New-Website -Name $SiteAdi -Port 80 -IPAddress "*" -HostHeader $Domain -PhysicalPath $FizikselYol -ApplicationPool $HavuzAdi | Out-Null
New-WebBinding -Name $SiteAdi -Protocol http -Port 80 -IPAddress "*" -HostHeader "www.$Domain" | Out-Null
}
& icacls $FizikselYol /grant "IIS_IUSRS:(OI)(CI)(RX)" /T /C | Out-Null
"$Domain,basarili,$SiteAdi,$HavuzAdi,$FizikselYol" | Add-Content -Path $SonucDosyasi -Encoding UTF8
}
catch {
"$Domain | $($_.Exception.Message)" | Add-Content -Path $HataDosyasi -Encoding UTF8
"$Domain,hatali,$SiteAdi,$HavuzAdi,$FizikselYol" | Add-Content -Path $SonucDosyasi -Encoding UTF8
}
}
Get-Website | Select-Object Name,State,PhysicalPath,Bindings
Write-Host "Tamamlandı: $SonucDosyasi"
Write-Host "Hatalar: $HataDosyasi"
Aynı uygulamayı gösteren domainler için yeni IIS site yerine binding ekleyin.
New-WebBinding -Name "AnaSite" -Protocol http -Port 80 -IPAddress "*" -HostHeader "alias-domain.com"
New-WebBinding -Name "AnaSite" -Protocol http -Port 80 -IPAddress "*" -HostHeader "www.alias-domain.com"
Yeni modülü kullanan sistemlerde New-IISSite bindingInformation ile site oluşturabilir.
Import-Module IISAdministration
New-IISSite -Name "eka-ornek.com" -PhysicalPath "C:\inetpub\siteler\ornek.com" -BindingInformation "*:80:ornek.com"
Aynı protocol, IP, port ve host kombinasyonlarını listeleyin.
Get-WebBinding | ForEach-Object { [PSCustomObject]@{ Site=$_.ItemXPath; Protocol=$_.protocol; Binding=$_.bindingInformation } } | Group-Object Protocol,Binding | Where-Object Count -gt 1
WebAdministration modülü yaygın ve kararlıdır. TLS sürümleri, .NET hosting bundle ve URL Rewrite bileşenlerini uygulamaya göre kontrol edin.
Get-WindowsFeature Web-ServerGet-Module WebAdministration -ListAvailableiisreset /statusSNI, modern TLS ve güncel .NET hosting için uygun üretim seçeneğidir. Windows Update sonrası app pool davranışını izleyin.
Get-ComputerInfo | Select WindowsProductName,WindowsVersionGet-WebAppPoolState -Name *Get-TlsCipherSuite | Select-Object -First 10WebAdministration ve IISAdministration cmdlet'lerini kurulu rol sürümünüze göre kullanın; otomasyonu staging üzerinde test edin.
Get-WindowsFeature Web-Server,Web-Mgmt-ToolsGet-Command New-Website,New-IISSite -ErrorAction SilentlyContinueGet-IISSite 2>$nullAynı IIS site adı, binding veya fiziksel yol daha önce oluşturulmuş olabilir.
WebAdministration modülü yüklenmemiş veya PowerShell yönetici olarak açılmamış olabilir.
web.config sözdizimi, kilitli section, eksik modül veya NTFS erişimi sorunlu olabilir.
Application pool durmuş, Rapid-Fail Protection tetiklenmiş veya runtime yüklenememiş olabilir.
Aynı IP:port:host kombinasyonu başka sitede bulunabilir veya boş host header çakışabilir.
Aramayla eşleşen hata bulunamadı.
Zorunlu değildir. Farklı müşteriler veya uygulamalar için izolasyon sağlar; aynı güven sınırındaki düşük trafikli alias sitelerde paylaşılabilir.
Aynı uygulamayı açacaklarsa teknik olarak mümkündür. Sertifika/SNI, log analizi, canonical ve yönlendirme stratejisini ayrıca tasarlayın.
Önce sertifika edinilir ve LocalMachine sertifika deposuna yüklenir; ardından SNI host binding sertifika thumbprint ile bağlanır. Sertifika yaşam döngüsünü ayrı otomasyonla yönetin.
Evet, FastCGI ve uygun PHP yapılandırması gerekir. Domain oluşturma betiğinden ayrı olarak PHP handler, request timeout ve dosya izinlerini standartlaştırın.
DNS rolü aynı sunucudaysa Add-DnsServerResourceRecordA gibi cmdlet'ler kullanılabilir. Harici DNS veya Cloudflare kullanılıyorsa ilgili sağlayıcı API'si ayrı yürütülmelidir.
Hayır. Teknik altyapı, özgün metin, çoklu dil URL'leri ve yapılandırılmış veri görünürlüğü destekler; sıralama garantisi oluşturmaz.
Panel seçimi, DNS, SSL, web sunucusu, güvenlik, yedekleme ve doğrulama adımlarını sunucunuzun gerçek yapısına göre uyguluyoruz.