Deconstructing the IIS and Plesk Architecture
- It provisions site directories and sets explicit NTFS Access Control Lists (ACLs).
- It generates site-specific configuration blocks inside 'applicationHost.config' or web.config files.
- It maps the domain to a dedicated IIS Application Pool running under a specific local user account or virtual account ('IIS_IUSRS').
- It configures Plesk's internal PHP management daemon to run FastCGI processes isolated per subscription.
The Problem with Default Configurations
Low-Level Mechanics and Performance Tuning
Application Pool Isolation and Resource Governors
POWERSHELL
Import-Module WebAdministration
# Set CPU limit to 40 percent with throttle action (kill worker process)
Set-ItemProperty 'IIS:\AppPools\DefaultAppPool' -Name 'cpu.limit' -Value 40000
Set-ItemProperty 'IIS:\AppPools\DefaultAppPool' -Name 'cpu.action' -Value 'Throttle'
# Set private memory limit to 2GB (in KB)
Set-ItemProperty 'IIS:\AppPools\DefaultAppPool' -Name 'recycling.periodicRestart.privateMemory' -Value 2097152HTTP.sys Registry Tuning
| Registry Key | Default Value | Production Recommendation | Description |
|---|---|---|---|
| 'MaxConnections' | Unlimited | Set based on RAM | Limits the number of concurrent connections HTTP.sys handles. |
| 'UriCacheTTLLimit' | 60 seconds | 300 seconds | Controls how long kernel-mode URI caching stays active. |
| 'IdleTimeout' | 120 seconds | 600 seconds | Time before idle connections are dropped from the queue. |
| 'EnableHttp2' | 1 | 1 | Ensures native HTTP/2 multiplexing is forced for TLS endpoints. |
Securing Plesk and IIS Against Exploits
Disabling Unnecessary IIS Modules
POWERSHELL
Uninstall-WindowsFeature Web-WebDAV-Publishing
Uninstall-WindowsFeature Web-Stat-Compression
Uninstall-WindowsFeature Web-Asp-NetCustom 'web.config' Security Headers
XML
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="X-Content-Type-Options" value="nosniff" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="web.config" />
<add segment=".env" />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>Troubleshooting and Diagnostic Workflows
Capturing Hang Dumps with ProcDump
CMD
procdump.exe -accepteula -c 85 -s 10 -n 3 -w w3wp.exe C:\Dumps\Hosting\ गुल- Enable FREB in Plesk under the specific domain's IIS Settings.
- Configure tracing rules to capture HTTP status codes '400-600'.
- Parse the resulting XML trace files located in 'C:\inetpub\LogFiles\W3SVC[ID]' to pinpoint whether the bottleneck resides in FastCGI, managed modules, or database connection timeouts.
