Separate IIS-Website pro Domain
Das klarste Modell, wenn Domains getrennte Pools, Roots, Logs und Runtime-Einstellungen benötigen.
Das Hinzufügen einer Domain in IIS erfordert Website, physischen Pfad, Anwendungspool und Hostheader-Binding. Das PowerShell-Skript erstellt für jede Domain einen isolierten Pool, ein Verzeichnis, ein www-Binding und ein CSV-Ergebnis.
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"
Massenautomatisierung darf keine falsche Architektur beschleunigen. Entscheiden Sie zuerst über Kundenisolation, Ressourcenlimits, Anwendungsroots sowie Mail- und DNS-Eigentum.
Das klarste Modell, wenn Domains getrennte Pools, Roots, Logs und Runtime-Einstellungen benötigen.
Für Alias-Domains derselben Anwendung verbrauchen zusätzliche Hostheader-Bindings auf einer Website weniger Ressourcen.
Trafficarme Websites derselben Vertrauensgrenze können einen Pool teilen; für verschiedene Kunden werden getrennte Identitäten und Pools empfohlen.
Definieren Sie für viele HTTPS-Websites auf einer IP Hostname- und SNI-Bindings vor der Zertifikatautomatisierung.
Prüfen Sie, ob Web-Server-Rolle, Verwaltungstools und PowerShell-Cmdlets installiert sind.
Get-WindowsFeature Web-Server,Web-Mgmt-Tools
Get-Module -ListAvailable WebAdministration,IISAdministration Erkennen Sie doppelte Websitenamen, Hostheader oder Portkonflikte vor dem Vorgang.
Import-Module WebAdministration
Get-Website
Get-WebBinding Prüfen Sie NTFS-Berechtigungen, Start des Anwendungspools und Binding-Zuordnung.
Get-Content C:\Eka\domainler.txt -TotalCount 2 | Set-Content C:\Eka\domainler-test.txt Signieren Sie das Skript in Produktion oder verwenden Sie den Process-Scope, statt ExecutionPolicy dauerhaft auf Bypass zu setzen.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass Ergebnisse der Website-, Pool-, Verzeichnis- und Binding-Erstellung werden in CSV gespeichert.
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -File C:\Eka\iis-toplu-domain.ps1 Testen Sie mit Get-Website, Get-WebBinding und einer lokalen Hostheader-Anfrage.
Get-Website | Select Name,State,PhysicalPath
Invoke-WebRequest -Uri http://127.0.0.1 -Headers @{Host="ornek.com"} -UseBasicParsing Erstellt für jede Domain Website, App Pool, Verzeichnis, www-Binding, NTFS-Berechtigung und CSV-Eintrag.
$FehlerEylemi = "Stop"
$DomainDosyasi = "C:\Eka\domainler.txt"
$WebKoku = "C:\inetpub\siteler"
$SonucDosyasi = "C:\Eka\iis-domain-sonuclari.csv"
$FehlerDosyasi = "C:\Eka\iis-domain-Fehlerlari.log"
$ErrorActionPreference = $FehlerEylemi
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 $FehlerDosyasi -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 $FehlerDosyasi -Encoding UTF8
"$Domain,Fehlerli,$SiteAdi,$HavuzAdi,$FizikselYol" | Add-Content -Path $SonucDosyasi -Encoding UTF8
}
}
Get-Website | Select-Object Name,State,PhysicalPath,Bindings
Write-Host "Tamamlandı: $SonucDosyasi"
Write-Host "Fehlerlar: $FehlerDosyasi"
Fügen Sie für Domains derselben Anwendung ein Binding statt einer neuen IIS-Website hinzu.
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"
Auf Systemen mit dem neueren Modul kann New-IISSite eine Website mit bindingInformation erstellen.
Import-Module IISAdministration
New-IISSite -Name "eka-ornek.com" -PhysicalPath "C:\inetpub\siteler\ornek.com" -BindingInformation "*:80:ornek.com"
Listen Sie doppelte Kombinationen aus Protokoll, IP, Port und Host auf.
Get-WebBinding | ForEach-Object { [PSCustomObject]@{ Site=$_.ItemXPath; Protocol=$_.protocol; Binding=$_.bindingInformation } } | Group-Object Protocol,Binding | Where-Object Count -gt 1
WebAdministration ist verbreitet und stabil. Prüfen Sie TLS-Versionen, .NET Hosting Bundle und URL Rewrite je nach Anwendung.
Get-WindowsFeature Web-ServerGet-Module WebAdministration -ListAvailableiisreset /statusGeeignete Produktionswahl für SNI, modernes TLS und aktuelles .NET-Hosting. Beobachten Sie App-Pools nach Windows Update.
Get-ComputerInfo | Select WindowsProductName,WindowsVersionGet-WebAppPoolState -Name *Get-TlsCipherSuite | Select-Object -First 10Verwenden Sie WebAdministration oder IISAdministration entsprechend der installierten Rollenversion und testen Sie die Automatisierung im Staging.
Get-WindowsFeature Web-Server,Web-Mgmt-ToolsGet-Command New-Website,New-IISSite -ErrorAction SilentlyContinueGet-IISSite 2>$nullDerselbe IIS-Websitename, dasselbe Binding oder derselbe physische Pfad kann bereits existieren.
WebAdministration ist möglicherweise nicht installiert oder PowerShell läuft nicht erhöht.
web.config-Syntax, gesperrte Abschnitte, fehlende Module oder NTFS-Zugriff können das Problem sein.
Der Anwendungspool kann gestoppt, Rapid-Fail Protection ausgelöst oder die Runtime nicht geladen worden sein.
Dieselbe IP:Port:Host-Kombination kann auf einer anderen Website existieren oder ein leerer Hostheader kollidieren.
Kein passender Fehler gefunden.
Nein. Er bietet Isolation für verschiedene Kunden oder Anwendungen; trafficarme Alias-Websites innerhalb einer Vertrauensgrenze können einen Pool teilen.
Technisch ist das möglich, wenn alle dieselbe Anwendung ausliefern. Planen Sie Zertifikat/SNI, Logging, Canonical und Weiterleitungen separat.
Beschaffen und installieren Sie das Zertifikat im LocalMachine-Speicher und binden Sie anschließend ein SNI-Hostbinding über den Thumbprint. Verwalten Sie den Zertifikatslebenszyklus separat.
Ja, mit FastCGI und passender PHP-Konfiguration. Standardisieren Sie PHP-Handler, Request-Timeouts und Dateiberechtigungen getrennt von der Domainanlage.
Wenn die DNS-Rolle auf dem Server liegt, können Cmdlets wie Add-DnsServerResourceRecordA verwendet werden. Externes DNS oder Cloudflare erfordert einen separaten Provider-API-Ablauf.
Nein. Technische Grundlagen, originelle Texte, mehrsprachige URLs und strukturierte Daten unterstützen die Sichtbarkeit, garantieren aber keine Rankings.
Wir setzen Panelwahl, DNS, SSL, Webserver, Sicherheit, Sicherung und Prüfung entsprechend Ihrer tatsächlichen Serverarchitektur um.