LiteSpeed vs Apache vs Nginx for WordPress: Benchmark Data and the Right Stack for Your Site

Disclosure: some hosting links on this page earn me a commission if you buy. Pricing and benchmark data are verified independently. Full disclosure.

Mangesh Supe, Hosting Performance Analyst

By

Founder, ThatMy.com • Independent Hosting Benchmarks • ISP & Network Infrastructure Background


LiteSpeed vs Apache vs Nginx for WordPress: Benchmark Data and the Right Stack for Your Site

Your web server software handles every HTTP request your site receives. It decides whether a cached WordPress page takes 5ms or 50ms to return. It decides whether 500 simultaneous visitors get served or start queuing. Apache, Nginx, and LiteSpeed all get the job done, but they make different architectural choices about caching, concurrency, and PHP execution that produce real, measurable performance differences. The web server matters more than most benchmark articles show, and less than some hosting companies claim.

Most comparisons stop at requests-per-second numbers from synthetic benchmarks. This guide connects web server choice directly to WordPress caching strategy, because LiteSpeed's performance advantage is inseparable from the LiteSpeed Cache plugin, and Apache's disadvantage largely disappears with proper configuration. The performance rankings change dramatically once caching is factored in. Understanding this changes which hosts you should be looking at and what you should configure on arrival. The full web servers architecture guide covers the underlying connection models in more depth if you want the technical foundation beneath these comparisons.

The Quick Verdict (Read This First)

Three hosting decisions disguise themselves as one web server question. Before going further: if you are on shared hosting, your web server is not negotiable — your host chose it. The question is whether to migrate to a host with a better server. If you are on a VPS, you can choose. If you are evaluating new hosts, the table below is the decision map.

Web ServerBest ForAvoid If
ApacheEasy config, .htaccess-heavy setups, shared hosting, cPanel control panelsHigh concurrency (10k+ req/min) without specific tuning
NginxHigh-traffic sites, custom stacks, reverse proxy architecturesYou need .htaccess — Nginx does not support it natively
LiteSpeed EnterpriseWordPress with LiteSpeed Cache plugin on compatible hostsYou are not on a cPanel or LiteSpeed-licensed host
OpenLiteSpeedBudget LiteSpeed performance on a self-managed VPSYou need enterprise features or full HTTP/3 support

The Number That Changes This Comparison

Raw benchmark comparisons test uncached dynamic requests — PHP fully executing WordPress on every test hit. In that test, Nginx wins on concurrency, LiteSpeed wins on PHP throughput, and Apache trails both. But WordPress sites do not serve uncached pages to most visitors once caching is configured. When comparing cached request performance, LiteSpeed Cache wins on absolute TTFB, and properly configured Apache closes to within 30ms of Nginx. The server that wins the uncached benchmark is not the server that wins the real-world WordPress speed test.

How Each Web Server Handles WordPress Requests

The word "server" makes these three look like variations on the same thing. They are not. Apache, Nginx, and LiteSpeed make fundamentally different decisions about how many connections to hold open simultaneously, how to hand off to PHP, and whether caching happens at the server layer or inside PHP. Those decisions explain every benchmark result you will read.

Apache: Three Modes, One .htaccess Advantage

Apache's defining characteristic for WordPress is .htaccess. WordPress uses it for permalink routing, security rules, cache headers, and redirect management. Apache reads .htaccess on every request, which adds a small overhead but enables every customer on a shared server to configure their own URL rules without touching the server's main config file. This is why every shared hosting company uses Apache.

Apache's concurrency model comes in three versions called MPMs. Prefork MPM spawns one process per connection — up to 20 MB of RAM each, blocks while waiting for PHP. This mode cannot run HTTP/2 and degrades badly above 200 concurrent users. Worker MPM uses threads, more efficient, supports HTTP/2. Event MPM is the modern default in Apache 2.4 and handles keep-alive connections asynchronously, making Apache competitive with Nginx under moderate concurrency. Most servers running Apache today should be on event MPM with PHP-FPM. If your host is still on prefork with mod_php, the problem is not Apache — it is an outdated configuration that deserves an upgrade or a host change.

Nginx: Event-Driven, No .htaccess, Server-Level Cache

Nginx was built in 2004 to solve the C10K problem: handling 10,000 simultaneous connections on a single server. One worker process per CPU core, each running a non-blocking event loop. When waiting for PHP-FPM to respond, the worker moves to the next ready connection rather than blocking. At 500 concurrent visitors, Nginx uses roughly 50-100 MB of RAM for its workers. Apache prefork would need 5-10 GB for the same load. This is not a configuration difference. It is the architecture.

The cost: no .htaccess. All configuration lives in central files requiring root access. WordPress's permalink routing requires a try_files block that must be set by the server administrator. This is why Nginx dominates managed VPS and managed WordPress hosting but is rare on shared hosting. Every serious managed host — Cloudways, Kinsta, ScalaHosting — runs Nginx. They have server admin access. You do not need it.

LiteSpeed: Apache Compatibility with Nginx Performance

LiteSpeed Enterprise is a drop-in replacement for Apache. It reads the same configuration files, respects .htaccess, integrates with cPanel, and replaces Apache without requiring customers to change a single file. A shared host can switch from Apache to LiteSpeed and every customer's .htaccess, redirect, and WordPress installation continues working identically. This is why shared hosts increasingly choose LiteSpeed over Apache when upgrading their stacks.

LiteSpeed's event-driven architecture delivers Nginx-level concurrency. Its LSAPI protocol for PHP is more efficient than FastCGI — it reuses PHP processes more aggressively and avoids some of the CGI protocol overhead. And then there is LiteSpeed Cache: a WordPress plugin that, on LiteSpeed servers, unlocks server-level page caching. That last point is the entire reason this comparison exists. The web server architecture guide covers the underlying concurrency models for all three servers in technical depth.

FeatureApacheNginxLiteSpeed
.htaccess supportYes (reads per request)No (central config only)Yes (full compatibility)
PHP executionmod_php or PHP-FPMPHP-FPM via FastCGILSAPI (faster than FastCGI)
Memory per connection10-20 MB (prefork) / 1-2 MB (event MPM)1-2 MB1-2 MB
HTTP/2Yes (event MPM required)Yes, nativeYes, native
HTTP/3 / QUICExperimental onlyAvailable via quiche module (not default)Native, enabled by default
Server-level page cacheNoYes (FastCGI cache — manual setup)Yes (LiteSpeed Cache plugin — automatic)
ESI for WooCommerceNoNoYes — cache full page, keep cart dynamic
cPanel integrationYesNo (requires custom panels)Yes (drop-in Apache replacement)
LicenseOpen source (Apache 2.0)Open source (BSD)Enterprise: paid / OpenLiteSpeed: free

The Real Benchmarks (And What They Do Not Tell You)

Published benchmarks consistently show Nginx winning on raw requests per second for static files and LiteSpeed slightly ahead on dynamic PHP throughput. Those numbers are real. They are also almost useless for deciding which web server your WordPress site needs. Here is why.

LiteSpeed vs Apache vs Nginx WordPress speed test: TTFB response times and requests per second from GTmetrix and WebPageTest

Raw Benchmark Results: Requests Per Second, Static Files

Testing the same static HTML file served by each web server, without PHP, without WordPress, under increasing concurrency:

Nginx (static files)
~18,400 req/s
LiteSpeed (static files)
~17,000 req/s
Apache event MPM (static files)
~12,900 req/s
Apache prefork (static files)
~8,800 req/s

Static HTML file, 500 concurrent connections, single server. Source: published LiteSpeed benchmark data and independent replication. Apache prefork is included to show legacy configuration impact; it is rarely used on modern hosts.

Nginx wins on pure static file serving. Apache prefork loses badly. Apache event MPM performs reasonably. These numbers are accurate. They are also largely irrelevant to WordPress performance.

Why These Numbers Mislead You

WordPress serves almost no truly static HTML files. Every page is dynamically generated by PHP and MySQL unless a cached version exists. The static file benchmark tests the one scenario WordPress almost never encounters: a raw HTML file on disk with no PHP involved.

Three factors normalize the gap between servers in real WordPress operation:

PHP-FPM closes the concurrency gap. When all three servers use PHP-FPM for dynamic content, the performance difference shrinks to CPU cost and configuration efficiency, not server architecture. The event loop advantage disappears when every request is waiting for the same PHP-FPM pool anyway.

Caching changes the entire ranking. A cached WordPress page served by Apache takes 30-80ms. An uncached page on Nginx takes 300-800ms. Apache with WP Rocket at 50ms beats Nginx without caching at 600ms. This is the number that actually matters for Google's Core Web Vitals measurement of your TTFB.

LiteSpeed Cache creates a category difference, not a version difference. The performance gap between LiteSpeed+LiteSpeed Cache and every other combination is not a hardware gap or a tuning gap. It is an architectural gap. Server-level cache hits return in 1-5ms. Plugin-level cache hits return in 20-80ms. No amount of Apache or Nginx tuning closes this gap, because the gap exists at the layer below where those servers operate.

The Honest Performance Ranking for WordPress

GTmetrix TTFB at 100 concurrent users: LiteSpeed with LiteSpeed Cache 48ms, Nginx with FastCGI cache 61ms, Nginx with WP Rocket 112ms, Apache event MPM with WP Rocket 134ms
RankStackCached TTFBWhy
1stLiteSpeed + LiteSpeed Cache1-5msServer-level cache: PHP never starts. Fastest possible path for cached requests.
2ndNginx + FastCGI Cache8-15msServer-level cache: PHP never starts. Requires manual invalidation setup.
3rdNginx + WP Rocket20-60msPlugin-level cache: PHP boots but stops early. Automatic invalidation.
4thApache (event MPM) + WP Rocket30-80msPlugin-level cache on event-driven Apache. Competitive when properly tuned.
5thApache (prefork) + no cache300-800ms+Full PHP + database execution every request. Do not run this on production.

Concurrency Under Load: The Test Shared Hosting Fails

Load test requests per second degradation from 10 to 500 concurrent users: Apache prefork collapses first, Apache event MPM and Nginx comparable to 200 users, LiteSpeed least degradation

Load testing the same WordPress site (uncached, PHP+MySQL) under increasing concurrent users shows the concurrency model matters most above 100-200 simultaneous visitors. Below that threshold, all four configurations produce similar response times. Above it, Apache prefork degrades fastest. Apache event MPM stays competitive with Nginx up to around 200-300 concurrent users. At 500 concurrent users, Nginx and LiteSpeed maintain under 200ms TTFB while Apache prefork exceeds 2,000ms.

Most shared hosting sites never reach 200 concurrent visitors under normal operation. The concurrency model difference only matters if your site gets traffic spikes, runs time-sensitive content (news, sales, events), or has consistent moderate traffic. For a blog averaging 100 daily visitors, Apache on shared hosting is not the bottleneck. The bottleneck is almost certainly uncached PHP execution and slow database queries. Fixing those with a cache plugin moves TTFB from 600ms to 80ms — a far larger improvement than any web server switch.

LiteSpeed Cache: The Reason LiteSpeed Wins for WordPress

LiteSpeed Cache is a free WordPress plugin. On Apache or Nginx, it works like a slightly enhanced version of WP Rocket. On LiteSpeed web server, it works like a completely different category of caching tool. The distinction matters because most people evaluating LiteSpeed Cache read the plugin's feature list without understanding that half those features only activate on the matching web server.

Three WordPress caching paths: LiteSpeed server-level cache intercepting before PHP loads, Nginx FastCGI cache before PHP, and plugin-level cache running inside PHP with advanced-cache.php dropin

Server-Level vs Plugin-Level: The Architecture That Creates the Gap

When a visitor requests a WordPress page, here is what happens with plugin-level caching running on Apache or Nginx:

Plugin-Level Cache (WP Rocket on Apache / Nginx)
Web server accepts request
→
PHP-FPM process starts (5-10ms)
→
WordPress bootstraps
→
advanced-cache.php checks cache
→
Cache HIT: return HTML (20-60ms total)

PHP still started. WordPress partially loaded. Cache hit happens inside PHP, not before it.

Server-Level Cache (LiteSpeed Cache on LiteSpeed)
LiteSpeed accepts request
→
LiteSpeed checks internal cache
→
Cache HIT: return HTML (1-5ms total)

PHP never started. WordPress never loaded. Cache operates at the same layer as static file serving.

The speed difference is not from better code. It is from where the cache check happens in the request pipeline. Server-level cache puts the check before PHP. Plugin-level cache puts the check inside PHP. That 20-50ms difference per request compounds across thousands of daily visitors and shows up directly in your Core Web Vitals TTFB measurements.

ESI for WooCommerce: The Feature Nothing Else Has

WooCommerce creates a caching problem that blocks server-level caching for most stores. Product pages contain dynamic content — the cart widget shows items in the visitor's cart, the wishlist button shows their saved items, the account menu shows their name. If you cache the full product page, you cache one visitor's cart data and serve it to everyone else. If you do not cache at all, every product page view is a full PHP+database execution. Most WooCommerce setups choose uncached or plugin-level caching as a compromise.

LiteSpeed Cache's ESI (Edge Side Includes) feature takes a third path. The server caches the entire product page HTML, but marks specific regions as dynamic fragments that are fetched separately per visitor. The cart widget, account status, and wishlist state are requested as separate fragments after the cached page is delivered. The visitor gets the cached page in 1-5ms. Their dynamic cart content loads as a secondary request in another 20-50ms. WooCommerce product pages served from server cache with live cart data. No other web server has an equivalent built-in feature for WordPress.

LiteSpeed Cache WordPress plugin dashboard showing server level page cache status QUIC cloud CDN configuration ESI WooCommerce settings and object cache Redis connection status with green active indicators

What LiteSpeed Cache Does Beyond Page Caching

Several LiteSpeed Cache features work on any web server and are genuinely worth using regardless of your server choice:

  • Object cache via Redis or Memcached — connects to the same Redis server your VPS provides, stores WordPress object cache results, reduces database queries on dynamic pages. The WordPress caching guide covers how object cache fits into the full six-layer cache stack.
  • Image optimization — lazy loading, WebP conversion, and dimension attributes. Works on any server.
  • CSS/JS minification and combination — reduces asset count and file sizes. Works on any server.
  • Critical CSS generation — generates above-the-fold CSS to eliminate render-blocking resources. Works on any server.
  • CDN integration via QUIC.cloud — LiteSpeed's own CDN, integrates tightly with the cache plugin for edge caching. Works on any server as a CDN layer.
  • Browser cache header management — sets correct max-age and cache-control headers. Works on any server.

The page cache and ESI features are the exclusive LiteSpeed-only advantages. Everything else is a well-implemented version of features available in WP Rocket, FlyingPress, or Perfmatters. If you are on Apache or Nginx, installing LiteSpeed Cache for its non-page-cache features is reasonable, but so is using WP Rocket for a cleaner, more integrated experience without unused LiteSpeed-specific settings cluttering the dashboard.

Apache Configuration for WordPress: Closing the Gap

Apache with default settings is slow. Apache with the right configuration is competitive. Most WordPress speed problems on shared Apache hosting are not caused by Apache being Apache — they are caused by default configurations designed for generic use being applied to WordPress without adjustment. Three changes close most of the gap with a modern Nginx setup.

Apache .htaccess for WordPress: mod_expires browser caching rules, mod_deflate gzip compression, mod_headers keep-alive settings, and ETag disable directives with syntax highlighting

Essential .htaccess Optimizations for WordPress

These settings go in your WordPress root .htaccess file, after the WordPress permalink block. Each one is safe to add on any standard Apache shared host.

Apache .htaccess performance settings for WordPress:
# Browser caching — static assets cached for 1 year
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access 1 year"
    ExpiresByType application/javascript "access 1 year"
    ExpiresByType image/png "access 1 year"
    ExpiresByType image/webp "access 1 year"
    ExpiresByType image/jpeg "access 1 year"
    ExpiresByType image/gif "access 1 year"
    ExpiresByType font/woff2 "access 1 year"
</IfModule>

# Gzip compression — reduces HTML/CSS/JS transfer size 60-80%
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css
    AddOutputFilterByType DEFLATE application/javascript application/json
    AddOutputFilterByType DEFLATE text/xml application/xml
    AddOutputFilterByType DEFLATE font/woff2
</IfModule>

# Keep-Alive — reuse TCP connection for multiple assets
<IfModule mod_headers.c>
    Header set Connection keep-alive
</IfModule>

# Disable ETag — prevents duplicate cache validation overhead
Header unset ETag
FileETag None

# Security headers that also improve perceived performance
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>

The single most impactful change: install a cache plugin. Apache without caching vs Nginx without caching produces roughly a 20-30% Nginx advantage under moderate concurrency. Apache with WP Rocket vs Nginx without caching: Apache wins. The web server choice does not overcome a caching gap. It compounds it.

Verify Your Apache MPM and HTTP/2 Status

If you have SSH access to your server, run these commands to confirm you are on the modern Apache configuration:

Checking Apache MPM and HTTP/2 support:
# Check which MPM Apache is using
apache2ctl -V | grep -i mpm
# Should show: Server MPM: event
# If showing: Server MPM: prefork — contact your host about upgrading

# Check if HTTP/2 module is loaded
apache2ctl -M | grep http2
# Should show: http2_module (shared)

# Verify HTTP/2 is active from outside:
curl -sI --http2 https://yourdomain.com | grep -i "HTTP/"
# Should show: HTTP/2 200

If you are on shared hosting with no SSH access, use an online tool like KeyCDN's HTTP/2 Test to check protocol support. If your site is serving HTTP/1.1 and you cannot upgrade on your current host, this alone is a reason to consider migrating — HTTP/2 multiplexing reduces page load time for asset-heavy WordPress sites by 15-30%. Understanding the server hardware your hosting plan runs on helps contextualize why these Apache tuning differences matter at the hardware level.

Nginx FastCGI Cache: Server-Level Caching Without LiteSpeed

Most Nginx WordPress guides stop at the basic PHP-FPM configuration. They skip FastCGI cache. This is the equivalent of setting up a car and forgetting to mention you can install an engine upgrade. Nginx FastCGI cache is a server-level page cache that bypasses PHP entirely on cache hits — and it is built into every Nginx installation by default, just not configured by default.

You need VPS or dedicated server access to configure this. Shared hosting users cannot add Nginx-level cache configuration. If you are managing your own VPS and running Nginx, this configuration should be in place before you install any caching plugin.

Nginx FastCGI cache configuration for WordPress (nginx.conf / site config):
# --- Add to the http{} block in nginx.conf ---
# Define where to store cached responses and how large the cache can grow
fastcgi_cache_path /var/cache/nginx levels=1:2
    keys_zone=WORDPRESS:100m   # 100m of key storage (handles ~800k cache entries)
    inactive=60m               # Remove entries unused for 60 minutes
    max_size=10g;              # Maximum total disk space for cached files

# The cache key — each unique URL gets its own cache entry
fastcgi_cache_key "$scheme$request_method$host$request_uri";

# --- Add to the server{} block ---
# Skip cache for sessions that should always be dynamic
map $http_cookie $skip_cache {
    default 0;
    "~*wordpress_logged_in" 1;      # Logged-in users see live content
    "~*woocommerce_cart_hash" 1;    # WooCommerce cart sessions bypass cache
    "~*wp-postpass" 1;              # Password-protected posts bypass cache
}

# --- Add inside location ~ \.php$ ---
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;       # Cache 200 responses for 60 minutes
fastcgi_cache_bypass $skip_cache;  # Bypass cache storage when $skip_cache = 1
fastcgi_no_cache $skip_cache;      # Do not serve from cache when $skip_cache = 1

# This header tells you whether a request hit the cache
# Check it in browser DevTools Network tab under response headers
add_header X-FastCGI-Cache $upstream_cache_status;

fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Reading the X-FastCGI-Cache Header

After enabling FastCGI cache, open Chrome DevTools, go to the Network tab, reload your homepage, click the HTML document in the request list, and look at the response headers. You will see one of four values:

  • HIT: Page was served from Nginx cache. PHP did not run. This is what you want for anonymous visitors.
  • MISS: First request for this URL — cache was empty. WordPress ran and the response was stored. Next request should be HIT.
  • BYPASS: The $skip_cache condition matched. Used correctly for logged-in users and WooCommerce sessions.
  • EXPIRED: Cache entry existed but exceeded the 60-minute lifetime. Nginx re-requested from PHP-FPM and stored a fresh copy.

Cache Invalidation: The Part Nginx Does Not Do For You

Nginx FastCGI cache does not know WordPress published a new post. The cache entry for your homepage will serve the old version for up to 60 minutes after you publish new content. Fixing this requires the Nginx Helper plugin, which sends a purge request to a Nginx purge endpoint when WordPress publish events fire. Configure Nginx Helper with your cache path, enable "Purge Cache on Post Publish" and "Purge Category and Tag Archives," and cache invalidation becomes automatic. This is the one operational step LiteSpeed Cache handles internally without plugins, and it is worth acknowledging honestly. The managed vs unmanaged VPS guide explains which of these server-level configurations managed hosts handle for you versus what you set up yourself on an unmanaged server.

Which Hosting Plans Use Which Web Server

Most hosting providers do not advertise their web server prominently. They advertise storage and bandwidth. The web server is listed in fine print, if at all. Here is the actual server breakdown for the hosts most commonly recommended for WordPress, based on checking HTTP response headers directly.

HostWeb ServerWhich PlansNotes
SiteGroundLiteSpeed EnterpriseAll plansLiteSpeed Cache pre-installed and configured
A2 HostingLiteSpeed EnterpriseTurbo plans onlyLiteSpeed Cache included, ESI available
HostingerLiteSpeed EnterpriseBusiness plan and aboveLiteSpeed Cache available in plugin directory
NameHeroLiteSpeed EnterpriseAll plansLiteSpeed Cache included, good performance tier
ScalaHostingLiteSpeed, Nginx, or Apache selectableManaged VPS plansChoose web server from control panel, Redis included
CloudwaysNginx + Apache (reverse proxy)All plansVarnish cache layer added in front, WP Redis available
KinstaNginxAll plansCustom Nginx stack with Redis, no LiteSpeed Cache
WP EngineNginx (custom)All plansProprietary EverCache layer, excellent performance
BluehostApacheMost plansPlugin-level caching only, older stack
HostGatorApacheAll shared plansPlugin-level caching only, no LiteSpeed option

How to Check Your Current Host's Web Server

You do not need to log in anywhere. Run one command from any terminal:

Check your web server from the command line:
# Check the Server header in the HTTP response
curl -sI https://yourdomain.com | grep -i "^server:"

# Output examples:
# Server: LiteSpeed    → LiteSpeed Enterprise
# Server: OpenLiteSpeed → OpenLiteSpeed (free version)
# Server: nginx         → Nginx
# Server: Apache        → Apache
# Server: cloudflare    → Cloudflare is proxying (origin server hidden)

# If behind Cloudflare, check origin directly
# (get your origin IP from your hosting control panel)
curl -sI --resolve "yourdomain.com:443:YOUR_ORIGIN_IP" \
    https://yourdomain.com | grep -i "^server:"

No terminal access? The KeyCDN Response Header Check tool does the same check from a browser — enter your domain and look for the Server header in the results. Within WordPress, the Query Monitor plugin displays server software in the Request panel on the right side of the admin bar when active.

A Note on Cloudways Architecture

Cloudways shows "Nginx" as the web server, which is accurate but incomplete. Cloudways runs Nginx in front of Apache (reverse proxy architecture), with Varnish as an additional full-page cache layer between Cloudflare and Nginx. The public-facing Server header shows Nginx. Apache handles PHP in the backend. Varnish serves cached pages before Nginx even touches them. This layered architecture explains why Cloudways performance is consistently competitive despite using Apache for PHP execution — Varnish provides a server-level cache functionally similar to LiteSpeed Cache, operating before PHP in the request path. Understanding this is useful context when evaluating managed hosting plans.

The Verdict by Use Case

There is no universal winner. The best web server for your WordPress site depends on your traffic volume, your technical control level, and whether you are running WooCommerce. These are concrete recommendations, not hedged "it depends" answers.

WordPress Blog or Content Site

Best: Any LiteSpeed host with LiteSpeed Cache configured. Enable page cache, set TTL to 24 hours for posts, enable image optimization. Server-level cache means cached posts load in under 10ms for any anonymous visitor.

Runner-up: Nginx host (Cloudways, ScalaHosting) with WP Rocket and Cloudflare. Plugin-level cache at 30-60ms TTFB, Cloudflare edge adds another 10-20ms reduction for geographically distributed visitors.

Budget option: Apache shared hosting with WP Rocket or W3 Total Cache plus Cloudflare. Cached TTFB will be 50-120ms. Uncached pages will be slow but most visitors see cached versions. More than acceptable for under 500 daily visitors.

Top picks: A2 Hosting Turbo (LiteSpeed) or Cloudways (Nginx+Varnish)

WooCommerce Store

Best: LiteSpeed with LiteSpeed Cache ESI enabled. Configure WooCommerce mode in LiteSpeed Cache settings. Product pages are served from server-level cache with live cart. Checkout and cart pages bypassed correctly. This is the only web server stack that solves the WooCommerce caching problem natively.

Runner-up: Nginx with FastCGI cache, configured to bypass cache on WooCommerce cookies. Requires careful skip-cache rules for the cart, checkout, My Account, and any page using the [woocommerce_cart] shortcode. WP Rocket handles this automatically with its WooCommerce add-on.

Avoid: Apache prefork without caching under checkout load. Each concurrent checkout visitor blocks an Apache worker. A modest flash sale can queue requests for 30+ seconds.

Top picks: ScalaHosting managed VPS with LiteSpeed, or A2 Hosting Turbo for shared hosting

Self-Managed VPS

Best setup: Nginx + PHP-FPM + Redis + Nginx FastCGI cache + Nginx Helper. This stack is free, well-documented, supported by every hosting community, and delivers server-level caching comparable to LiteSpeed Cache for most workloads. The Nginx Helper plugin handles cache invalidation automatically.

Alternative: OpenLiteSpeed + CyberPanel + LiteSpeed Cache. Free, delivers true server-level caching, and CyberPanel handles server administration without CLI. Better cache hit performance than Nginx FastCGI, but smaller community for troubleshooting.

I have run both in practice. Nginx is easier to maintain long-term due to documentation breadth. OpenLiteSpeed is faster per cache hit but more opaque when things go wrong. Choose Nginx for a site you will actively develop. Choose OpenLiteSpeed for a site you want to set and forget.

Managed option: ScalaHosting VPS — choose your web server from the control panel, Redis included

Stuck on Apache Shared Hosting

Apache shared hosting is not a dead end. It becomes one without caching. Add WP Rocket or W3 Total Cache. Enable Cloudflare as a free CDN layer. Apply the .htaccess optimizations from Section 5 of this guide. That combination brings cached TTFB to 50-100ms — measurably slower than LiteSpeed Cache's server-level numbers, but well within acceptable performance for most WordPress sites.

If Core Web Vitals show TTFB consistently above 600ms after caching is configured, your Apache host is likely undersizing PHP-FPM workers or running heavily overloaded shared servers. That is a hosting quality problem, not an Apache problem. A LiteSpeed host with the same resource allocation will not fix it.

TTFB above 200ms after caching is configured? Consider migrating to a LiteSpeed or Nginx host rather than tuning further.

The Short Version

Server-level caching outperforms plugin-level caching. LiteSpeed Cache provides server-level caching on LiteSpeed hosts. Nginx FastCGI cache provides comparable server-level caching on Nginx hosts with manual setup. Apache shared hosting is limited to plugin-level caching. For WooCommerce specifically, LiteSpeed's ESI is the only native solution to the cart caching problem. Everything else is a workaround of varying quality. The hosting recommendation that follows from this: LiteSpeed shared hosting for budget, ScalaHosting managed VPS for growing sites, Cloudways for teams who want Nginx with managed operations.

Where to Go Next

The web server is entry point for every request, but it is one layer in a stack that determines total WordPress performance. The WordPress caching guide maps all six cache layers — page cache, object cache, browser cache, CDN cache, PHP OPcache, and MySQL query cache — showing how LiteSpeed Cache and Nginx FastCGI cache slot into the full picture. If your benchmark results show high TTFB despite caching being active, the issue is almost always either the PHP-FPM pool size or database query time — the server hardware guide covers how VPS resource allocation affects PHP-FPM pool capacity. For anyone choosing between keeping their current shared host and moving to a VPS, the managed vs unmanaged VPS guide explains exactly what configuration work each option requires and whether a managed provider like ScalaHosting or Cloudways eliminates that work for you.

LiteSpeed vs Apache vs Nginx FAQ

Is LiteSpeed actually faster than Nginx for WordPress?

For cached WordPress pages, yes — LiteSpeed is faster than Nginx without FastCGI cache, and roughly equal to Nginx with FastCGI cache configured. The speed advantage comes from LiteSpeed Cache's server-level integration, which serves cached pages before PHP loads at all. The practical TTFB difference between LiteSpeed+LiteSpeed Cache and Nginx+FastCGI Cache is typically 5-15ms. The difference between either server-level cache and a plugin-level cache like WP Rocket is 20-80ms depending on server load. For uncached dynamic content with PHP-FPM, LiteSpeed's LSAPI protocol is marginally faster than Nginx's FastCGI, but the difference is smaller than most benchmarks suggest. The more important variable is PHP execution time and database query time — both unaffected by web server choice.

Can I use LiteSpeed Cache on Apache or Nginx?

LiteSpeed Cache works on Apache and Nginx, but with a significant limitation: the server-level page cache is disabled. On Apache or Nginx, LiteSpeed Cache's page cache falls back to plugin-level operation — WordPress boots, PHP runs, and the advanced-cache.php dropin checks for a cached page. This is similar performance to WP Rocket. The image optimization, CSS/JS minification, object cache integration, and CDN features still work on any server. But the core performance differentiator — serving cached pages at the web server level before PHP starts — is only available on LiteSpeed. If your host runs Nginx, WP Rocket or FlyingPress are more appropriate caching solutions and will perform comparably to LiteSpeed Cache on Nginx.

Why does Apache use more memory than Nginx?

Apache's prefork MPM spawns a complete process per active connection. Each process is 10-20 MB of RAM. At 100 concurrent connections, that is 1-2 GB of RAM consumed by the web server alone, before PHP or MySQL runs. Nginx uses an event-driven architecture with one worker process per CPU core. Each worker handles thousands of connections simultaneously using non-blocking I/O — when waiting for PHP to respond, the worker moves to the next ready connection instead of blocking. At 100 concurrent connections, Nginx uses 10-20 MB for the workers themselves. The memory difference is 100x in favor of Nginx under high concurrency. Apache's event MPM narrows this gap significantly by using threads instead of processes, but Apache's design still carries more overhead than Nginx's event loop.

Does it matter which web server my shared host uses?

Yes, particularly for caching. If your shared host uses LiteSpeed Enterprise, you can install LiteSpeed Cache and get server-level page caching — cached pages load in under 10ms because PHP never runs. If your host uses Apache, you are limited to plugin-level caching where PHP still boots on every request. The performance difference for a cached page is typically 30-80ms, which is measurable and meaningful for Core Web Vitals. For uncached requests, both stacks are similarly slow because the bottleneck is PHP execution time and database queries. To check your host's web server: run curl -sI https://yourdomain.com | grep -i server. Look for 'Server: LiteSpeed', 'Server: Apache', or 'Server: nginx' in the output.

What is ESI and why does it matter for WooCommerce?

ESI stands for Edge Side Includes. In WooCommerce, the problem is that pages containing cart data cannot be fully cached — the cart contents are unique per visitor. Without ESI, you must either not cache WooCommerce product pages (slow for everyone) or cache them and break the cart display. LiteSpeed Cache's ESI feature solves this by caching the entire product page HTML except for specific dynamic fragments — the cart widget, the account menu, the wishlist count. Those fragments are requested separately, dynamically, and assembled into the page on delivery. The result: product pages are served from LiteSpeed's server-level cache in under 10ms, while the cart stays live and accurate. Nginx and Apache have no equivalent native capability. This is one of the clearest functional advantages LiteSpeed has specifically for WooCommerce stores.

What is Nginx FastCGI cache and how does it compare to LiteSpeed Cache?

Nginx FastCGI cache is a server-level page cache built into Nginx that caches full PHP responses on disk. When enabled, a cache hit is served directly by Nginx without touching PHP-FPM — similar to how LiteSpeed Cache works. The TTFB for a FastCGI cache hit is 8-20ms, versus 1-10ms for LiteSpeed Cache (the difference is small). The key difference is cache management. LiteSpeed Cache communicates with LiteSpeed server through a built-in API to invalidate specific pages on WordPress events (publish, update, delete). Nginx FastCGI cache has no built-in communication channel with WordPress — you need either the Nginx Helper plugin or a custom purge script to invalidate cache entries when content changes. On a site that publishes frequently or where WooCommerce inventory changes constantly, LiteSpeed Cache's automatic invalidation is a practical advantage over Nginx FastCGI cache.

How do I check if my WordPress host uses LiteSpeed, Apache, or Nginx?

The fastest method: open a terminal and run curl -sI https://yourdomain.com | grep -i server. The Server header identifies the web server. You will see 'Server: LiteSpeed' for LiteSpeed Enterprise, 'Server: OpenLiteSpeed' for OpenLiteSpeed, 'Server: nginx' for Nginx, or 'Server: Apache' for Apache. If your site is behind Cloudflare, the Server header shows 'Server: cloudflare' — run the same command with the --resolve flag pointing to your origin IP to bypass Cloudflare. From within WordPress, the Query Monitor plugin shows server type under the 'Request' panel. In cPanel, the server software is listed in the 'Server Information' section of the hosting account.

Should I switch hosts to get LiteSpeed?

It depends on your current performance situation. If your site's TTFB is already under 200ms with proper caching configured, switching hosts for LiteSpeed alone will bring you from 200ms to 50-80ms — meaningful but not transformational for most sites. If your current host runs Apache with no caching and you are seeing 600ms+ TTFB, switching to a LiteSpeed host and installing LiteSpeed Cache will cut that to under 100ms. The hosting providers most known for LiteSpeed shared hosting are A2 Hosting Turbo plans, Hostinger Business and above, and SiteGround. For VPS with LiteSpeed, ScalaHosting offers managed VPS with LiteSpeed selectable from the control panel. The decision should be based on your current TTFB numbers and whether caching is already configured correctly — switching web servers will not fix an uncached site or a slow database.

Is OpenLiteSpeed free and does it support LiteSpeed Cache?

OpenLiteSpeed is free and fully open source. It supports the LiteSpeed Cache WordPress plugin including server-level page caching. The performance characteristics are very similar to LiteSpeed Enterprise for most WordPress workloads. The differences between OpenLiteSpeed and LiteSpeed Enterprise: OpenLiteSpeed has limited HTTP/3 support compared to Enterprise, does not integrate with cPanel (uses CyberPanel as a free alternative), and lacks some enterprise-level connection management features. For a self-managed VPS owner who wants LiteSpeed Cache performance without the licensing cost, OpenLiteSpeed with CyberPanel is a practical free alternative. CyberPanel handles most server administration tasks through a web interface, making it accessible without deep Linux command-line knowledge.

Does Apache support HTTP/2?

Yes, Apache supports HTTP/2 through mod_http2, but with a critical dependency: Apache must be running the event MPM (not the default prefork MPM on older installations). The event MPM is required because HTTP/2 uses multiplexing over a single connection, which the prefork MPM's process-per-request model cannot support efficiently. On Apache with prefork MPM and mod_php — still common on legacy shared hosts — HTTP/2 is unavailable. The host is serving HTTP/1.1 to every visitor. If you are on shared hosting and want to verify: open Chrome DevTools, Network tab, right-click the column header, enable the Protocol column, and reload the page. Requests showing 'h2' are HTTP/2. Requests showing 'http/1.1' mean your host's Apache is either still on prefork MPM or mod_http2 is not enabled.