{"id":3499,"date":"2026-09-30T06:35:12","date_gmt":"2026-09-30T06:35:12","guid":{"rendered":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/"},"modified":"2026-09-30T06:35:30","modified_gmt":"2026-09-30T06:35:30","slug":"wordpress-vps-server-stack-caching","status":"publish","type":"post","link":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/","title":{"rendered":"WordPress on a VPS: When to Move, Which Stack, What to Cache"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Short answer:<\/strong> move WordPress to a VPS when shared hosting limits start to hold your site back: busy WooCommerce or membership pages, several sites, or the need for server-level caching, Redis or a real cron. A sensible stack is Nginx or Apache with PHP-FPM on PHP 8.3 or newer, MariaDB 10.11 or MySQL 8.0 or newer, and HTTPS. Then cache in layers: OPcache for PHP, a page cache for visitors, an object cache for the database and browser caching for static files. If you do not want to look after a server yourself, stay on good shared hosting or choose a managed VPS.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"234\" src=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching-screenshot-1024x234.png\" alt=\"Terminal showing curl measuring time to first byte of a WordPress site\" class=\"wp-image-3501\" srcset=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching-screenshot-1024x234.png 1024w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching-screenshot-300x69.png 300w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching-screenshot-768x176.png 768w, https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching-screenshot.png 1136w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Measuring time to first byte of a WordPress site (our blog) with curl, three runs.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">When a VPS beats shared hosting for WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress&#8217;s own <a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/performance\/optimization\/\" target=\"_blank\" rel=\"noopener noreferrer\">optimisation guide<\/a> puts it simply: on shared hosting you have very little control over server settings, while on a VPS or dedicated server you control the whole software stack. That control pays off when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>You keep hitting account limits.<\/strong> Shared hosting sets per-account limits. On CloudLinux servers, for example, an account that reaches its limit of concurrent connections gets an error 508 page (Resource Limit Reached), according to <a href=\"https:\/\/docs.cloudlinux.com\/cloudlinuxos\/limits\/\" target=\"_blank\" rel=\"noopener noreferrer\">the CloudLinux documentation<\/a>. Slow checkouts or 508 errors at busy times are the usual sign.<\/li>\n\n\n\n<li><strong>Many visitors are logged in.<\/strong> Shops, membership sites and courses show personal pages that a page cache cannot serve, so every request runs PHP and queries the database.<\/li>\n\n\n\n<li><strong>You want server-level tools.<\/strong> Nginx page caching, a Redis or Valkey object cache, WP-CLI and a real cron job all need a server you control.<\/li>\n\n\n\n<li><strong>You run several sites.<\/strong> One VPS can host several WordPress sites, each with its own database, PHP pool and certificate.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A VPS is the wrong move if nobody will apply operating system updates, watch disk space or restore a backup. For a small brochure site, good shared hosting is usually simpler to run and cheaper. Our post <a href=\"https:\/\/www.ucartz.com\/blog\/shared-vs-vps-hosting-when-to-upgrade\/\">Shared vs VPS Hosting: When to Upgrade<\/a> covers the general case.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The stack: what to install<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The recommendations come from the <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress requirements page<\/a>. The latest release when we checked was WordPress 7.1.2.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Layer<\/th><th>Choice<\/th><th>Notes<\/th><\/tr><\/thead><tbody><tr><td>Web server<\/td><td>Nginx or Apache<\/td><td>WordPress recommends either. Nginx needs a <code>try_files<\/code> rule for pretty permalinks; Apache uses <code>.htaccess<\/code>.<\/td><\/tr><tr><td>PHP<\/td><td>PHP 8.3 or newer, run as PHP-FPM<\/td><td>php.net lists security support for 8.3 until the end of 2027; 8.4 and 8.5 run longer.<\/td><\/tr><tr><td>Database<\/td><td>MariaDB 10.11 or newer, or MySQL 8.0 or newer<\/td><td>Keep it on the same VPS unless the site is very busy.<\/td><\/tr><tr><td>HTTPS<\/td><td>A free Let&#8217;s Encrypt certificate<\/td><td>WordPress lists HTTPS support as a requirement.<\/td><\/tr><tr><td>Tools<\/td><td>WP-CLI<\/td><td>Updates, backups and search and replace from the command line.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Cache in layers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress&#8217;s <a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/performance\/cache\/\" target=\"_blank\" rel=\"noopener noreferrer\">caching guide<\/a> calls caching the fastest way to improve performance. Each layer does a different job:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OPcache<\/strong>, according to <a href=\"https:\/\/www.php.net\/manual\/en\/book.opcache.php\" target=\"_blank\" rel=\"noopener noreferrer\">the PHP manual<\/a>, stores precompiled script bytecode in shared memory, so PHP does not load and parse every script on each request. Check it with your PHP-FPM binary, for example <code>php-fpm8.5 -i | grep '^opcache.enable ='<\/code>; on our Ubuntu 26.04 test system it printed <code>opcache.enable =&gt; On =&gt; On<\/code>.<\/li>\n\n\n\n<li><strong>A page cache<\/strong> stores the finished HTML of a page and serves it without running WordPress. A plugin can do this, or Nginx can do it with <code>fastcgi_cache<\/code>.<\/li>\n\n\n\n<li><strong>An object cache<\/strong> keeps the results of database queries in memory between requests. It helps most where a page cache cannot: logged-in users, shops and the admin area. See <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/1131\/How-to-Speed-Up-WordPress-With-Redis-or-Valkey-Object-Caching.html\">how to speed up WordPress with Redis or Valkey<\/a>.<\/li>\n\n\n\n<li><strong>Browser caching<\/strong> tells visitors&#8217; browsers to keep images, CSS and JavaScript, so repeat visits download less.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What a page cache did in our test<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">We built a fresh WordPress 7.1.2 site in Docker on a Mac, with PHP 8.4.26 (PHP-FPM with its default pool of 5 workers), MariaDB 11.8 and Nginx, then sent 1,000 requests for the home page, 10 at a time, with ApacheBench:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Setup<\/th><th>Requests per second<\/th><th>Single request (warm)<\/th><\/tr><\/thead><tbody><tr><td>No page cache (PHP and database every time)<\/td><td>215<\/td><td>about 21 ms<\/td><\/tr><tr><td>Nginx <code>fastcgi_cache<\/code> hit<\/td><td>about 25,000<\/td><td>under 1 ms<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">An example from one test machine, not a benchmark of any hosting plan. A real site with a theme and plugins is slower without a cache.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The point is the ratio, not the numbers: a cached page costs the server almost nothing. The core of the Nginx setup we used is short. The <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">Nginx FastCGI module documentation<\/a> explains each directive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># in the http block\nfastcgi_cache_path \/var\/cache\/nginx\/wp levels=1:2 keys_zone=WP:10m inactive=60m;\n\n# in the server block\nset $skip_cache 0;\nif ($http_cookie ~* \"wordpress_logged_in|comment_author|wp-postpass\") { set $skip_cache 1; }\n\n# in location ~ \\.php$\nfastcgi_cache WP;\nfastcgi_cache_key \"$scheme$request_method$host$request_uri\";\nfastcgi_cache_valid 200 10m;\nfastcgi_cache_bypass $skip_cache;\nfastcgi_no_cache $skip_cache;\nadd_header X-Cache $upstream_cache_status;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The cookie rule keeps logged-in users and commenters away from cached pages, and Nginx only caches GET and HEAD requests by default, so form posts are never cached. The <code>X-Cache<\/code> header lets you check the result with <code>curl -sI https:\/\/example.com\/ | grep -i x-cache<\/code>. In our test (Nginx 1.30.5) the first request showed <code>MISS<\/code>, the next ones <code>HIT<\/code>, and a request with a <code>wordpress_logged_in<\/code> cookie <code>BYPASS<\/code>. After you publish or update content, the cached copy stays until it expires (10 minutes here), so use a plugin that clears it or keep the time short.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Size PHP-FPM to your memory<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uncached requests are handled by PHP-FPM workers. According to <a href=\"https:\/\/www.php.net\/manual\/en\/install.fpm.configuration.php\" target=\"_blank\" rel=\"noopener noreferrer\">the PHP manual<\/a>, <code>pm.max_children<\/code> sets the limit on the number of simultaneous requests PHP will serve. Too low and visitors queue; too high and the server runs out of memory. Measure your workers after the site has been busy for a while:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ps -eo rss,cmd | awk '\/[p]hp-fpm: pool\/ {s+=$1; n++} END {printf \"%d workers, average %.0f MB\\n\", n, s\/n\/1024}'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">On our fresh test site it printed <code>3 workers, average 49 MB<\/code>. About 22 MB of each was shared memory, such as OPcache, which is counted in every worker but exists only once, so the figure is a safe upper estimate. Plugins, page builders and WooCommerce raise it. Then divide: if you can spare 2 GB for PHP after the operating system, database and cache, and workers average 80 MB, about 25 workers fit. Set <code>pm.max_children<\/code> near that and watch memory at your busiest time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Swap WP-Cron for a real cron job<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress normally runs scheduled tasks when someone visits the site. The <a href=\"https:\/\/developer.wordpress.org\/plugins\/cron\/hooking-wp-cron-into-the-system-task-scheduler\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress documentation<\/a> suggests calling <code>wp-cron.php<\/code> from the system scheduler instead and turning off the per-visit check with this line in <code>wp-config.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>define( 'DISABLE_WP_CRON', true );<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then add a crontab entry such as <code>*\/15 * * * * wget -q --delete-after https:\/\/example.com\/wp-cron.php<\/code>. Our guide to <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/1079\/How-to-disable-the-wp-cron.php-in-WordPress.html\">disabling wp-cron.php<\/a> has more detail.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Before you move<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test the new server on a staging copy first; see <a href=\"https:\/\/www.ucartz.com\/clients\/knowledgebase\/1501\/How-to-Create-a-Staging-Environment-for-Your-WordPress-Website.html\">how to create a staging site<\/a>.<\/li>\n\n\n\n<li>Plan the switch with our <a href=\"https:\/\/www.ucartz.com\/blog\/website-migration-without-downtime\/\">migration checklist for moving WordPress without downtime<\/a>.<\/li>\n\n\n\n<li>Set up automatic security updates for the operating system and an off-server backup before you change DNS.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">WordPress on a Ucartz VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our <a href=\"https:\/\/www.ucartz.com\/vps-hosting\">KVM VPS plans<\/a> have NVMe SSD storage, full root access and unmetered bandwidth, and deployment is automated once your order is approved. Install Nginx or Apache, PHP, MariaDB and WordPress yourself, or ask our team to set them up; work such as moving an existing site or web server tuning is billed by time, from $8 per 15 minutes. Free Basic Managed Support covers quick tasks, and self-managed VPS are not backed up by us, so keep your own off-site copies. If you would rather we handled updates, security and monitoring, look at our <a href=\"https:\/\/www.ucartz.com\/managed-vps-hosting\">managed cPanel VPS<\/a> instead.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.<\/p>\n","protected":false},"author":17,"featured_media":3500,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,70],"tags":[414,190,927,771,926,812,925],"class_list":["post-3499","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting","category-vps-hosting","tag-caching","tag-nginx","tag-php-fpm","tag-redis","tag-vps-server-wordpress","tag-wordpress-hosting","tag-wordpress-vps"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog<\/title>\n<meta name=\"description\" content=\"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog\" \/>\n<meta property=\"og:description\" content=\"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/\" \/>\n<meta property=\"og:site_name\" content=\"Ucartz Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/UcartzOnline\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-30T06:35:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-30T06:35:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Vishnu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ucartz\" \/>\n<meta name=\"twitter:site\" content=\"@ucartz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vishnu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/\"},\"author\":{\"name\":\"Vishnu\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/person\\\/ba7f9b295152bd6c620f7bbb22a00384\"},\"headline\":\"WordPress on a VPS: When to Move, Which Stack, What to Cache\",\"datePublished\":\"2026-09-30T06:35:12+00:00\",\"dateModified\":\"2026-09-30T06:35:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/\"},\"wordCount\":1127,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-vps-server-stack-caching.jpg\",\"keywords\":[\"Caching\",\"Nginx\",\"php-fpm\",\"redis\",\"vps server wordpress\",\"WordPress Hosting\",\"wordpress vps\"],\"articleSection\":[\"Hosting\",\"VPS Hosting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/\",\"name\":\"WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-vps-server-stack-caching.jpg\",\"datePublished\":\"2026-09-30T06:35:12+00:00\",\"dateModified\":\"2026-09-30T06:35:30+00:00\",\"description\":\"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-vps-server-stack-caching.jpg\",\"contentUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-vps-server-stack-caching.jpg\",\"width\":1200,\"height\":630,\"caption\":\"WordPress on a VPS: When to Move, Which Stack, What to Cache\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wordpress-vps-server-stack-caching\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WordPress on a VPS: When to Move, Which Stack, What to Cache\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\",\"name\":\"Ucartz Blog\",\"description\":\"Guides on hosting, servers, streaming and automation\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\"},\"alternateName\":\"Ucartz\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#organization\",\"name\":\"Ucartz Online Pvt Ltd\",\"alternateName\":\"Ucartz\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ucartz-logo-888x240-1.png\",\"contentUrl\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ucartz-logo-888x240-1.png\",\"width\":888,\"height\":240,\"caption\":\"Ucartz Online Pvt Ltd\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/UcartzOnline\",\"https:\\\/\\\/x.com\\\/ucartz\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/ucartzonline\",\"https:\\\/\\\/www.instagram.com\\\/ucartz_com\",\"https:\\\/\\\/www.trustpilot.com\\\/review\\\/ucartz.com\",\"https:\\\/\\\/n8n.io\\\/creators\\\/ucartz\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/#\\\/schema\\\/person\\\/ba7f9b295152bd6c620f7bbb22a00384\",\"name\":\"Vishnu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g\",\"caption\":\"Vishnu\"},\"url\":\"https:\\\/\\\/www.ucartz.com\\\/blog\\\/author\\\/vishnu\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog","description":"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/","og_locale":"en_US","og_type":"article","og_title":"WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog","og_description":"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.","og_url":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/","og_site_name":"Ucartz Blog","article_publisher":"https:\/\/www.facebook.com\/UcartzOnline","article_published_time":"2026-09-30T06:35:12+00:00","article_modified_time":"2026-09-30T06:35:30+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg","type":"image\/jpeg"}],"author":"Vishnu","twitter_card":"summary_large_image","twitter_creator":"@ucartz","twitter_site":"@ucartz","twitter_misc":{"Written by":"Vishnu","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#article","isPartOf":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/"},"author":{"name":"Vishnu","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/person\/ba7f9b295152bd6c620f7bbb22a00384"},"headline":"WordPress on a VPS: When to Move, Which Stack, What to Cache","datePublished":"2026-09-30T06:35:12+00:00","dateModified":"2026-09-30T06:35:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/"},"wordCount":1127,"commentCount":0,"publisher":{"@id":"https:\/\/www.ucartz.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg","keywords":["Caching","Nginx","php-fpm","redis","vps server wordpress","WordPress Hosting","wordpress vps"],"articleSection":["Hosting","VPS Hosting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/","url":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/","name":"WordPress on a VPS: When to Move, Which Stack, What to Cache - Ucartz Blog","isPartOf":{"@id":"https:\/\/www.ucartz.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#primaryimage"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg","datePublished":"2026-09-30T06:35:12+00:00","dateModified":"2026-09-30T06:35:30+00:00","description":"When WordPress on a VPS beats shared hosting, which stack to install, how page, object and OPcache caching help, and how to size PHP-FPM workers.","breadcrumb":{"@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#primaryimage","url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg","contentUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-vps-server-stack-caching.jpg","width":1200,"height":630,"caption":"WordPress on a VPS: When to Move, Which Stack, What to Cache"},{"@type":"BreadcrumbList","@id":"https:\/\/www.ucartz.com\/blog\/wordpress-vps-server-stack-caching\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.ucartz.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WordPress on a VPS: When to Move, Which Stack, What to Cache"}]},{"@type":"WebSite","@id":"https:\/\/www.ucartz.com\/blog\/#website","url":"https:\/\/www.ucartz.com\/blog\/","name":"Ucartz Blog","description":"Guides on hosting, servers, streaming and automation","publisher":{"@id":"https:\/\/www.ucartz.com\/blog\/#organization"},"alternateName":"Ucartz","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ucartz.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.ucartz.com\/blog\/#organization","name":"Ucartz Online Pvt Ltd","alternateName":"Ucartz","url":"https:\/\/www.ucartz.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/ucartz-logo-888x240-1.png","contentUrl":"https:\/\/www.ucartz.com\/blog\/wp-content\/uploads\/2026\/09\/ucartz-logo-888x240-1.png","width":888,"height":240,"caption":"Ucartz Online Pvt Ltd"},"image":{"@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/UcartzOnline","https:\/\/x.com\/ucartz","https:\/\/www.linkedin.com\/company\/ucartzonline","https:\/\/www.instagram.com\/ucartz_com","https:\/\/www.trustpilot.com\/review\/ucartz.com","https:\/\/n8n.io\/creators\/ucartz\/"]},{"@type":"Person","@id":"https:\/\/www.ucartz.com\/blog\/#\/schema\/person\/ba7f9b295152bd6c620f7bbb22a00384","name":"Vishnu","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d21259044d2f5c0eacd78c2bfcf1257b427f80fa9c7ebbb776f7a840ba80f21f?s=96&d=mm&r=g","caption":"Vishnu"},"url":"https:\/\/www.ucartz.com\/blog\/author\/vishnu\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/comments?post=3499"}],"version-history":[{"count":1,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3499\/revisions"}],"predecessor-version":[{"id":3502,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/posts\/3499\/revisions\/3502"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/media\/3500"}],"wp:attachment":[{"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/media?parent=3499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/categories?post=3499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ucartz.com\/blog\/wp-json\/wp\/v2\/tags?post=3499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}