<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WordPress on Aquasp's blog</title><link>https://aquasp.blog/tag/wordpress/</link><description>Recent content in WordPress on Aquasp's blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 09 Dec 2025 01:45:24 +0000</lastBuildDate><atom:link href="https://aquasp.blog/tag/wordpress/index.xml" rel="self" type="application/rss+xml"/><item><title>7 things that you should do after installing WordPress</title><link>https://aquasp.blog/7-things-that-you-should-do-after-installing-wordpress/</link><pubDate>Tue, 09 Dec 2025 01:45:24 +0000</pubDate><guid>https://aquasp.blog/7-things-that-you-should-do-after-installing-wordpress/</guid><description>&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;Starting a fresh WordPress site in 2026? Whether it&amp;rsquo;s a blog, eCommerce store, or portfolio, these tweaks will supercharge speed, lock down security, and ensure buttery-smooth performance from day one.&lt;/p&gt;&#10;&lt;p&gt;No paid tools required — just free plugins and quick configs. Let&amp;rsquo;s dive in!&lt;/p&gt;&#10;&lt;h2 id="1-auto-resize--compress-images-on-upload"&gt;1. Auto-Resize &amp;amp; Compress Images on Upload&#10;&lt;/h2&gt;&lt;p&gt;Images are the #1 bandwidth killer. Don&amp;rsquo;t upload a 10MB photo and hope for the best — automate compression to keep your site lean.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Recommended Plugin:&lt;/strong&gt; &lt;a class="link" href="https://wordpress.org/plugins/resize-image-after-upload/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Resize Image After Upload&lt;/a&gt; (Free, 90K+ active installs, 4.8/5 rating)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Install &amp;amp; activate it first thing.&lt;/li&gt;&#10;&lt;li&gt;Set max width/height (e.g., 1920px wide) and compression level (default 82% JPEG quality is solid).&lt;/li&gt;&#10;&lt;li&gt;It auto-resizes JPEG/PNG/GIF on upload, slashes file sizes by 50–80%, and boosts SEO with faster load times.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pro tip: For bulk-optimizing existing images, pair it with Smush (free tier handles 50 images/month).&lt;/p&gt;&#10;&lt;p&gt;Result: Pages load 2–3x faster, less server strain, happier Google rankings.&lt;/p&gt;&#10;&lt;h2 id="2-strip-out-unnecessary-bloat"&gt;2. Strip Out Unnecessary Bloat&#10;&lt;/h2&gt;&lt;p&gt;WordPress ships with &amp;ldquo;extras&amp;rdquo; you might not need — like Gutenberg blocks, XML-RPC, or emoji scripts. Trim the fat for a lighter core.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Recommended Plugin:&lt;/strong&gt; &lt;a class="link" href="https://wordpress.org/plugins/unbloater/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Unbloater&lt;/a&gt; (Free, 10K+ active installs, 5/5 rating)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Simple dashboard under &lt;strong&gt;Settings &amp;gt; Unbloater&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Recommended toggles:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Backend:&lt;/strong&gt; Disable auto-updates (if you handle them manually), limit post revisions to 3, hide update nags for non-admins, disable XML-RPC.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; Remove RSD/WLW manifests, shortlinks, feed links, jQuery Migrate, emoji scripts.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Block Editor:&lt;/strong&gt; Fully disable Gutenberg (if using Classic Editor) or remove unused blocks.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Extras:&lt;/strong&gt; Block DNS prefetch to WordPress.org, remove generator meta tag.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Everything is reversible — toggle off if issues arise. This cuts database queries and JS/CSS bloat by 20–30%.&lt;/p&gt;&#10;&lt;h2 id="3-tame-the-heartbeat-api"&gt;3. Tame the Heartbeat API&#10;&lt;/h2&gt;&lt;p&gt;WordPress&amp;rsquo; Heartbeat API pings your server every 15–60 seconds for autosave, user presence, etc. Great for collaboration, but it spikes CPU on shared hosting.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Recommended Plugin:&lt;/strong&gt; &lt;a class="link" href="https://wordpress.org/plugins/heartbeat-control/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Heartbeat Control&lt;/a&gt; (Free, 90K+ active installs, 4.1/5 rating)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Go to &lt;strong&gt;Settings &amp;gt; Heartbeat Control&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;li&gt;Set intervals: 60 seconds (frontend), 120 seconds (dashboard/editor).&lt;/li&gt;&#10;&lt;li&gt;Or disable entirely on frontend if you don&amp;rsquo;t need live previews.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Unbloater can handle this too. Expect 10–20% CPU savings on idle sessions.&lt;/p&gt;&#10;&lt;h2 id="4-limit-post-revisions"&gt;4. Limit Post Revisions&#10;&lt;/h2&gt;&lt;p&gt;By default, WordPress saves 25 revisions per post — bloating your database over time (e.g., a 1,000-post site = 25K+ entries).&lt;/p&gt;&#10;&lt;p&gt;Add to &lt;code&gt;wp-config.php&lt;/code&gt; (before &amp;ldquo;That&amp;rsquo;s all, stop editing!&amp;rdquo;):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Limit to 3 revisions (or false to disable)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;WP_POST_REVISIONS&amp;#39;&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Unbloater has a toggle for this. Clean up old ones with WP-Optimize (free).&lt;/p&gt;&#10;&lt;p&gt;Result: Smaller DB = faster queries and backups.&lt;/p&gt;&#10;&lt;h2 id="5-disable-xml-rpc-unless-needed"&gt;5. Disable XML-RPC (Unless Needed)&#10;&lt;/h2&gt;&lt;p&gt;XML-RPC enables remote posting/apps but is a brute-force magnet (most bots target it).&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;If using Jetpack/mobile apps: Keep it, but whitelist your IP.&lt;/li&gt;&#10;&lt;li&gt;Otherwise: Block via .htaccess (Apache/LiteSpeed):&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;Files xmlrpc.php&amp;gt;&#10;Order Deny,Allow&#10;Deny from all&#10;# Allow from YOUR.IP.ADDRESS (uncomment if needed)&#10;&amp;lt;/Files&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unbloater or &lt;a class="link" href="https://wordpress.org/plugins/loginizer/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Loginizer&lt;/a&gt; (free, 1M+ installs) can disable it too.&lt;/p&gt;&#10;&lt;h2 id="6-lock-down-logins-with-rate-limiting"&gt;6. Lock Down Logins with Rate Limiting&#10;&lt;/h2&gt;&lt;p&gt;Bots hammer /wp-login.php 24/7. Limit attempts to stop brute-force attacks cold.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Top Pick:&lt;/strong&gt; &lt;a class="link" href="https://wordpress.org/plugins/limit-login-attempts-reloaded/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Limit Login Attempts Reloaded&lt;/a&gt; (Free, 2M+ installs, 4.9/5 rating)&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Defaults: 3 failed attempts → 15-min lockout (escalates to 24h).&lt;/li&gt;&#10;&lt;li&gt;Covers wp-admin, XML-RPC, WooCommerce, custom logins.&lt;/li&gt;&#10;&lt;li&gt;Logs + notifications included.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Alternative:&lt;/strong&gt; &lt;a class="link" href="https://wordpress.org/plugins/bruteguard/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;BruteGuard&lt;/a&gt; (Free, cloud-based botnet blocking via shared network).&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://wordpress.org/plugins/loginizer/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;Loginizer&lt;/a&gt; (1M+ installs) adds 2FA + reCAPTCHA for extra layers.&lt;/p&gt;&#10;&lt;p&gt;Test: Try wrong logins — you&amp;rsquo;ll see instant blocks.&lt;/p&gt;&#10;&lt;h2 id="7-vet-plugins-before-installing"&gt;7. Vet Plugins Before Installing&#10;&lt;/h2&gt;&lt;p&gt;Not all plugins are equal — some bloat your site with 1MB+ RAM usage or JS errors. Always check:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://wphive.com/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;&lt;strong&gt;WP Hive&lt;/strong&gt;&lt;/a&gt;: Chrome extension + site for automated tests (memory, page speed impact, PHP/WordPress compatibility, DB footprint). E.g., Yoast SEO 20.1: +0.1s load time, 1MB RAM (heavier than average).&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://plugintests.com/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;&lt;strong&gt;PluginTests.com&lt;/strong&gt;&lt;/a&gt;: Basic compatibility/smoke tests for 98% of WP.org plugins (activation errors, obvious breaks).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;Quick Example (2025 Benchmarks):&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Yoast SEO: Solid but resource-heavy (+0.1s load, 1MB RAM). Great for readability.&lt;/li&gt;&#10;&lt;li&gt;Rank Math SEO: Lighter (no load impact, &amp;lt;250KB RAM), more free features. Often 4x faster in tests.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Aim for lightweight picks — only add &amp;ldquo;heavy&amp;rdquo; ones if essential.&lt;/p&gt;&#10;&lt;h2 id="wrap-up"&gt;Wrap-Up&#10;&lt;/h2&gt;&lt;p&gt;Implement these today, and your site will launch 2–3x faster, more secure, and future-proof. Total time: ~30 minutes. No excuses!&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading! 🚀&lt;/p&gt;&#10;</description></item><item><title>How to remove upload limits on All In One WP Migration</title><link>https://aquasp.blog/how-to-remove-upload-limits-on-all-in-one-wp-migration/</link><pubDate>Tue, 09 Dec 2025 00:25:04 +0000</pubDate><guid>https://aquasp.blog/how-to-remove-upload-limits-on-all-in-one-wp-migration/</guid><description>&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;Unfortunately, many hosting providers impose very low upload limits (sometimes as little as 2–50 MB), and the official Unlimited Extension costs $69.&lt;/p&gt;&#10;&lt;p&gt;If you’re in that situation and need a free way to upload huge backups (10 GB, 40 GB, or more), this simple trick will help.&lt;/p&gt;&#10;&lt;h2 id="the-solution-use-big-file-uploads-plugin"&gt;The Solution: Use &amp;ldquo;Big File Uploads&amp;rdquo; Plugin&#10;&lt;/h2&gt;&lt;p&gt;The free version of All-in-One WP Migration doesn’t artificially limit uploads — it simply respects whatever limit your hosting or server enforces. The paid Unlimited Extension works by splitting the &lt;code&gt;.wpress&lt;/code&gt; file into smaller chunks during upload.&lt;/p&gt;&#10;&lt;p&gt;Good news: there’s a completely free plugin that does the exact same chunking trick!&lt;/p&gt;&#10;&lt;h3 id="step-by-step-guide"&gt;Step-by-Step Guide&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Install and activate the plugin called &lt;strong&gt;Big File Uploads&lt;/strong&gt;&#10;→ Direct link: &lt;a class="link" href="https://wordpress.org/plugins/tuxedo-big-file-uploads/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://wordpress.org/plugins/tuxedo-big-file-uploads/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;After activation, go to:&#10;&lt;strong&gt;Settings → Big File Uploads&lt;/strong&gt;&#10;(or find it under the Plugins page → “Settings” link under the plugin name)&lt;/li&gt;&#10;&lt;li&gt;You’ll see the current maximum upload size (it will match your host’s default limit at first).&lt;/li&gt;&#10;&lt;li&gt;Change it to whatever you want:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1 GB = 1024 MB&lt;/li&gt;&#10;&lt;li&gt;10 GB = 10240 MB&lt;/li&gt;&#10;&lt;li&gt;40 GB = 40960 MB&#10;(Just type the number in megabytes — no need to add “MB” or “GB”)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="5"&gt;&#10;&lt;li&gt;Click &lt;strong&gt;Save Changes&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;That’s it! The new limit takes effect immediately.&lt;/p&gt;&#10;&lt;p&gt;Now when you go back to &lt;strong&gt;All-in-One WP Migration → Import&lt;/strong&gt;, the max file size will reflect your new value (even 40 GB or higher works perfectly).&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&#10;&lt;/h2&gt;&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; meant as an attack on ServMask — they’ve built an amazing plugin and absolutely deserve support. If you can afford it, please buy the official Unlimited Extension.&lt;/p&gt;&#10;&lt;p&gt;But if budget is tight and you just need to migrate or restore a huge site once or twice, the &lt;strong&gt;Big File Uploads&lt;/strong&gt; plugin is a 100% free and reliable alternative that works perfectly with the free version of All-in-One WP Migration.&lt;/p&gt;&#10;&lt;p&gt;Thank you for reading! 🙂&lt;/p&gt;&#10;</description></item><item><title>How to setup WordPress on LEMP with Redis and WP CLI on Debian 11</title><link>https://aquasp.blog/how-to-setup-wordpress-on-lemp-with-redis-and-wp-cli-on-debian-11/</link><pubDate>Mon, 08 Dec 2025 23:47:36 +0000</pubDate><guid>https://aquasp.blog/how-to-setup-wordpress-on-lemp-with-redis-and-wp-cli-on-debian-11/</guid><description>&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;This is the fastest, most secure, and most resource-efficient way to self-host WordPress in 2025.&#10;We’ll use a proper LEMP stack (Linux + Nginx + MySQL/MariaDB + PHP-FPM) with per-site PHP isolation, Redis object caching, automatic SSL, and WP-CLI — everything tuned for speed and security.&lt;/p&gt;&#10;&lt;p&gt;Let’s go.&lt;/p&gt;&#10;&lt;h2 id="step-0-secure--update-your-vps"&gt;Step 0: Secure &amp;amp; Update Your VPS&#10;&lt;/h2&gt;&lt;p&gt;(If you haven’t already, follow a VPS hardening guide first — SSH keys only, firewall, fail2ban, etc.)&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt autoremove --purge&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-1-install-the-core-stack"&gt;Step 1: Install the Core Stack&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# Nginx&#10;apt install nginx -y&#10;systemctl enable nginx&#10;&#10;# MariaDB (better than MySQL on Debian)&#10;apt install mariadb-server -y&#10;systemctl enable mariadb&#10;&#10;# PHP 8.3 + all needed extensions (using ondrej/sury repo)&#10;apt install ca-certificates apt-transport-https lsb-release -y&#10;wget -qO- https://packages.sury.org/php/apt.gpg | gpg --dearmor &amp;gt; /usr/share/keyrings/sury-php.gpg&#10;echo &amp;#34;deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main&amp;#34; &amp;gt; /etc/apt/sources.list.d/sury-php.list&#10;apt update&#10;apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl php8.3-imagick php8.3-redis -y&#10;systemctl enable php8.3-fpm&#10;&#10;# Redis&#10;curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg&#10;echo &amp;#34;deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main&amp;#34; &amp;gt; /etc/apt/sources.list.d/redis.list&#10;apt update &amp;amp;&amp;amp; apt install redis-server -y&#10;systemctl enable redis-server&#10;&#10;# Certbot + WP-CLI&#10;apt install python3-certbot-nginx -y&#10;curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar&#10;chmod +x wp-cli.phar &amp;amp;&amp;amp; mv wp-cli.phar /usr/local/bin/wp&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-2-secure-mariadb--create-database"&gt;Step 2: Secure MariaDB &amp;amp; Create Database&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql_secure_installation&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql -u root -p&#10;CREATE DATABASE wp_yoursite;&#10;CREATE USER &amp;#39;wp_yoursite&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;strongpassword&amp;#39;;&#10;GRANT ALL ON wp_yoursite.* TO &amp;#39;wp_yoursite&amp;#39;@&amp;#39;localhost&amp;#39;;&#10;FLUSH PRIVILEGES;&#10;EXIT;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-3-isolate-php-fpm-per-site-security--stability"&gt;Step 3: Isolate PHP-FPM Per Site (Security + Stability)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /etc/php/8.3/fpm/pool.d/&#10;cp www.conf yoursite.conf&#10;nano yoursite.conf&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;[www] → [yoursite]&lt;/li&gt;&#10;&lt;li&gt;user = www-data → user = yoursiteuser (we’ll create this user soon)&lt;/li&gt;&#10;&lt;li&gt;group = www-data → group = yoursiteuser&lt;/li&gt;&#10;&lt;li&gt;listen = /run/php/php8.3-fpm.sock → listen = /run/php/php8.3-fpm-yoursite.sock&lt;/li&gt;&#10;&lt;li&gt;Change process manager from dynamic → ondemand (saves RAM)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart php8.3-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(It will fail until the user exists — that’s fine.)&lt;/p&gt;&#10;&lt;h2 id="step-4-optimize-php--enable-opcache"&gt;Step 4: Optimize PHP &amp;amp; Enable OPcache&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sed -i &amp;#34;s/memory_limit = .*/memory_limit = 1024M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/upload_max_filesize = .*/upload_max_filesize = 10240M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/post_max_size = .*/post_max_size = 10240M/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/max_execution_time = .*/max_execution_time = 600/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.enable=1/opcache.enable=1/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.memory_consumption=.*/opcache.memory_consumption=512/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=20000/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;sed -i &amp;#34;s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/&amp;#34; /etc/php/8.3/fpm/php.ini&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-5-create-system-user--site-directory"&gt;Step 5: Create System User &amp;amp; Site Directory&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;adduser yoursiteuser --shell /bin/bash&#10;su yoursiteuser&#10;mkdir ~/public_html &amp;amp;&amp;amp; cd ~/public_html&#10;echo &amp;#34;cd ~/public_html&amp;#34; &amp;gt;&amp;gt; ~/.bashrc&#10;exit&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-6-nginx-config-fast--secure"&gt;Step 6: Nginx Config (Fast &amp;amp; Secure)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/nginx/sites-available/yoursite.conf&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;upstream php-yoursite {&#10; server unix:/run/php/php8.3-fpm-yoursite.sock;&#10;}&#10;&#10;server {&#10; listen 80;&#10; listen [::]:80;&#10; server_name yourdomain.com www.yourdomain.com;&#10; root /home/yoursiteuser/public_html;&#10; index index.php index.html;&#10;&#10; client_max_body_size 10G;&#10;&#10; location / {&#10; try_files $uri $uri/ /index.php?$args;&#10; }&#10;&#10; location ~ \.php$ {&#10; include fastcgi_params;&#10; fastcgi_pass php-yoursite;&#10; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&#10; }&#10;&#10; location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot)$ {&#10; expires max;&#10; log_not_found off;&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ln -s /etc/nginx/sites-available/yoursite.conf /etc/nginx/sites-enabled/&#10;nginx -t &amp;amp;&amp;amp; systemctl reload nginx&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-7-install-wordpress-via-wp-cli-as-the-site-user"&gt;Step 7: Install WordPress via WP-CLI (as the site user)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;su yoursiteuser&#10;cd ~/public_html&#10;&#10;wp core download&#10;wp config create --dbname=wp_yoursite --dbuser=wp_yoursite --dbpass=&amp;#39;strongpassword&amp;#39; --locale=en_US&#10;wp core install --url=https://yourdomain.com --title=&amp;#34;Your Site&amp;#34; --admin_user=admin --admin_password=&amp;#39;strongpass&amp;#39; --admin_email=you@domain.com&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-8-ssl-with-lets-encrypt-auto-renew"&gt;Step 8: SSL with Let’s Encrypt (Auto-renew)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;certbot --nginx -d yourdomain.com -d www.yourdomain.com&#10;# Choose redirect to HTTPS when asked&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Add auto-renew cron:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;crontab -e&#10;# Add:&#10;0 0 * * 0 certbot renew --quiet&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-9-enable-redis-object-cache"&gt;Step 9: Enable Redis Object Cache&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# As root&#10;usermod -aG redis yoursiteuser&#10;chmod 770 /var/run/redis/redis-server.sock&#10;&#10;# Optimize Redis config&#10;sed -i &amp;#39;s/port 6379/port 0/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s|# unixsocket /run/redis/redis-server.sock|unixsocket /var/run/redis/redis-server.sock|&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# unixsocketperm 700/unixsocketperm 770/&amp;#39; /etc/redis/redis.conf&#10;sed -i &amp;#39;s/# maxmemory .*/maxmemory 1024mb/&amp;#39; /etc/redis/redis.conf&#10;systemctl restart redis-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# As yoursiteuser&#10;cd ~/public_html&#10;wp plugin install redis-cache --activate&#10;wp config set WP_REDIS_SCHEME unix&#10;wp config set WP_REDIS_PATH &amp;#39;/var/run/redis/redis-server.sock&amp;#39;&#10;wp redis enable&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="done"&gt;Done!&#10;&lt;/h2&gt;&lt;p&gt;You now have:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Fully isolated PHP-FPM pool (1 user = 1 site = no cross-site damage)&lt;/li&gt;&#10;&lt;li&gt;Redis object caching over Unix socket&lt;/li&gt;&#10;&lt;li&gt;OPcache + huge upload limits&lt;/li&gt;&#10;&lt;li&gt;Automatic SSL renewal&lt;/li&gt;&#10;&lt;li&gt;Fastest possible Nginx routing&lt;/li&gt;&#10;&lt;li&gt;WP-CLI ready&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Your wp-admin will feel instant, and the site will handle traffic like a champ — even on a $5/month VPS.&lt;/p&gt;&#10;&lt;p&gt;Next steps:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Install a page cache plugin (any free one is ok)&lt;/li&gt;&#10;&lt;li&gt;Set up Cloudflare (optional but recommended)&lt;/li&gt;&#10;&lt;li&gt;Regular backups&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Enjoy your blazing-fast, private WordPress setup!&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading! 😊&lt;/p&gt;&#10;</description></item><item><title>Page Cache, Object Cache and CDN cache - Understanding all types of caching</title><link>https://aquasp.blog/page-cache-object-cache-and-cdn-cache-understanding-all-types-of-caching/</link><pubDate>Mon, 08 Dec 2025 23:13:04 +0000</pubDate><guid>https://aquasp.blog/page-cache-object-cache-and-cdn-cache-understanding-all-types-of-caching/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="understanding-the-different-types-of-caching-especially-for-scaling-cms-sites"&gt;Understanding the Different Types of Caching (Especially for Scaling CMS Sites)&#10;&lt;/h2&gt;&lt;p&gt;If you’ve ever wondered what people mean when they talk about “page cache,” “object cache,” or “CDN cache,” this post is for you. These are the three main caching layers that make a massive difference when scaling WordPress, WooCommerce, or any other CMS.&lt;/p&gt;&#10;&lt;h2 id="what-is-page-caching"&gt;What is Page Caching?&#10;&lt;/h2&gt;&lt;p&gt;Page caching (also called &lt;strong&gt;full-page caching&lt;/strong&gt; or &lt;strong&gt;HTML caching&lt;/strong&gt;) is exactly what it sounds like: the entire rendered HTML page is saved as a static file.&lt;/p&gt;&#10;&lt;p&gt;With a truly static site (plain HTML + CSS + JS), there’s no need for page caching because every file is already static.&#10;But with a CMS like WordPress, every request normally triggers PHP → theme → plugins → database queries → HTML output. That process eats CPU and takes time.&lt;/p&gt;&#10;&lt;p&gt;Full-page caching shortcuts all of that. The first visitor triggers the full PHP+MySQL process, the resulting HTML is saved, and every visitor after that gets served the pre-generated static HTML instantly — no PHP, no database queries, almost zero CPU.&lt;/p&gt;&#10;&lt;p&gt;Result: 10–100× lower server load and dramatically faster page loads.&lt;/p&gt;&#10;&lt;h2 id="what-is-object-caching"&gt;What is Object Caching?&#10;&lt;/h2&gt;&lt;p&gt;Object caching stores the results of expensive database queries (or any slow computation) in fast memory (usually Redis or Memcached).&lt;/p&gt;&#10;&lt;p&gt;Think of it as a super-fast middleman between your PHP code and the database.&lt;/p&gt;&#10;&lt;p&gt;Example with WordPress:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;WordPress needs the list of published posts → it asks MySQL.&lt;/li&gt;&#10;&lt;li&gt;First request: MySQL does the work, returns the data, object cache saves it in RAM.&lt;/li&gt;&#10;&lt;li&gt;Next 10 000 requests: object cache instantly returns the same data from memory → MySQL sleeps peacefully.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Object cache is smart — it automatically invalidates itself when data changes (e.g., you publish a new post).&lt;/p&gt;&#10;&lt;p&gt;Why you still need it even with full-page caching:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Logged-in users (including the WordPress dashboard, WooCommerce account pages, etc.) can’t be fully cached for everyone.&lt;/li&gt;&#10;&lt;li&gt;Those pages still hit PHP and MySQL → object cache makes them tolerable instead of painfully slow.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Object cache + full-page cache together is the classic high-traffic combo.&lt;/p&gt;&#10;&lt;h2 id="what-is-cdn-caching"&gt;What is CDN Caching?&#10;&lt;/h2&gt;&lt;p&gt;A CDN (Content Delivery Network) copies your static assets (CSS, JS, images, fonts) — and optionally your full HTML pages — to “PoP” servers all over the world.&lt;/p&gt;&#10;&lt;p&gt;Without a CDN: a visitor in Japan downloads everything from your origin server in, say, Brazil → high latency.&lt;/p&gt;&#10;&lt;p&gt;With a CDN:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Static files are served from the closest PoP (often &amp;lt; 30 ms away).&lt;/li&gt;&#10;&lt;li&gt;If you also enable full-page caching on the CDN, the entire HTML page is served from that nearby PoP too → the origin server is never touched for cached pages.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This is why some sites load instantly from anywhere on the planet.&lt;/p&gt;&#10;&lt;h2 id="real-world-example-wordpress-traffic-flow"&gt;Real-World Example: WordPress Traffic Flow&#10;&lt;/h2&gt;&lt;h3 id="no-caching-at-all"&gt;No caching at all&#10;&lt;/h3&gt;&lt;p&gt;Visitor → Web server → PHP → dozens of plugin files → MySQL queries → HTML → visitor&#10;→ High CPU, slow TTFB, easily hits resource limits.&lt;/p&gt;&#10;&lt;h3 id="with-full-page-caching-only"&gt;With full-page caching only&#10;&lt;/h3&gt;&lt;p&gt;First visitor: same slow path as above (but the HTML is saved).&#10;Next 10 000 visitors: Web server instantly serves the pre-built HTML → almost zero CPU.&lt;/p&gt;&#10;&lt;h3 id="with-object-caching-only"&gt;With object caching only&#10;&lt;/h3&gt;&lt;p&gt;Every request still runs PHP + plugins, but database queries are answered from RAM instead of disk → faster than no cache, but still heavy.&lt;/p&gt;&#10;&lt;h3 id="with-full-page-cache--object-cache"&gt;With full-page cache + object cache&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Anonymous visitors → static HTML (super fast, almost no load)&lt;/li&gt;&#10;&lt;li&gt;Logged-in users → PHP runs, but object cache makes DB queries instant → manageable load&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="add-cdn-with-full-page-caching-on-top"&gt;Add CDN with full-page caching on top&#10;&lt;/h3&gt;&lt;p&gt;Even the static HTML is now served from edge locations worldwide. Your origin server can basically take a nap until something actually needs PHP (e.g., form submissions, cache invalidation).&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&#10;&lt;/h2&gt;&lt;p&gt;Here’s the hierarchy from most impactful to least (for most CMS sites):&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Full-page caching on the CDN&lt;/strong&gt; → fastest for visitors, scales to millions of hits with almost zero origin load.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Full-page caching on the origin&lt;/strong&gt; → still massive win if you can’t cache on the CDN.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Object caching (Redis/Memcached)&lt;/strong&gt; → mandatory for logged-in users, WooCommerce, dashboards, etc.&lt;/li&gt;&#10;&lt;li&gt;Everything else (OPcache, browser cache, etc.) → nice to have, usually enabled by default.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;If you only do one thing: enable proper full-page caching (and push it to your CDN if possible).&#10;If you have logged-in traffic or a shop: add Redis/Memcached object caching.&lt;/p&gt;&#10;&lt;p&gt;That’s it — the three caching layers that power basically every high-traffic WordPress site on the planet.&lt;/p&gt;&#10;&lt;p&gt;Hope this cleared things up!&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading! 😊&lt;/p&gt;&#10;</description></item></channel></rss>