Medha Cloud
Medha Cloud Exchange Server Team
Exchange Database Recovery Team8 min read

Event ID 15021 indicates Exchange Admin Center (EAC) or Outlook Web Access (OWA) is displaying blank pages instead of the normal interface. This guide shows you how to diagnose the root cause and restore full web access to your Exchange Server.

Our Exchange Web Access Support team resolves blank page issues with high success rates. Follow this same troubleshooting process we use.

Error Overview: What Blank Pages Mean

When EAC or OWA shows a blank white page, the web application is loading but failing to render content. This differs from connection errors (which show error messages) because the server responds but the browser cannot display the content.

Typical Symptoms
# Browser shows:
- Blank white page at https://mail.domain.com/owa
- Blank page at https://mail.domain.com/ecp
- Page loads but shows no content
- Partial loading with missing elements

# Event Log shows:
Log Name:      Application
Source:        MSExchange Front End HTTP Proxy
Event ID:      15021
Level:         Error
Description:   The proxy was unable to process the request.

Key Difference: HTTP 500/503 errors display error pages. Blank pages mean HTML loads but JavaScript/CSS/assets fail, or virtual directory configuration is corrupted.

Symptoms & Business Impact

What Users Experience:

  • OWA loads but shows completely blank white page
  • EAC navigation menu missing or not clickable
  • Login page works but redirects to blank screen
  • Mobile browsers show blank OWA while desktop may work (or vice versa)

What Admins See:

  • Event ID 15021 in Application log
  • IIS application pool may be stopped or recycling frequently
  • Browser developer tools (F12) show JavaScript errors
  • Network tab shows failed CSS/JS/font file requests
Check Application Pool Status
# Import IIS module
Import-Module WebAdministration

# Check Exchange app pool states
Get-WebAppPoolState -Name "MSExchangeOWAAppPool"
Get-WebAppPoolState -Name "MSExchangeECPAppPool"
Get-WebAppPoolState -Name "MSExchangeServicesAppPool"

# List all Exchange-related app pools
Get-ChildItem IIS:\AppPools | Where-Object { $_.Name -like "*Exchange*" } |
    Select-Object Name, State | Format-Table -AutoSize

Common Causes of Blank Pages

1. Browser Cache Issues (30%)

Stale cached JavaScript or CSS files conflict with updated Exchange files. This commonly occurs after Cumulative Updates when browsers serve old cached assets.

2. Virtual Directory Corruption (25%)

OWA or ECP virtual directory settings become corrupted, often after failed updates, schema changes, or manual IIS modifications.

3. IIS Application Pool Issues (20%)

Application pools crash, fail to start, or run under incorrect identity. Missing managed pipeline mode or .NET version mismatches cause rendering failures.

4. SSL/Certificate Problems (15%)

Mixed content warnings block resources when SSL binding is misconfigured. Expired or untrusted certificates prevent resource loading.

5. File Permission Issues (10%)

Exchange web content files have incorrect permissions, preventing IIS from serving CSS, JavaScript, or image assets.

Quick Diagnosis

Step 1: Test with Different Browser/Device
# Quick tests to isolate the issue:
# 1. Try Chrome Incognito or Edge InPrivate mode
# 2. Clear browser cache completely
# 3. Test from different workstation
# 4. Test from the Exchange server itself (localhost)

# If localhost works but remote doesn't = network/certificate issue
# If incognito works = browser cache issue
# If nothing works = server configuration issue
Step 2: Check Virtual Directory Health
# Check OWA virtual directory configuration
Get-OwaVirtualDirectory | Select-Object Server, InternalUrl, ExternalUrl |
    Format-Table -AutoSize

# Check ECP virtual directory
Get-EcpVirtualDirectory | Select-Object Server, InternalUrl, ExternalUrl |
    Format-Table -AutoSize

# Test virtual directory authentication
Get-OwaVirtualDirectory | Select-Object Server, *Authentication* |
    Format-List
Step 3: Check IIS and App Pool Status
# Import IIS module
Import-Module WebAdministration

# Check all Exchange app pools
$appPools = @(
    "MSExchangeOWAAppPool",
    "MSExchangeECPAppPool",
    "MSExchangeServicesAppPool",
    "MSExchangeAutodiscoverAppPool"
)

foreach ($pool in $appPools) {
    $state = Get-WebAppPoolState -Name $pool -ErrorAction SilentlyContinue
    $config = Get-ItemProperty "IIS:\AppPools\$pool" -ErrorAction SilentlyContinue
    Write-Host "$pool : $($state.Value) - .NET: $($config.managedRuntimeVersion)"$state.Value) - .NET: $($config.managedRuntimeVersion)"
}

# Check for recent app pool crashes
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    ProviderName = 'WAS'
    StartTime = (Get-Date).AddHours(-24)
} -MaxEvents 10 -ErrorAction SilentlyContinue |
    Select-Object TimeCreated, Message | Format-Table -Wrap
Step 4: Browser Developer Tools Check
# In browser, press F12 to open Developer Tools
# Go to Console tab - look for JavaScript errors
# Go to Network tab - look for failed (red) requests

# Common error patterns:
# - 404 errors for .js or .css files = missing files or wrong paths
# - 403 errors = permission issues
# - CORS errors = cross-origin configuration problem
# - Mixed content warnings = HTTP resources on HTTPS page

Quick Fix (5-10 Minutes)

Try These First:

80% of blank page issues resolve with browser cache clear + app pool recycle.

Immediate Fix: Recycle App Pools and Clear Cache
# Step 1: Recycle all Exchange app pools
Import-Module WebAdministration
$pools = @("MSExchangeOWAAppPool", "MSExchangeECPAppPool")
foreach ($pool in $pools) {
    Write-Host "Recycling $pool..."
    Restart-WebAppPool -Name $pool
}

# Step 2: Instruct users to clear browser cache
# Chrome: Ctrl+Shift+Delete -> Clear browsing data
# Edge: Ctrl+Shift+Delete -> Clear browsing data
# Firefox: Ctrl+Shift+Delete -> Clear recent history

# Step 3: Test with Ctrl+F5 (force refresh) in browser
Write-Host "Test OWA with Ctrl+F5 to bypass cache"

Detailed Solutions

Solution 1: Recreate OWA Virtual Directory

Recreate OWA Virtual Directory
# Get current OWA configuration first
$owaConfig = Get-OwaVirtualDirectory -Server $env:COMPUTERNAME
$owaConfig | Select-Object InternalUrl, ExternalUrl | Format-List

# Remove existing OWA virtual directory
Remove-OwaVirtualDirectory -Identity "$($env:COMPUTERNAME)\owa (Default Web Site)" -Confirm:$false

# Create new OWA virtual directory
New-OwaVirtualDirectory -Server $env:COMPUTERNAME -WebSiteName "Default Web Site"

# Set URLs (adjust to your environment)
Set-OwaVirtualDirectory -Identity "$($env:COMPUTERNAME)\owa (Default Web Site)" -InternalUrl "https://mail.domain.com/owa" -ExternalUrl "https://mail.domain.com/owa"

# Recycle app pool
Restart-WebAppPool -Name "MSExchangeOWAAppPool"

Write-Host "OWA virtual directory recreated. Test in 60 seconds."

Solution 2: Recreate ECP Virtual Directory

Recreate ECP (Exchange Admin Center) Virtual Directory
# Get current ECP configuration
$ecpConfig = Get-EcpVirtualDirectory -Server $env:COMPUTERNAME
$ecpConfig | Select-Object InternalUrl, ExternalUrl | Format-List

# Remove existing ECP virtual directory
Remove-EcpVirtualDirectory -Identity "$($env:COMPUTERNAME)\ecp (Default Web Site)" -Confirm:$false

# Create new ECP virtual directory
New-EcpVirtualDirectory -Server $env:COMPUTERNAME -WebSiteName "Default Web Site"

# Set URLs
Set-EcpVirtualDirectory -Identity "$($env:COMPUTERNAME)\ecp (Default Web Site)" -InternalUrl "https://mail.domain.com/ecp" -ExternalUrl "https://mail.domain.com/ecp"

# Recycle app pool
Restart-WebAppPool -Name "MSExchangeECPAppPool"

Write-Host "ECP virtual directory recreated. Test in 60 seconds."

Solution 3: Reset IIS Configuration

Full IIS Reset
# Stop IIS and all dependent services
Write-Host "Stopping IIS..."
iisreset /stop

# Clear temporary ASP.NET files
$tempPaths = @(
    "$env:SystemRoot\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"0.30319\Temporary ASP.NET Files",
    "$env:SystemRoot\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files"0.30319\Temporary ASP.NET Files"
)
foreach ($path in $tempPaths) {
    if (Test-Path $path) {
        Write-Host "Clearing $path..."
        Remove-Item "$path\*" -Recurse -Force -ErrorAction SilentlyContinue
    }
}

# Start IIS
Write-Host "Starting IIS..."
iisreset /start

# Verify Exchange services
Get-Service MSExchangeOWA*, MSExchangeECP* | Select-Object Name, Status

Solution 4: Fix SSL Bindings

Verify and Fix SSL Certificate Bindings
# Check current SSL bindings
Import-Module WebAdministration
Get-WebBinding -Name "Default Web Site" | Where-Object { $_.protocol -eq "https" } |
    Select-Object protocol, bindingInformation, certificateHash | Format-Table

# Get Exchange certificate thumbprint
$cert = Get-ExchangeCertificate | Where-Object { $_.Services -match "IIS" }
Write-Host "Exchange IIS Certificate: $($cert.Thumbprint)"

# If binding is missing or wrong, rebind
# Remove old binding
Remove-WebBinding -Name "Default Web Site" -Protocol https -Port 443

# Add correct binding with certificate
New-WebBinding -Name "Default Web Site" -Protocol https -Port 443 -HostHeader "" -IPAddress "*"

# Bind certificate
$binding = Get-WebBinding -Name "Default Web Site" -Protocol https
$binding.AddSslCertificate($cert.Thumbprint, "My")

Write-Host "SSL binding updated. Restart IIS..."
iisreset

Verify the Fix

Test OWA and ECP Access
# Test OWA internal URL
$owaUrl = (Get-OwaVirtualDirectory).InternalUrl.AbsoluteUri
Write-Host "Testing OWA: $owaUrl"
$owaTest = Invoke-WebRequest -Uri $owaUrl -UseBasicParsing -TimeoutSec 30
Write-Host "OWA Status: $($owaTest.StatusCode)"

# Test ECP internal URL
$ecpUrl = (Get-EcpVirtualDirectory).InternalUrl.AbsoluteUri
Write-Host "Testing ECP: $ecpUrl"
$ecpTest = Invoke-WebRequest -Uri $ecpUrl -UseBasicParsing -TimeoutSec 30
Write-Host "ECP Status: $($ecpTest.StatusCode)"

# Check for recent errors
Get-WinEvent -FilterHashtable @{
    LogName = 'Application'
    ProviderName = 'MSExchange*'
    Level = 2
    StartTime = (Get-Date).AddMinutes(-15)
} -MaxEvents 5 -ErrorAction SilentlyContinue |
    Select-Object TimeCreated, ProviderName, Message | Format-Table -Wrap

Success Indicators:

  • OWA login page displays correctly
  • EAC shows navigation menu and content
  • No JavaScript errors in browser console
  • No 404/403 errors in Network tab

Prevention Tips

Best Practices

  • Test OWA/EAC after every Cumulative Update installation
  • Document virtual directory URLs before major changes
  • Use health check scripts to monitor web services
  • Keep browser policy to clear cache regularly for admin workstations
Health Check Script
# Add to scheduled task for monitoring
$urls = @(
    "https://mail.domain.com/owa/healthcheck.htm",
    "https://mail.domain.com/ecp/healthcheck.htm"
)

foreach ($url in $urls) {
    try {
        $response = Invoke-WebRequest -Uri $url -UseBasicParsing -TimeoutSec 10
        if ($response.StatusCode -eq 200) {
            Write-Host "[OK] $url" -ForegroundColor Green
        }
    } catch {
        Write-Host "[FAIL] $url - $($_.Exception.Message)"$_.Exception.Message)" -ForegroundColor Red
        # Send alert here
    }
}

When to Escalate

Contact Exchange specialists if:

  • Virtual directory recreation fails with errors
  • IIS configuration is severely corrupted
  • Blank pages persist after all troubleshooting steps
  • Multiple Exchange servers affected simultaneously
  • You need help with load balancer integration issues

Need Expert Help?

Our Exchange Web Access Team specializes in OWA and EAC troubleshooting. We restore web access quickly with minimal disruption.

Frequently Asked Questions

Blank EAC pages are typically caused by corrupted virtual directory settings, IIS application pool issues, JavaScript/CSS loading failures, or browser caching problems. Event ID 15021 indicates the web interface cannot render properly due to missing components or configuration errors.

Still Stuck? We Can Help

Our Exchange Server experts have resolved thousands of issues just like yours.

  • Remote troubleshooting in 95 minutes average
  • No upfront commitment or diagnosis fees
  • Fix-it-right guarantee with documentation
Get Expert Help
95 min
Average Response Time
24/7/365 Availability
Medha Cloud

Medha Cloud Exchange Server Team

Microsoft Exchange Specialists

Our Exchange Server specialists have 15+ years of combined experience managing enterprise email environments. We provide 24/7 support, emergency troubleshooting, and ongoing administration for businesses worldwide.

15+ Years ExperienceMicrosoft Certified99.7% Success Rate24/7 Support