<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ubuntu Archives - MASSIVE News</title>
	<atom:link href="https://massive.news/tag/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>https://massive.news/tag/ubuntu/</link>
	<description>Progressive Mix of World News and Propaganda</description>
	<lastBuildDate>Thu, 14 May 2026 20:00:23 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://massive.news/wp-content/uploads/2024/08/m-150x150.jpg</url>
	<title>Ubuntu Archives - MASSIVE News</title>
	<link>https://massive.news/tag/ubuntu/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Linux Server Hardening: 11 Steps to Secure a Production VPS</title>
		<link>https://massive.news/linux-server-hardening-11-steps-to-secure-a-production-vps/</link>
		
		<dc:creator><![CDATA[wiredgorilla]]></dc:creator>
		<pubDate>Thu, 14 May 2026 20:00:03 +0000</pubDate>
				<category><![CDATA[Technology and Science]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[AlmaLinux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[BASIC]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[Crash]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Environment]]></category>
		<category><![CDATA[exploits]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[full]]></category>
		<category><![CDATA[hackers]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux Commands]]></category>
		<category><![CDATA[Linux Distros]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[means]]></category>
		<category><![CDATA[Monitors]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[name]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Policy]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Server Management]]></category>
		<category><![CDATA[Space]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Surface]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[true]]></category>
		<category><![CDATA[tuning]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[universal]]></category>
		<category><![CDATA[vulnerabilities]]></category>
		<category><![CDATA[WHO]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[X]]></category>
		<category><![CDATA[yes]]></category>
		<guid isPermaLink="false">https://massive.news/linux-server-hardening-11-steps-to-secure-a-production-vps/</guid>

					<description><![CDATA[<p>Almost as soon as you deploy a server on the internet, it is under attack. Within...</p>
<p>The post <a href="https://massive.news/linux-server-hardening-11-steps-to-secure-a-production-vps/">Linux Server Hardening: 11 Steps to Secure a Production VPS</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="video-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/K4YOTAI5IeI" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
<p>Almost as soon as you deploy a server on the internet, <strong>it is under attack.</strong></p>
<p><cms-inline-toc tocs="[{&quot;id&quot;:&quot;#why-a-fresh-linux-vps-is-a-target-for-hackers&quot;,&quot;name&quot;:&quot;Why a Fresh Linux VPS Is a Target for Hackers&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#what-does-the-attack-surface-mean&quot;,&quot;name&quot;:&quot;What Does the u201cAttack Surfaceu201d Mean?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#the-swiss-cheese-model-of-security&quot;,&quot;name&quot;:&quot;The Swiss Cheese Model of Security&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#how-to-harden-a-linux-server&quot;,&quot;name&quot;:&quot;How to Harden a Linux Server&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#step-1-disable-root-login-and-create-a-sudo-user&quot;,&quot;name&quot;:&quot;Step 1: Disable Root Login and Create a Sudo User&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-2-switch-to-ssh-key-authentication-and-disable-password-login&quot;,&quot;name&quot;:&quot;Step 2: Switch to SSH Key Authentication and Disable Password Login&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-3-change-the-default-ssh-port&quot;,&quot;name&quot;:&quot;Step 3: Change the Default SSH Port&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-4-configure-ufw-to-allow-only-what-you-need&quot;,&quot;name&quot;:&quot;Step 4: Configure UFW to Allow Only What You Need&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-5-install-fail2ban-to-block-bruteforce-attacks&quot;,&quot;name&quot;:&quot;Step 5: Install Fail2Ban to Block Brute-Force Attacks&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-6-enable-automatic-security-updates&quot;,&quot;name&quot;:&quot;Step 6: Enable Automatic Security Updates&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-7-remove-unused-packages-and-disable-unnecessary-services&quot;,&quot;name&quot;:&quot;Step 7: Remove Unused Packages and Disable Unnecessary Services&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-8-harden-kernel-parameters-with-sysctl&quot;,&quot;name&quot;:&quot;Step 8: Harden Kernel Parameters with sysctl&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-9-set-strict-file-permissions-and-audit-user-accounts&quot;,&quot;name&quot;:&quot;Step 9: Set Strict File Permissions and Audit User Accounts&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-10-review-mandatory-access-control-apparmor-and-selinux&quot;,&quot;name&quot;:&quot;Step 10: Review Mandatory Access Control (AppArmor and SELinux)&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-11-configure-offserver-backups&quot;,&quot;name&quot;:&quot;Step 11: Configure Off-Server Backups&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#after-action-report&quot;,&quot;name&quot;:&quot;After Action Report&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#frequently-asked-questions&quot;,&quot;name&quot;:&quot;Frequently Asked Questions&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#what-is-linux-server-hardening&quot;,&quot;name&quot;:&quot;What is Linux server hardening?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-long-does-it-take-to-harden-a-linux-server&quot;,&quot;name&quot;:&quot;How long does it take to harden a Linux server?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#should-i-run-hardening-on-an-existing-server-or-only-on-fresh-ones&quot;,&quot;name&quot;:&quot;Should I run hardening on an existing server or only on fresh ones?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#does-changing-the-ssh-port-actually-improve-security&quot;,&quot;name&quot;:&quot;Does changing the SSH port actually improve security?&quot;,&quot;tagName&quot;:&quot;h3&quot;}]"></cms-inline-toc></p>
<p><em>Within seconds, automated bots begin scanning your ports and hammering your SSH login. If you’re using the default settings on your server, then you are more likely to get compromised.</em></p>
<p>While most cloud providers offer a clean slate, those default configurations are built for <strong>convenience</strong>, not <strong>combat</strong>. To truly protect your data, you need to follow industry-standard Linux server security best practices.</p>
<p>Through this guide, you will have a detailed roadmap to secure your VPS with enterprise-grade security.&nbsp;</p>
<h2 class="wp-block-heading" id="why-a-fresh-linux-vps-is-a-target-for-hackers"><strong>Why a Fresh Linux VPS Is a Target for Hackers</strong></h2>
<p>As soon as your cloud provider assigns a public IPv4 address to your server, the clock starts. Security researchers and malicious botnets continuously scan the entire IPv4 address space using tools such as Shodan, Censys, and Zmap.</p>
<p>Honeypot data consistently shows that a new, exposed Linux server will experience its first automated SSH login attempt <strong>within 3 to 5 minutes of going live.</strong></p>
<p>If you leave default settings intact, it isn’t a matter of <em>if</em> you get breached, but <em>when</em>. If you don’t protect your server, an automated script will root your server, deploy a crypto-mining payload, and potentially leave you with a thousand-dollar cloud compute bill overnight.</p>
<h3 class="wp-block-heading" id="what-does-the-attack-surface-mean"><strong>What Does the “Attack Surface” Mean?</strong></h3>
<p>The “attack surface” is the exact combination of open ports, default configurations, and predictable patterns your server exposes to the internet. A fresh VPS usually has:</p>
<ul class="wp-block-list">
<li><strong>Port 22 open to the world:</strong> The universal beacon for SSH brute-force scripts.</li>
<li><strong>Root login enabled:</strong> Giving attackers the ultimate username; they only need to guess the password.</li>
<li><strong>Password authentication is enabled,</strong> allowing unlimited dictionary attacks against your login prompt.</li>
</ul>
<p>If you provision your servers through a control panel like <strong>RunCloud</strong>, much of this attack surface is already minimized for you. But if you are managing a bare-metal VPS yourself, run the commands below to manually lock it down.</p>
<p>However, any one single measure won’t be enough to protect your server; that’s why we recommend following the “Swiss Cheese Model of Security”.</p>
<p><strong><em>Suggested read: </em></strong>10 Security Tips to Secure VPS Server in 2025 [Ultimate Guide]<em>&nbsp;</em></p>
<h2 class="wp-block-heading" id="the-swiss-cheese-model-of-security"><strong>The Swiss Cheese Model of Security</strong></h2>
<p>This model is built on the principle that security should never rely on a single control, as even the best defense has holes, or “slices” of weakness.&nbsp;</p>
<p>In this model, each layer of security (like disabling root login, configuring UFW, enabling Fail2Ban, etc.) is represented by a slice of Swiss cheese. Each slice has holes representing vulnerabilities, misconfigurations, or human error.</p>
<ul class="wp-block-list">
<li><strong>A single slice (one defense)</strong> is easily penetrated if an attacker’s exploit aligns with the hole in that single layer.</li>
<li><strong>Multiple slices stacked together</strong> provide defense-in-depth. While the holes in the first slice (e.g., a custom SSH port) might align with the threat, the second slice (e.g., SSH key authentication) or the third slice (e.g., Fail2Ban) is highly unlikely to have a hole in the exact same spot.</li>
</ul>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps.jpg" alt="The Swiss Cheese Model of Security for Linux Server Hardening" class="wp-image-13931"></figure>
<p>By stacking all 11 steps in this guide, we can ensure that even if one defense fails, the next layer (or the layer after that) will stop the threat, preventing it from reaching your core application.</p>
<p><strong><em>Suggested read: </em></strong>5 Ways to Fix the SSH Connection Refused Error [SOLVED]<em>&nbsp;</em></p>
<h2 class="wp-block-heading" id="how-to-harden-a-linux-server"><strong>How to Harden a Linux Server</strong></h2>
<p>Follow the steps below to protect your Linux server on the internet:</p>
<h3 class="wp-block-heading" id="step-1-disable-root-login-and-create-a-sudo-user"><strong>Step 1: Disable Root Login and Create a Sudo User</strong></h3>
<p>Performing regular maintenance activities on your server as the root user is dangerous – a single typo can destroy your system.</p>
<p>To protect your system, we recommend creating an <em>unprivileged </em>user and granting it administrative rights via sudo.</p>
<p>Connect to your VPS as root, then run:</p>
<pre><code v-pre># Replace 'sysadmin' with your preferred username
adduser sysadmin</code></pre>
<p>You will be prompted to set a password. Make it strong, even though we will disable password logins shortly. Skip the contact information prompts by hitting Enter.</p>
<p>Next, add your new user to the sudo group so you can execute administrative commands:</p>
<pre><code v-pre>usermod -aG sudo sysadmin</code></pre>
<p>Verify it works before logging out. Switch to your new user and test sudo:</p>
<pre><code v-pre>su - sysadmin
sudo ls -la /root</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="594" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps.png" alt class="wp-image-13914"></figure>
<p><em>If you are prompted for your password and can successfully see the contents of the root directory, your sudo user is ready.</em></p>
<p>With RunCloud, you can manage users and permissions for your Linux server directly from the web dashboard, without SSHing into the server.&nbsp;</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="477" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-1.png" alt class="wp-image-13915"></figure>
<h3 class="wp-block-heading" id="step-2-switch-to-ssh-key-authentication-and-disable-password-login"><strong>Step 2: Switch to SSH Key Authentication and Disable Password Login</strong></h3>
<p>A secure password is hard to remember, and a weak password can be cracked immediately. That’s why all cybersecurity experts agree that <strong>cryptographic keys</strong> are a better replacement for your username/password based logins.</p>
<p>In this step, we are going to replace password authentication with an <strong>ed25519 SSH key pair</strong> (which is faster and more secure than older RSA keys).</p>
<h4 class="wp-block-heading" id="generate-your-key-pair-locally"><strong>Generate your key pair locally</strong></h4>
<p><strong>Do not run this on your VPS.</strong> Open a new terminal on your <em>local computer</em> (your Mac, Windows, or local Linux machine):</p>
<pre><code v-pre>ssh-keygen -t ed25519 -C "[email&nbsp;protected]"</code></pre>
<p>Hit Enter to save the key to the default location (~/.ssh/id_ed25519). When prompted, you can set a strong passphrase to encrypt the key on your local disk or leave it blank if you don’t want to encrypt it.</p>
<h4 class="wp-block-heading" id="copy-the-public-key-and-lock-down-the-sshdconfig"><strong>Copy the public key and lock down the sshd_config</strong></h4>
<p>Still on your <strong>local computer</strong>, copy the public key to your VPS, targeting your new sudo user:</p>
<pre><code v-pre>ssh-copy-id sysadmin@YOUR_VPS_IP</code></pre>
<p>Now, go back to the terminal window connected to your <strong>VPS</strong>. It’s time to edit the SSH daemon configuration to disable password logins and root access permanently.</p>
<pre><code v-pre>sudo nano /etc/ssh/sshd_config</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="504" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-2.png" alt class="wp-image-13916"></figure>
<p>Find the following lines, uncomment them (remove the #), and change their values to match these exactly:</p>
<pre><code v-pre>PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes</code></pre>
<p>Save and exit (CTRL+O, Enter, CTRL+X). <strong>Do not restart the SSH service just yet</strong>; we are going to change the port in the next step.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="783" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-3.png" alt class="wp-image-13917"></figure>
<p><strong><em>Note:</em></strong><em> RunCloud users can </em>add SSH keys to their servers<em> simply by pasting their public key into the RunCloud dashboard, no nano or config editing required.</em></p>
<h3 class="wp-block-heading" id="step-3-change-the-default-ssh-port"><strong>Step 3: Change the Default SSH Port</strong></h3>
<p>Most automated scripts scan for and try to exploit port 22. Moving SSH to a non-standard high port (between 1024 and 65535) won’t stop a targeted attack, but it drops botnet noise by 99%, keeping your auth logs clean and saving CPU cycles.</p>
<p>Open the SSH config file again:</p>
<pre><code v-pre>sudo nano /etc/ssh/sshd_config</code></pre>
<p>Find the line that says #Port 22. Uncomment it and change it to your desired port. For this example, we will use 52222:</p>
<pre><code v-pre>Port 52222</code></pre>
<p>Save and exit.</p>
<p><strong>Warning:</strong> DO NOT restart SSH until we configure the firewall in Step 4, or you will <strong>permanently lock yourself out</strong>.</p>
<h3 class="wp-block-heading" id="step-4-configure-ufw-to-allow-only-what-you-need"><strong>Step 4: Configure UFW to Allow Only What You Need</strong></h3>
<p>Ubuntu and Debian servers use UFW (Uncomplicated Firewall) to manage network connections. To protect your server, we recommend setting a default-deny policy for incoming traffic, allowing outgoing traffic, and explicitly opening only the ports we need.</p>
<p>Run the following commands on your VPS:</p>
<pre><code v-pre># Deny all incoming traffic by default
sudo ufw default deny incoming


# Allow all outgoing traffic by default
sudo ufw default allow outgoing


# Allow your NEW custom SSH port (crucial!)
sudo ufw allow 52222/tcp


# Allow HTTP and HTTPS if you are hosting web apps
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp</code></pre>
<p>Review your staged rules:</p>
<pre><code v-pre>sudo ufw show added</code></pre>
<p>If everything looks correct, you can enable the firewall by running the following command:</p>
<pre><code v-pre>sudo ufw enable</code></pre>
<p>Once the firewall is enabled, any new traffic entering or leaving your server will be inspected and filtered according to the rules we configured above. If any application has already established a connection, it won’t be terminated, but if the application attempts to establish a new connection, it will be blocked by the firewall.&nbsp;</p>
<p>Now that the firewall allows traffic on your custom port, we can safely apply the SSH changes by running the following command:</p>
<pre><code v-pre>sudo systemctl restart ssh</code></pre>
<p><strong>Testing phase:</strong> DO NOT CLOSE your current terminal session. Open a new terminal on your local machine and test your new setup:</p>
<pre><code v-pre>ssh -p 52222 sysadmin@YOUR_VPS_IP</code></pre>
<p>If you successfully connect using your SSH key, you can close the original root session.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="668" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-4.png" alt class="wp-image-13918"></figure>
<p><strong><em>Note:</em></strong><em> If configuring firewalls over CLI makes you nervous, RunCloud’s Firewall Manager lets you set, preview, and deploy port rules and IP whitelists directly from the dashboard without touching the terminal.</em></p>
<p><strong><em>Suggested read: </em></strong>Enable Zero-Trust SSH with Cloudflare on Windows, Mac, Linux, and ChromeOS<em>&nbsp;</em></p>
<h3 class="wp-block-heading" id="step-5-install-fail2ban-to-block-bruteforce-attacks"><strong>Step 5: Install Fail2Ban to Block Brute-Force Attacks</strong></h3>
<p>Now that we have changed the SSH port and disabled password authentication, the server is relatively secure, but automated bots will still try to break in by sending random login attempts with incorrect credentials.</p>
<p>Fail2Ban monitors your log files and dynamically updates your firewall to block IP addresses that show malicious behavior.</p>
<p>To configure this on your Linux server, you can install the Fail2Ban package using the following command:</p>
<pre><code v-pre>sudo apt update &amp;&amp; sudo apt install fail2ban -y</code></pre>
<p>After installing it, you need to create a set of rules (called “jails”) for your server. We strongly recommend that you don’t edit the default jail.conf file, as package updates will overwrite it. Instead, you should copy it to create a new file called jail.local. You can do this on a Linux server using the following command:</p>
<pre><code v-pre>sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local</code></pre>
<p>After creating the file, you can edit your local configuration:</p>
<pre><code v-pre>sudo nano /etc/fail2ban/jail.local</code></pre>
<p>Scroll down to the <code v-pre>[sshd]</code> block. You need to tell Fail2Ban that you are using a custom port, and explicitly enable the jail. Modify the block to look like this:</p>
<pre><code v-pre>[sshd]
enabled = true
port    = 52222
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="625" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-5.png" alt class="wp-image-13919"></figure>
<p>Run the following commands to save and exit, then start and enable the service:</p>
<pre><code v-pre>sudo systemctl enable fail2ban
sudo systemctl restart fail2ban</code></pre>
<p>After creating the service, you can verify that your SSH jail is active using the following command:</p>
<pre><code v-pre>sudo fail2ban-client status sshd</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="456" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-6.png" alt class="wp-image-13920"></figure>
<p>In the screenshot above, we can see the list of IP addresses that Fail2Ban has banned from accessing our server.</p>
<p><em>By completing these 5 steps, you have eliminated the low-hanging fruit that compromises 95% of fresh Linux setups.&nbsp;</em></p>
<p><strong>Note:</strong> Getting Fail2Ban thresholds wrong in jail.local often results in banning yourself or failing to trigger on real attacks. That’s why RunCloud ships with Fail2Ban pre-configured for web and SSH traffic.&nbsp;</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="591" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-7.png" alt class="wp-image-13921"></figure>
<p><strong><em>Suggested read: </em></strong>How to Use Cloudflare Firewall Rules to Protect Your Web Application<em>&nbsp;</em></p>
<h3 class="wp-block-heading" id="step-6-enable-automatic-security-updates"><strong>Step 6: Enable Automatic Security Updates</strong></h3>
<p>A hardened server is only secure until the next CVE is published. If you are managing more than one server, you should not want to manually run apt upgrade whenever a vulnerability is discovered in OpenSSL or your kernel. Enable unattended-upgrades to automatically install critical security patches in the background.</p>
<p>To do this, first you need to install the necessary packages using the following command:</p>
<pre><code v-pre>sudo apt update &amp;&amp; sudo apt install unattended-upgrades apt-listchanges -y</code></pre>
<p>After installing the services, you can enable the service via the interactive prompt:</p>
<pre><code v-pre>sudo dpkg-reconfigure -plow unattended-upgrades</code></pre>
<p><em>Select </em><strong><em>Yes</em></strong><em> when prompted to automatically download and install stable updates.</em></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="618" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-8.png" alt class="wp-image-13922"></figure>
<p>After configuring it, check the configuration file to verify that it has been activated successfully using the following command:</p>
<pre><code v-pre>cat /etc/apt/apt.conf.d/20auto-upgrades</code></pre>
<p>When you run the above command, you should see <code v-pre>APT::Periodic::Unattended-Upgrade "1";</code> in the output.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="326" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-9.png" alt class="wp-image-13923"></figure>
<h3 class="wp-block-heading" id="step-7-remove-unused-packages-and-disable-unnecessary-services"><strong>Step 7: Remove Unused Packages and Disable Unnecessary Services</strong></h3>
<p>Every service running on your server is a potential entry point for hackers. If you aren’t using a service or application, you can turn it off to protect your server and conserve resources.</p>
<p>To do this, first, we will audit what is actively listening on your server’s network interfaces by using the following command:</p>
<pre><code v-pre>sudo ss -tulpn</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="390" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-10.png" alt class="wp-image-13924"></figure>
<p>If you see any services that you don’t want, then you can stop and disable them so they don’t start on reboot:</p>
<pre><code v-pre>sudo systemctl stop &lt;name&gt;
sudo systemctl disable &lt;name&gt;</code></pre>
<p>In the above commands, replace the &lt;name&gt; with the actual name of the service that you want to disable.&nbsp;</p>
<p>Next, purge any orphaned packages and dependencies that came pre-installed on your provider’s OS image but which aren’t needed anymore:</p>
<pre><code v-pre>sudo apt autoremove --purge -y</code></pre>
<h3 class="wp-block-heading" id="step-8-harden-kernel-parameters-with-sysctl"><strong>Step 8: Harden Kernel Parameters with sysctl</strong></h3>
<p>By default, the Linux kernel uses networking parameters optimized for broad compatibility rather than strict security. When you deploy your server on the internet, it will be constantly bombarded with hundreds of attacks that try to exploit these compatibility features.&nbsp;</p>
<p>But you can mitigate several types of network attacks (like SYN floods and IP spoofing) by tweaking <code v-pre>sysctl.conf</code>. To do this, you can open the configuration file using the following command:</p>
<pre><code v-pre>sudo nano /etc/sysctl.conf</code></pre>
<p>In this file, we will disable certain features by appending the following lines to the bottom of the file:</p>
<pre><code v-pre># Protect against SYN flood attacks
net.ipv4.tcp_syncookies = 1


# Ignore ICMP broadcast requests (prevent smurf attacks)
net.ipv4.icmp_echo_ignore_broadcasts = 1


# Disable ICMP redirects (prevent man-in-the-middle routing attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0


# Log spoofed packets, source routed packets, and redirect packets
net.ipv4.conf.all.log_martians = 1</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="552" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-11.png" alt class="wp-image-13925"></figure>
<p>After editing the file, you can save and exit the file editor (CTRL+O, Enter, CTRL+X). After that, you can apply the changes immediately without rebooting by running the following command:</p>
<pre><code v-pre>sudo sysctl -p</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="590" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-12.png" alt class="wp-image-13926"></figure>
<p><strong><em>Suggested read: </em></strong>16 Best Linux Distros in 2025<em>&nbsp;</em></p>
<h3 class="wp-block-heading" id="step-9-set-strict-file-permissions-and-audit-user-accounts"><strong>Step 9: Set Strict File Permissions and Audit User Accounts</strong></h3>
<p>If an attacker compromises a system, they will try to either create hidden backdoor users, or leave files with wide-open permissions. There are several steps you can take to ensure this isn’t the case on your server.&nbsp;First, you can audit your user accounts to ensure only root has a User ID (UID) of 0. Run this command to print any user with root-level privileges:</p>
<pre><code v-pre>awk -F: '($3 == "0") {print}' /etc/passwd</code></pre>
<p>This should output exactly one line: <code v-pre>root:x:0:0:root:/root:/bin/bash</code>. If you see any other user here, then it is possible that your server is compromised.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="990" height="358" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-13.png" alt class="wp-image-13927"></figure>
<p>Next, verify that no users have empty passwords:</p>
<pre><code v-pre>sudo awk -F: '($2 == "") {print}' /etc/shadow</code></pre>
<p><em>This should return no output.</em></p>
<p>Finally, find and review any world-writable directories (directories anyone can write to) that don’t have the “sticky bit” set (which prevents users from deleting each other’s files):</p>
<pre><code v-pre>sudo find / -type d -perm -0002 -a ! -perm -1000 -print 2&gt;/dev/null</code></pre>
<p>If your server is serving multiple websites, then the above command will probably return a long list of directories. You need to review this list and, if you find any rogue directories, investigate them immediately and restrict their permissions using chmod 755.</p>
<h3 class="wp-block-heading" id="step-10-review-mandatory-access-control-apparmor-and-selinux"><strong>Step 10: Review Mandatory Access Control (AppArmor and SELinux)</strong></h3>
<p>AppArmor (on Ubuntu/Debian) and SELinux (on RHEL/AlmaLinux) are <strong>Mandatory Access Control (MAC)</strong> systems. They act as a high-level security guard built directly into the Linux kernel. While standard file permissions (chmod) control who can see a file, MAC systems control which specific <strong>programs</strong> are allowed to do what.</p>
<p>In a standard setup, if a hacker exploits a vulnerability in a web server such as NGINX and gains “root” access, they can theoretically access every file on your server.</p>
<p>With AppArmor or SELinux active, the program is confined to a “sandbox.” Even if NGINX is compromised, the MAC system detects that NGINX is attempting to access sensitive system files (such as/etc/shadow) or execute unauthorized commands. Because that behavior isn’t in the program’s predefined “security profile,” the kernel blocks the action instantly, <strong>even if the attacker has root privileges.</strong> It effectively limits the “blast radius” of any potential hack.</p>
<p>You can run the following commands to check the configuration of these systems on your server:</p>
<ul class="wp-block-list">
<li><strong>On Ubuntu/Debian (AppArmor):</strong></li>
</ul>
<pre><code v-pre>sudo aa-status</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="540" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-14.png" alt class="wp-image-13928"></figure>
<ul class="wp-block-list">
<li><strong>On RHEL/Alma/Rocky:</strong></li>
</ul>
<pre><code v-pre>sestatus</code></pre>
<p>Manually configuring MAC systems is tricky, and beyond the scope of this article. It requires writing deep-level security profiles that define every single file, port, and network socket a program is allowed to touch. One small mistake in a profile can cause your database to crash or prevent your website from loading, leading to hours of frustrating troubleshooting.</p>
<p>The good news is that if you are using <strong>RunCloud</strong>, you don’t need to lift a finger.</p>
<p>RunCloud servers are engineered to be secure out of the box. The platform automatically configures and optimizes these security layers during server provisioning. Your server is hardened the moment it connects to the RunCloud panel, allowing you to focus on your applications while RunCloud handles the complex kernel security in the background.</p>
<h3 class="wp-block-heading" id="step-11-configure-offserver-backups"><strong>Step 11: Configure Off-Server Backups</strong></h3>
<p>Hardening your server reduces the risk of a hack, but it cannot protect you against hardware failure, a data center fire, or an accidental <code v-pre>rm -rf /</code> command. Off-server backups ensure that even if your entire VPS is deleted, your business can be restored in minutes.</p>
<p>There are several ways to handle backups, each with its own pros and cons:</p>
<ol class="wp-block-list">
<li><strong>Disk-Level Snapshots:</strong> Taking a full image of your server via your provider (like DigitalOcean or AWS). These are easy but often expensive, and they’re hard to move between providers.</li>
<li><strong>Application Plugins:</strong> Using WordPress plugins like UpdraftPlus. These are user-friendly, but they can slow down your site because they use your server’s PHP resources to compress files.</li>
<li><strong>Manual Scripting:</strong> Using Linux tools to manually move data. If you choose to do this manually, you must manage three distinct parts: the database, the files, and the transport.&nbsp;
<ul class="wp-block-list">
<li><strong>Security:</strong> Manual rclone or script configs often store your Cloud API keys or Database passwords in <strong>plaintext</strong> on the server. If a hacker gets in, they now have your backup keys too.</li>
<li><strong>Resource-Heavy:</strong> Compressing large folders (tar) and dumping databases every night causes high CPU and Disk I/O spikes, which can make your website sluggish during the backup window.</li>
<li><strong>Reliability:</strong> If the script fails, you won’t know until you try to restore and find out that the files are empty.</li>
</ul>
</li>
</ol>
<p>If you are using <strong>RunCloud</strong>, you don’t need to deal with any of this.</p>
<p>RunCloud uses Incremental Backups, which is a far superior technology. Instead of zipping your entire site every night (which is slow and uses a lot of disk space), RunCloud only identifies the specific data that changed – and syncs just that.</p>
<ul class="wp-block-list">
<li><strong>Fast &amp; Efficient:</strong> Because it only moves “changes,” backups finish in seconds rather than minutes.</li>
<li><strong>Zero Resource Lag:</strong> It doesn’t put a heavy load on your server, keeping your website fast even during a backup.</li>
<li><strong>Encrypted &amp; Secure:</strong> Your S3 or Backblaze credentials are stored in RunCloud’s encrypted vault<strong>.</strong></li>
<li><strong>Backup Notifications: </strong>You can configure the Backup script to notify you via Slack/Email/Discord if the backup fails for any reason.</li>
<li><strong>One-Click Restore:</strong> If something goes wrong, you don’t have to remember complex Linux commands. You just click “Restore” in the dashboard, and RunCloud puts everything back exactly where it belongs.</li>
</ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="627" src="https://massive.news/wp-content/uploads/2026/05/linux-server-hardening-11-steps-to-secure-a-production-vps-15.png" alt="Runcloud automated backups" class="wp-image-13929"></figure>
<h2 class="wp-block-heading" id="after-action-report"><strong>After Action Report</strong></h2>
<p>If you have followed all the steps in this article, your server is now locked down and can withstand a variety of internet attacks. But a hardened server isn’t very useful if it doesn’t host anything. The next step is installing your web stack (NGINX/Apache, PHP, MySQL) and provisioning SSL certificates.</p>
<p>Doing this manually means diving right back into the terminal. After hardening, managing NGINX, PHP-FPM, and SSL still requires SSH for every single configuration change, virtual host creation, and certificate renewal.</p>
<p><strong>RunCloud</strong> manages your NGINX configuration, PHP-FPM tuning, and Let’s Encrypt SSL deployments entirely from a UI, while fully respecting the hardened SSH and firewall configurations you just put in place.&nbsp;</p>
<p>While RunCloud simplifies complex server management tasks, it is designed for developers, agencies, and power users who need more than just a basic cPanel replacement. Once your servers are hardened, RunCloud enables you to scale your operations by offering tools for advanced management:</p>
<ul class="wp-block-list">
<li><strong>Multi-Server Management:</strong> Easily oversee, update, and manage dozens or hundreds of hardened Linux servers from a single dashboard.</li>
<li><strong>Team &amp; Role-Based Permissions:</strong> Delegate server access to team members or clients without sharing SSH keys or root passwords, thanks to granular control over who can manage applications, databases, or backups.</li>
<li><strong>API-Driven Control:</strong> Integrate server and application management into your custom workflows using the RunCloud API, allowing for automated server provisioning and deployment.</li>
</ul>
<p>Start using RunCloud today.</p>
<h2 class="wp-block-heading" id="frequently-asked-questions"><strong>Frequently Asked Questions</strong></h2>
<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1774863435561" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="what-is-linux-server-hardening"><strong>What is Linux server hardening?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>Linux server hardening is the process of reducing a system’s attack surface by patching vulnerabilities, disabling unused services, and implementing strict access controls. Common hardening steps include disabling root SSH access, configuring firewalls like UFW, and enforcing cryptographic key-based authentication.</p>
</div>
</div>
<div id="faq-question-1774863443896" class="rank-math-list-item" readability="9">
<h3 class="rank-math-question " id="how-long-does-it-take-to-harden-a-linux-server"><strong>How long does it take to harden a Linux server?</strong></h3>
<div class="rank-math-answer " readability="13">
<p>Manually executing a basic Linux hardening checklist on a fresh VPS typically takes an experienced sysadmin about 30 minutes. However, advanced hardening procedures like configuring SELinux, setting up intrusion detection systems, and passing compliance audits can take several hours to properly tune.&nbsp;</p>
</div>
</div>
<div id="faq-question-1774863451174" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="should-i-run-hardening-on-an-existing-server-or-only-on-fresh-ones"><strong>Should I run hardening on an existing server or only on fresh ones?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>You should ideally harden a fresh Linux server before it is ever exposed to public internet traffic or connected to your production application stack. Applying strict firewall rules, altering permissions, and modifying SSH configurations on an existing server carries a high risk of breaking active application dependencies or accidentally locking yourself out. If you must harden an existing production server, thoroughly test the new security policies in a staging environment and ensure you have recent, verified off-site backups first.</p>
</div>
</div>
<div id="faq-question-1774863458170" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="does-changing-the-ssh-port-actually-improve-security"><strong>Does changing the SSH port actually improve security?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>Changing the default SSH port from 22 to a non-standard high port is a security-through-obscurity tactic that will not stop a determined, targeted attacker running a full port scan. However, it is still highly recommended because it drops automated botnet brute-force attempts by over 99 percent. This drastically cleans up your system authentication logs, reduces wasted CPU cycles, and prevents tools like Fail2Ban from being overwhelmed by background internet noise.</p>
</div>
</div>
</div>
</div>
<p>The post <a href="https://massive.news/linux-server-hardening-11-steps-to-secure-a-production-vps/">Linux Server Hardening: 11 Steps to Secure a Production VPS</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Enable HTTP/3 on NGINX</title>
		<link>https://massive.news/how-to-enable-http-3-on-nginx/</link>
		
		<dc:creator><![CDATA[wiredgorilla]]></dc:creator>
		<pubDate>Sat, 02 May 2026 09:00:02 +0000</pubDate>
				<category><![CDATA[Technology and Science]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[Crash]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[Environment]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[name]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Open]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[port]]></category>
		<category><![CDATA[reloading]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Server Management]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[X]]></category>
		<category><![CDATA[yes]]></category>
		<guid isPermaLink="false">https://massive.news/how-to-enable-http-3-on-nginx/</guid>

					<description><![CDATA[<p>If you’re running NGINX on a modern server, you’re likely leaving performance on the table by...</p>
<p>The post <a href="https://massive.news/how-to-enable-http-3-on-nginx/">How to Enable HTTP/3 on NGINX</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="video-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/qxj-cfVgtNY" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
<p>If you’re running NGINX on a modern server, you’re likely leaving performance on the table by sticking with HTTP/2.</p>
<p><cms-inline-toc tocs="[{&quot;id&quot;:&quot;#stepbystep-instructions-for-enabling-http3-on-nginx&quot;,&quot;name&quot;:&quot;Step-by-Step Instructions for Enabling HTTP/3 on NGINX&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#step-1-ensure-you-meet-prerequisites-for-http3&quot;,&quot;name&quot;:&quot;Step 1: Ensure You Meet Prerequisites for HTTP/3&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-2-open-udp-port-443-on-your-firewall&quot;,&quot;name&quot;:&quot;Step 2: Open UDP Port 443 on Your Firewall&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-3-add-the-quic-listener-and-http3-directives-to-your-server-block&quot;,&quot;name&quot;:&quot;Step 3: Add the QUIC Listener and HTTP/3 Directives to Your Server Block&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-4-test-and-reload-nginx&quot;,&quot;name&quot;:&quot;Step 4: Test and Reload NGINX&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#step-5-verify-http3-is-active&quot;,&quot;name&quot;:&quot;Step 5: Verify HTTP/3 Is Active&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#enable-http3-without-touching-config-via-runcloud&quot;,&quot;name&quot;:&quot;Enable HTTP/3 Without Touching Config via RunCloud&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#wrapping-up&quot;,&quot;name&quot;:&quot;Wrapping Up&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#faqs&quot;,&quot;name&quot;:&quot;FAQs&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#does-enabling-http3-break-http2-or-http11&quot;,&quot;name&quot;:&quot;Does enabling HTTP/3 break HTTP/2 or HTTP/1.1?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#why-does-curl-http3-work-but-chrome-still-shows-http2&quot;,&quot;name&quot;:&quot;Why does curl u2013http3 work but Chrome still shows HTTP/2?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#is-http3-on-nginx-productionsafe&quot;,&quot;name&quot;:&quot;Is HTTP/3 on NGINX production-safe?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-do-i-disable-http3-on-nginx-if-needed&quot;,&quot;name&quot;:&quot;How do I disable HTTP/3 on NGINX if needed?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#do-i-need-a-special-ssl-certificate-for-http3&quot;,&quot;name&quot;:&quot;Do I need a special SSL certificate for HTTP/3?&quot;,&quot;tagName&quot;:&quot;h3&quot;}]"></cms-inline-toc></p>
<p><em>HTTP/3 changes how browsers connect to your server. It reduces latency, improves performance on unstable networks, and can noticeably speed up real-world page loads – especially for mobile users.</em></p>
<p>The problem is that enabling HTTP/3 on NGINX isn’t straightforward. It requires the right version, specific modules, firewall changes, and careful configuration. One small mistake can stop NGINX from restarting.</p>
<p>In this guide, you’ll learn exactly how to enable HTTP/3 on NGINX step by step – from checking compatibility to verifying that it’s working correctly.</p>
<h2 class="wp-block-heading" id="stepbystep-instructions-for-enabling-http3-on-nginx"><strong>Step-by-Step Instructions for Enabling HTTP/3 on NGINX</strong></h2>
<p>Use the steps below to enable and verify HTTP/3 on your Ubuntu server.</p>
<h3 class="wp-block-heading" id="step-1-ensure-you-meet-prerequisites-for-http3"><strong>Step 1: Ensure You Meet Prerequisites for HTTP/3</strong></h3>
<p>Before enabling HTTP/3 (QUIC) on your Ubuntu server, ensure your environment meets the prerequisites. Since HTTP/3 works over UDP rather than TCP, your underlying web server, network firewall, and encryption standards must support it.</p>
<h4 class="wp-block-heading" id="nginx-version-supports-http3"><strong>NGINX Version Supports HTTP/3</strong></h4>
<p>The most important requirement for enabling HTTP/3 is having a compatible NGINX version. According to the official NGINX QUIC documentation, support for QUIC and HTTP/3 was officially introduced in <strong>NGINX version 1.25.0</strong>. In these newer releases, the required ngx_http_v3_module is included in the official Linux binary packages by default.</p>
<p><strong>How to Check Your Current Version:</strong> Run the following command to check your NGINX version and its compiled modules:</p>
<pre><code v-pre>nginx -V 2&gt;&amp;1 | grep --color -- --with-http_v3_module</code></pre>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="588" src="https://massive.news/wp-content/uploads/2026/05/how-to-enable-http-3-on-nginx.webp" alt="nginx server compile flags" class="wp-image-14014"></figure>
<p>Look for <code v-pre>nginx version: nginx/1.25.0</code> (or higher) and ensure that <code v-pre>--with-http_v3_module</code> is present in the configure arguments.</p>
<p>If your Ubuntu repository ships older “stable” releases (like 1.18.x or 1.24.x) that do not include HTTP/3 support out of the box. Then you can install the <strong>Mainline</strong> version from the official NGINX repositories.</p>
<p>Run the following commands to install the necessary dependencies:</p>
<ol class="wp-block-list">
<li><strong>Install prerequisite packages:</strong></li>
</ol>
<pre><code v-pre>sudo apt update
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring</code></pre>
<ol start="2" class="wp-block-list">
<li><strong>Import the official NGINX GPG signing key:</strong></li>
</ol>
<pre><code v-pre>curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &gt;/dev/null</code></pre>
<ol start="3" class="wp-block-list">
<li><strong>Add the NGINX Mainline repository for Ubuntu:</strong></li>
</ol>
<pre><code v-pre>echo "deb[signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] 
http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" 
| sudo tee /etc/apt/sources.list.d/nginx.list</code></pre>
<ol start="4" class="wp-block-list">
<li><strong>Prioritize NGINX packages (APT Pinning):</strong> This ensures Ubuntu prioritizes the official NGINX repository over its own default repositories.</li>
</ol>
<pre><code v-pre>echo -e "Package: *nPin: origin nginx.orgnPin-Priority: 900n" | sudo tee /etc/apt/preferences.d/99nginx</code></pre>
<ol start="5" class="wp-block-list">
<li><strong>Install the latest NGINX version:</strong></li>
</ol>
<pre><code v-pre>sudo apt update
sudo apt install nginx</code></pre>
<p><strong><em>Suggested read: </em></strong>How to Set Up a Hetzner Server with RunCloud<em>&nbsp;</em></p>
<h4 class="wp-block-heading" id="ssl-certificates-are-configured-http3-requires-tls-13"><strong>SSL Certificates are Configured (HTTP/3 Requires TLS 1.3)</strong></h4>
<p>Unlike older HTTP versions, where HTTPS was a secondary layer, <strong>HTTP/3 inherently requires encryption via QUIC</strong>. You cannot run HTTP/3 over unencrypted http:// connections. Additionally, the QUIC protocol mandates the use of <strong>TLS 1.3</strong> to enable faster 0-RTT (Zero Round Trip Time) handshakes and better security.</p>
<p>Before proceeding, you must ensure:</p>
<ol class="wp-block-list">
<li><strong>You have a valid domain name pointing</strong> to your Ubuntu server’s IP address.</li>
<li><strong>An SSL/TLS Certificate is configured.</strong> A free certificate from Let’s Encrypt (using Certbot) is perfect for this.</li>
<li><strong>TLS 1.3 is enabled in your config.</strong> Verify that your existing NGINX server block contains TLSv1.3 in the ssl_protocols directive.</li>
</ol>
<p>Your current HTTPS block should look something like this before adding HTTP/3:</p>
<pre><code v-pre>server {
    listen 443 ssl;
    server_name example.com;


    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;


    # TLS 1.3 MUST be included for QUIC/HTTP/3 to function
    ssl_protocols TLSv1.2 TLSv1.3;
}</code></pre>
<h4 class="wp-block-heading" id="root-or-sudo-access-to-edit-nginx-config"><strong>Root or Sudo Access to Edit NGINX Config</strong></h4>
<p>Finally, you will need <strong>root or sudo access</strong> to your Ubuntu server. Upgrading to HTTP/3 requires modifying core NGINX configuration files, tweaking firewall rules, and restarting system services.</p>
<h3 class="wp-block-heading" id="step-2-open-udp-port-443-on-your-firewall"><strong>Step 2: Open UDP Port 443 on Your Firewall</strong></h3>
<p>Unlike HTTP/1.1 and HTTP/2 which rely on TCP, HTTP/3 uses the QUIC protocol, which operates entirely over <strong>UDP</strong>. If you don’t explicitly open UDP port 443 on your firewall, client requests will never reach your NGINX HTTP/3 listener, and browsers will silently downgrade back to HTTP/2 over TCP.</p>
<h4 class="wp-block-heading" id="ufw-ubuntu"><strong>UFW (Ubuntu)</strong></h4>
<p>If you are using Uncomplicated Firewall (UFW), which comes standard on Ubuntu, simply run:</p>
<pre><code v-pre>sudo ufw allow 443/udp
sudo ufw reload</code></pre>
<h4 class="wp-block-heading" id="iptables"><strong>iptables</strong></h4>
<p>If you manage your firewall directly using <code v-pre>iptables</code>, run the following to append the UDP rule:</p>
<pre><code v-pre>sudo iptables -A INPUT -p udp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT</code></pre>
<p>After making the changes, you need to save your iptables rules using <code v-pre>netfilter-persistent save</code> or <code v-pre>iptables-save</code>, depending on your server setup</p>
<h4 class="wp-block-heading" id="cloud-firewall-hetzner-gcp-digitalocean"><strong>Cloud Firewall (Hetzner, GCP, DigitalOcean)</strong></h4>
<p>If your server is hosted on a cloud provider, local firewall rules (UFW/iptables) are often overridden or supplemented by cloud-level security groups. The exact steps will vary depending on your cloud provider:</p>
<ul class="wp-block-list">
<li><strong>Hetzner Cloud:</strong> Go to your server’s “Firewalls” tab and add an Inbound rule for Protocol: UDP, Port: 443.</li>
<li><strong>Google Cloud Platform (GCP):</strong> Go to VPC Network &gt; Firewall. Create a new ingress rule targeting your instance, select UDP, and specify port 443.</li>
<li><strong>DigitalOcean:</strong> Navigate to Networking &gt; Firewalls. Add an Inbound Rule for Custom UDP on port 443.</li>
</ul>
<p><strong><em>Pro Tip:</em></strong><em> If you are using RunCloud to manage your infrastructure, our official server setup guides for providers like </em>Hetzner <em>and </em>GCP <em>cover this firewall step in great detail.</em></p>
<h3 class="wp-block-heading" id="step-3-add-the-quic-listener-and-http3-directives-to-your-server-block"><strong>Step 3: Add the QUIC Listener and HTTP/3 Directives to Your Server Block</strong></h3>
<p>Now it’s time to tell NGINX to actually listen for QUIC traffic and advertise HTTP/3 capabilities to the browser.</p>
<p>Open your website’s NGINX configuration file (e.g., <code v-pre>sudo nano /etc/nginx/conf.d/example.com.conf</code> or <code v-pre>/etc/nginx/sites-available/default</code>).</p>
<p>Here is a complete, copy-paste-ready server block configured for HTTP/3:</p>
<pre><code v-pre>server {
    # 1. Standard TCP listener for HTTP/1.1 and HTTP/2 (Fallback)
    listen 443 ssl;
    
    # 2. UDP listener for QUIC and HTTP/3
    listen 443 quic reuseport;


    server_name example.com www.example.com;


    # 3. SSL/TLS Certificates
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;


    # 4. Enable TLS 1.3 (Required for HTTP/3)
    ssl_protocols TLSv1.2 TLSv1.3;


    # 5. Core HTTP/3 Directives
    http3 on;
    quic_retry on;
    ssl_early_data on;


    # 6. Advertise HTTP/3 to clients via the Alt-Svc header
    add_header Alt-Svc 'h3=":443"; ma=86400' always;


    # The rest of your location blocks go here...
    location / {
        try_files $uri $uri/ =404;
    }
}</code></pre>
<p>Each directive below controls a specific part of how HTTP/3 works in NGINX. Here’s what each one does and why it matters.</p>
<p><code v-pre><strong>listen 443 quic reuseport;</strong><br /></code>Tells NGINX to listen for UDP traffic on port 443 and distributes the processing load across multiple worker processes.</p>
<p><code v-pre><strong>http3 on;</strong><br /></code>enables the HTTP/3 protocol decoding for the current server block.</p>
<p><code v-pre><strong>ssl_protocols TLSv1.3;</strong><br /></code>Configures the use of TLS 1.3, the strict encryption standard required by the QUIC protocol.</p>
<p><code v-pre><strong>quic_retry on;</strong><br /></code>Defends against UDP spoofing attacks by requiring clients to validate their IP address during the handshake.</p>
<p><code v-pre><strong>ssl_early_data on;</strong><br /></code>Enables 0-RTT (Zero Round Trip Time), allowing returning clients to resume encrypted connections instantly without handshake delays.</p>
<p><code v-pre><strong>add_header Alt-Svc 'h3=":443"; ma=86400' always;</strong><br /></code>Tells connecting web browsers, “Hey! I support HTTP/3 on port 443, remember this for the next 86,400 seconds (1 day).”</p>
<p>If you host <strong>multiple websites</strong> (virtual hosts) on the same NGINX server, you need to be careful with the reuseport parameter. <strong>You can only define </strong><strong>reuseport</strong><strong> once per IP and port combination.</strong></p>
<p>For your primary website, use: listen 443 quic reuseport;</p>
<p>For all <strong>other</strong> websites on the same server, omit reuseport: listen 443 quic; If you put reuseport in multiple server blocks, NGINX will throw an error and refuse to start.</p>
<p><strong><em>Suggested read: </em></strong>How to Set Up a Google Cloud Server to Host Your Websites<em>&nbsp;</em></p>
<h3 class="wp-block-heading" id="step-4-test-and-reload-nginx"><strong>Step 4: Test and Reload NGINX</strong></h3>
<p>Whenever you alter NGINX configurations, you must test the syntax before applying the changes to prevent your live server from crashing.</p>
<p>Run a configuration test to confirm your changes are valid before reloading NGINX:</p>
<pre><code v-pre>sudo nginx -t</code></pre>
<p>If the output says nginx: configuration file /etc/nginx/nginx.conf test is successful, apply the changes instantly without dropping active connections by reloading NGINX:</p>
<pre><code v-pre>sudo nginx -s reload</code></pre>
<h3 class="wp-block-heading" id="step-5-verify-http3-is-active"><strong>Step 5: Verify HTTP/3 Is Active</strong></h3>
<p>You can use a web-based testing tool like http3check.net to check your setup is working as expected. Simply type your website’s domain name into the search bar and click “Check”. The tool will attempt a QUIC connection from its own servers and confirm whether UDP port 443 is open, TLS 1.3 is functioning, and your NGINX instance is successfully serving HTTP/3.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="632" src="https://massive.news/wp-content/uploads/2026/05/how-to-enable-http-3-on-nginx-1.webp" alt class="wp-image-14015"></figure>
<p><strong><em>Suggested read: </em></strong>How to Fix ERR_SSL_VERSION_or_CIPHER_MISMATCH<em>&nbsp;</em></p>
<h2 class="wp-block-heading" id="enable-http3-without-touching-config-via-runcloud"><strong>Enable HTTP/3 Without Touching Config via RunCloud</strong></h2>
<p>Managing NGINX configurations manually can quickly become a headache, especially as your server scales. One typo in your <code v-pre>nginx.conf</code>, forgetting to open a UDP port, or accidentally duplicating the reuseport directive across multiple server blocks can crash your entire web server.</p>
<p>If you have just completed all the manual steps above, you might be wondering: <em>Is there an easier way to do this for my next server?</em></p>
<p>The answer is ‘<strong>yes</strong>’, and the solution is <strong>RunCloud</strong>.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="https://massive.news/wp-content/uploads/2026/05/how-to-enable-http-3-on-nginx-2.webp" alt="enable http3 in runcloud nginx" class="wp-image-14016"></figure>
<p>With <strong>RunCloud</strong>, you can skip the command line entirely, instead enabling HTTP/3 for each web application directly from your dashboard with a single toggle.</p>
<p><strong>Here’s how RunCloud simplifies the process:</strong></p>
<ul class="wp-block-list">
<li><strong>No SSH Required:</strong> You never have to log in to your server’s terminal to edit configuration files.</li>
<li><strong>No </strong><strong>reuseport</strong><strong> Management:</strong> RunCloud’s automated NGINX stack intelligently handles the listen 443 quic reuseport rule across multiple domains. You never have to worry about conflicting server blocks.</li>
<li><strong>One-Click Toggles:</strong> Simply navigate to your Web Application settings, toggle HTTP/3 on, and RunCloud safely reloads your NGINX server in the background.</li>
</ul>
<p>For more details on how effortlessly this works, check out the official RunCloud documentation on enabling HTTP/3.</p>
<h2 class="wp-block-heading" id="wrapping-up"><strong>Wrapping Up</strong></h2>
<p>In this post, we have discussed the steps required to enable HTTP/3 on an NGINX server. As you can see, the manual process requires several intricate steps: checking NGINX versions, configuring firewalls for UDP port 443, and carefully modifying server block directives.</p>
<p>While the benefits of HTTP/3 are worth the effort, manual configuration is tedious and prone to human error. <strong>You don’t have to do it this way.</strong></p>
<p>You can completely skip the command line and complex configuration files by using <strong>RunCloud</strong>.</p>
<p>RunCloud is a server management dashboard for PHP and web applications. It provides a visual interface for configuring firewalls, managing databases, deploying code via Git, and enabling features like HTTP/3 without editing configuration files.</p>
<p><strong>If you want to avoid manual setup and reduce the risk of configuration errors, </strong>sign up for RunCloud <strong>and enable HTTP/3 in a few clicks.</strong></p>
<h2 class="wp-block-heading" id="faqs"><strong>FAQs</strong></h2>
<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1776770627853" class="rank-math-list-item" readability="9">
<h3 class="rank-math-question " id="does-enabling-http3-break-http2-or-http11"><strong>Does enabling HTTP/3 break HTTP/2 or HTTP/1.1?</strong></h3>
<div class="rank-math-answer " readability="13">
<p>No, enabling HTTP/3 does not break older protocols because it runs on UDP port 443, while HTTP/2 and HTTP/1.1 operate over TCP. Modern web servers and browsers use a “fallback” mechanism that ensures that if a client doesn’t support QUIC (the foundation of HTTP/3), the connection seamlessly reverts to HTTP/2 without the user noticing.</p>
</div>
</div>
<div id="faq-question-1776770635135" class="rank-math-list-item" readability="8.5">
<h3 class="rank-math-question " id="why-does-curl-http3-work-but-chrome-still-shows-http2"><strong>Why does curl –http3 work but Chrome still shows HTTP/2?</strong></h3>
<div class="rank-math-answer " readability="12">
<p>Command-line tools like curl can be forced to use a specific protocol, but Chrome requires the server first to send an Alt-Svc (Alternative Services) header to “discover” that HTTP/3 is available. Because HTTP/3 runs over UDP, Chrome often completes the initial handshake over TCP (HTTP/2) and switches to HTTP/3 only for subsequent requests or after the protocol is cached in the browser’s memory.</p>
</div>
</div>
<div id="faq-question-1776770641265" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="is-http3-on-nginx-productionsafe"><strong>Is HTTP/3 on NGINX production-safe?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>Yes, HTTP/3 is considered production-safe and is officially supported in the NGINX mainline releases, though you should monitor your server’s CPU usage closely. Because QUIC handles encryption and packet loss at the application level rather than the kernel level, it can be more CPU-intensive than HTTP/2, especially during high-traffic spikes.</p>
</div>
</div>
<div id="faq-question-1776770648553" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="how-do-i-disable-http3-on-nginx-if-needed"><strong>How do I disable HTTP/3 on NGINX if needed?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>To disable HTTP/3, simply remove the quic and reuseport parameters from your listen 443 directives, and delete the add_header Alt-Svc line from your configuration file. Once you run nginx -s reload, the server will stop advertising QUIC capabilities and will no longer accept connections over UDP port 443, forcing all traffic back to standard TCP.</p>
</div>
</div>
<div id="faq-question-1776770654979" class="rank-math-list-item" readability="8.5">
<h3 class="rank-math-question " id="do-i-need-a-special-ssl-certificate-for-http3"><strong>Do I need a special SSL certificate for HTTP/3?</strong></h3>
<div class="rank-math-answer " readability="12">
<p>No, your standard SSL/TLS certificate (such as a free Let’s Encrypt certificate) will work perfectly. However, the QUIC protocol explicitly requires <strong>TLS 1.3</strong>, so your NGINX configuration must enable TLS 1.3.</p>
</div>
</div>
</div>
</div>
<p>The post <a href="https://massive.news/how-to-enable-http-3-on-nginx/">How to Enable HTTP/3 on NGINX</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Fix WordPress Memory Exhausted Error Increase PHP Memory</title>
		<link>https://massive.news/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory/</link>
		
		<dc:creator><![CDATA[wiredgorilla]]></dc:creator>
		<pubDate>Mon, 24 Nov 2025 07:00:04 +0000</pubDate>
				<category><![CDATA[Technology and Science]]></category>
		<category><![CDATA[access]]></category>
		<category><![CDATA[AlmaLinux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[commerce]]></category>
		<category><![CDATA[Control Panels]]></category>
		<category><![CDATA[Crash]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Environment]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[full]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[means]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Operations]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Server Management]]></category>
		<category><![CDATA[Space]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[strategy]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[yes]]></category>
		<guid isPermaLink="false">https://massive.news/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory/</guid>

					<description><![CDATA[<p>Have you ever encountered the “memory size exhausted” message on your website? If yes, then you’ll...</p>
<p>The post <a href="https://massive.news/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory/">How to Fix WordPress Memory Exhausted Error Increase PHP Memory</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="video-container"><iframe width="560" height="315" src="https://www.youtube.com/embed/q_bba6GcL-A" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
<p>Have you ever encountered the “<strong>memory size exhausted</strong>” message on your website? If yes, then you’ll probably know that this single issue can bring your entire site to a halt.</p>
<p><cms-inline-toc tocs="[{&quot;id&quot;:&quot;#how-to-check-your-current-php-memory-limit-in-wordpress&quot;,&quot;name&quot;:&quot;How to Check Your Current PHP Memory Limit in WordPress&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#1-using-the-site-health-tool-in-the-wordpress-dashboard&quot;,&quot;name&quot;:&quot;1. Using the Site Health Tool in the WordPress Dashboard&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#2-checking-php-info-or-server-configuration-files&quot;,&quot;name&quot;:&quot;2. Checking PHP Info or Server Configuration Files&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#3-identifying-memory-limit-via-hosting-control-panel-cpanel-runcloud-etc&quot;,&quot;name&quot;:&quot;3. Identifying Memory Limit via Hosting Control Panel (cPanel, RunCloud, etc.)&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-to-fix-the-wordpress-memory-exhausted-error-7-proven-methods&quot;,&quot;name&quot;:&quot;How to Fix the WordPress Memory Exhausted Error (7 Proven Methods)&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#1-increase-php-memory-limit-via-wpconfigphp-file&quot;,&quot;name&quot;:&quot;1. Increase PHP Memory Limit via wp-config.php File&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#2-edit-the-htaccess-file-to-raise-memory-limit&quot;,&quot;name&quot;:&quot;2. Edit the .htaccess File to Raise Memory Limit&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#3-modify-the-phpini-file-on-your-server&quot;,&quot;name&quot;:&quot;3. Modify the php.ini File on Your Server&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#4-use-the-hosting-control-panel-or-the-runcloud-dashboard-to-increase-memory&quot;,&quot;name&quot;:&quot;4. Use the Hosting Control Panel or the RunCloud Dashboard to Increase Memory&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#5-deactivate-heavy-or-poorly-coded-plugins&quot;,&quot;name&quot;:&quot;5. Deactivate Heavy or Poorly Coded Plugins&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#6-optimize-images-and-media-files-to-reduce-memory-usage&quot;,&quot;name&quot;:&quot;6. Optimize Images and Media Files to Reduce Memory Usage&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#7-upgrade-your-hosting-plan-for-higher-php-memory-allocation&quot;,&quot;name&quot;:&quot;7. Upgrade Your Hosting Plan for Higher PHP Memory Allocation&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#wrapping-up-best-practices-to-prevent-the-wordpress-memory-exhaustion-error&quot;,&quot;name&quot;:&quot;Wrapping Up: Best Practices to Prevent the WordPress Memory Exhaustion Error&quot;,&quot;tagName&quot;:&quot;h2&quot;},{&quot;id&quot;:&quot;#faqs-on-wordpress-memory-exhausted-error&quot;,&quot;name&quot;:&quot;FAQs on WordPress Memory Exhausted Error&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-do-i-increase-php-memory-in-wordpress&quot;,&quot;name&quot;:&quot;How do I increase PHP memory in WordPress?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#what-causes-memory-limit-errors-in-wordpress&quot;,&quot;name&quot;:&quot;What causes memory limit errors in WordPress?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#why-does-my-site-crash-when-uploading-images&quot;,&quot;name&quot;:&quot;Why does my site crash when uploading images?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-do-i-find-my-current-php-memory-limit&quot;,&quot;name&quot;:&quot;How do I find my current PHP memory limit?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#can-plugins-cause-memory-exhaustion&quot;,&quot;name&quot;:&quot;Can plugins cause memory exhaustion?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#what-is-the-ideal-php-memory-limit-for-wordpress&quot;,&quot;name&quot;:&quot;What is the ideal PHP memory limit for WordPress?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#how-do-i-fix-fatal-errors-in-wordpress&quot;,&quot;name&quot;:&quot;How do I fix fatal errors in WordPress?&quot;,&quot;tagName&quot;:&quot;h3&quot;},{&quot;id&quot;:&quot;#does-changing-themes-affect-memory-usage&quot;,&quot;name&quot;:&quot;Does changing themes affect memory usage?&quot;,&quot;tagName&quot;:&quot;h3&quot;}]"></cms-inline-toc></p>
<p>If you are seeing this message, don’t panic. It’s one of the most common issues WordPress users face – <strong>and is completely fixable.</strong></p>
<p>This fatal error simply means that a script on your site (usually from a plugin or theme) required more server memory (RAM) than your web hosting environment was configured to provide.</p>
<p><strong>In this guide, we will walk you through everything you need to know to solve the “memory size exhausted” problem for good.</strong></p>
<p>You’ll learn how to check your current <strong>WordPress memory limit</strong> and discover proven methods to increase it, whether by editing the <em>wp-config.php file</em>, the <em>.htaccess</em><strong> </strong>file, or the master <em>php.ini file</em>.</p>
<p><em>Let’s get started!</em></p>
<h2 class="wp-block-heading" id="how-to-check-your-current-php-memory-limit-in-wordpress"><strong>How to Check Your Current PHP Memory Limit in WordPress</strong></h2>
<p>Before you can fix a memory exhausted error, you first need to identify your current limit. There are several ways to do this.&nbsp;</p>
<h3 class="wp-block-heading" id="1-using-the-site-health-tool-in-the-wordpress-dashboard"><strong>1. Using the Site Health Tool in the WordPress Dashboard</strong></h3>
<p>The easiest and safest way for any user to check the PHP memory limit is directly within the WordPress dashboard. WordPress has a built-in “Site Health” tool that reports your website’s configuration and server environment.</p>
<p>To access it:</p>
<ul class="wp-block-list">
<li>Navigate to your WordPress admin area and go to <strong>Tools &gt; Site Health</strong>.</li>
<li>Click on the <strong>“Info”</strong> tab at the top of the page, which will reveal a series of expandable sections.</li>
<li>Click on the <strong>“Server”</strong> dropdown, and you will see a detailed list of your server’s configuration.</li>
<li>Look for the <strong>“PHP memory limit”</strong> entry to see the value configured for your site.</li>
</ul>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="490" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory.png" alt class="wp-image-13619"></figure>
<p><strong><em>Suggested read: </em></strong>How to Fix WordPress High CPU Usage (10 Instant Solutions)</p>
<h3 class="wp-block-heading" id="2-checking-php-info-or-server-configuration-files"><strong>2. Checking PHP Info or Server Configuration Files</strong></h3>
<p>If you want more information or can’t access the WordPress dashboard, you can create a phpinfo file. This method queries the server directly and displays the master PHP configuration.</p>
<p>To do this, you just need to create a new file named <code v-pre>info.php</code> in your website’s root directory using an FTP client or a file manager, and place the following single line of code inside it:</p>
<pre><code v-pre>&lt;?php phpinfo(); ?&gt;</code></pre>
<p>Save the file, then visit <code v-pre>yourwebsite.com/info.php</code> in your browser. You will see a detailed page with all PHP settings; search for memory_limit to find the current value.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="613" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory-1.png" alt="fix WordPress Memory Exhausted in phpinfo" class="wp-image-13620"></figure>
<div class="runcloud-alert" readability="10">
<p><strong>Note:</strong> for security reasons, you <strong>must delete</strong> the info.php file from your server immediately after you are finished, as it exposes sensitive server configuration details.</p>
</div>
<p><strong><em>Suggested read: </em></strong>How to Fix WordPress Stuck in Maintenance Mode? [100% WORKING]</p>
<h3 class="wp-block-heading" id="3-identifying-memory-limit-via-hosting-control-panel-cpanel-runcloud-etc"><strong>3. Identifying Memory Limit via Hosting Control Panel (cPanel, RunCloud, etc.)</strong></h3>
<p>Most modern hosting environments provide a graphical interface to view and manage server settings. In traditional control panels like cPanel, you might find this information under a “MultiPHP INI Editor” or “Select PHP Version” tool.&nbsp;</p>
<p>On a more powerful platform like <strong>RunCloud</strong>, this information is even more accessible and transparent. Simply navigate to your <strong>Web Application &gt; Settings</strong> within the RunCloud dashboard.</p>
<p>Here, you will see your current PHP version and its associated memory limit clearly displayed:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="413" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory-2.png" alt class="wp-image-13621"></figure>
<p><strong><em>Suggested read: </em></strong>How to Fix WordPress Revisions Not Showing [SOLVED]</p>
<h2 class="wp-block-heading" id="how-to-fix-the-wordpress-memory-exhausted-error-7-proven-methods"><strong>How to Fix the WordPress Memory Exhausted Error (7 Proven Methods)</strong></h2>
<p>There are several ways to fix the WordPress Memory Exhausted error, ranging from simple configuration file edits to leveraging your hosting control panel. Let’s explore these methods in detail to help you get your WordPress site back on track.</p>
<h3 class="wp-block-heading" id="1-increase-php-memory-limit-via-wpconfigphp-file"><strong>1. Increase PHP Memory Limit via wp-config.php File</strong></h3>
<p>This is the standard WordPress method for increasing the memory available to your application. The wp-config.php file contains your site’s base configuration and is located in the root directory of your WordPress installation.</p>
<p><em>(Before editing, it is recommended that this file be backed up.)</em></p>
<p>First, you need to open the wp-config.php file either using your FTP client or the <strong>RunCloud File Manager</strong>. In this file, add the following line of code just before the line that says /* That’s all, stop editing! Happy publishing. */:</p>
<pre><code v-pre>define('WP_MEMORY_LIMIT', '256M');</code></pre>
<p>If needed, you can change 256 MB to a higher value, like 512 MB. This command instructs WordPress to override the default PHP memory limit for its own processes.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="537" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory-3.png" alt class="wp-image-13622"></figure>
<p><strong><em>Suggested read: </em></strong>How to Check Linux CPU Usage or Utilization (5 Ways)</p>
<h3 class="wp-block-heading" id="2-edit-the-htaccess-file-to-raise-memory-limit"><strong>2. Edit the .htaccess File to Raise Memory Limit</strong></h3>
<p>If editing wp-config.php doesn’t work, it may be because your hosting provider has locked that setting at the server level. In some Apache servers, you can also edit the .htaccess file, which is also located in your site’s root directory. This file controls server configurations for your specific directory.</p>
<p>Again, ensure you have a backup before proceeding. Open the .htaccess file and add the following line at the very end of the file:</p>
<pre><code v-pre>php_value memory_limit 256M</code></pre>
<p>Save the file and check if the error is resolved.&nbsp;</p>
<p><strong><em>Suggested read: </em></strong>How to Find the Most Used Disk Space Directories and Files in Linux</p>
<h3 class="wp-block-heading" id="3-modify-the-phpini-file-on-your-server"><strong>3. Modify the php.ini File on Your Server</strong></h3>
<p>The php.ini file is the master configuration file for PHP on your server. Modifying this file <strong>changes the memory limit for all PHP applications</strong>, not just WordPress, which makes it the most powerful method. However, on shared hosting, you typically do not have access to this file, so this method is primarily for users on a VPS or dedicated server where you have root or sudo privileges.</p>
<p>If you have server access, you must first locate the correct php.ini file, as its location varies significantly by Linux distribution and PHP version. For instance, on a server running Ubuntu or Debian with PHP 8.1 and Apache, the path is <code v-pre>/etc/php/8.1/apache2/php.ini</code>. If you’re using NGINX with PHP-FPM, the path would instead be <code v-pre>/etc/php/8.1/fpm/php.ini</code>. On distributions like CentOS or AlmaLinux, a common location is simply <code v-pre>/etc/php.ini</code>.</p>
<p>The most reliable way to find the exact path your web server is using is to check the “Loaded Configuration File” line within a <code v-pre>phpinfo()</code> page, as explained above. Once you have located and backed up the correct file, you will find and change the following line:</p>
<pre><code v-pre>memory_limit = 256M</code></pre>
<p><strong><em>Suggested read: </em></strong>The 10 Best PHP Frameworks (Complete Guide)</p>
<h3 class="wp-block-heading" id="4-use-the-hosting-control-panel-or-the-runcloud-dashboard-to-increase-memory"><strong>4. Use the Hosting Control Panel or the RunCloud Dashboard to Increase Memory</strong></h3>
<p>The safest and most recommended method for novice users is to use the tools provided by your hosting provider or server management panel. These interfaces are designed to prevent the configuration errors that can occur when editing files manually. Most control panels have a section for managing PHP settings where you can select your domain and choose a new memory limit from a dropdown menu.</p>
<p><strong>RunCloud</strong> excels at this, and it provides a dedicated and intuitive control for each web application. From your dashboard, go to <strong>Web Application &gt; Settings</strong>, where you can easily adjust the PHP memory_limit with a simple input field.&nbsp;</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="416" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory-4.png" alt="change wordpress memory limit" class="wp-image-13623"></figure>
<p>After you make the necessary changes, you can save the settings without any need for SSH or FTP.</p>
<p>Suggested read: How to Fix WordPress HTTP Error When Uploading Images (Quick Guide)</p>
<h3 class="wp-block-heading" id="5-deactivate-heavy-or-poorly-coded-plugins"><strong>5. Deactivate Heavy or Poorly Coded Plugins</strong></h3>
<p>Sometimes, the problem isn’t the memory limit itself, but a single plugin consuming an excessive amount of resources. A poorly coded plugin or a feature-heavy one (like a page builder or a complex backup solution) can easily trigger a memory error by creating a memory leak or simply by performing a task that is too resource-intensive for your server’s configuration.&nbsp;</p>
<p>In this case, increasing the memory limit will not solve the issue, and you will need to identify the specific component causing the issue without disrupting your live site.</p>
<p>Instead of resorting to the time-consuming method of deactivating all plugins on your live site, your first step should be to check the server logs. The NGINX error logs, for instance, often contain the exact PHP script path that triggered the fatal error.</p>
<p>Furthermore, a plugin that exhausts memory is frequently a slow-performing one; this is where <strong>RunCloud’s built-in slow script monitoring </strong>becomes invaluable. It helps you identify scripts that are taking too long to execute and are likely candidates for high memory usage.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="445" src="https://massive.news/wp-content/uploads/2025/11/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory-5.png" alt class="wp-image-13624"></figure>
<p>Once you have identified a suspect, the safest way to confirm your diagnosis is in a non-production environment. Instead of deactivating plugins on your live site and risking further downtime, use RunCloud’s one-click staging functionality. This creates an identical, isolated copy of your site where you can safely deactivate the suspected plugin and test thoroughly without impacting your visitors. If the error disappears on the staging site, you’ve found your culprit and can proceed with deactivating or replacing it on your live production site.</p>
<p><strong><em>Suggested read: </em></strong>Everything You Need To Know About the wp-config.php File</p>
<h3 class="wp-block-heading" id="6-optimize-images-and-media-files-to-reduce-memory-usage"><strong>6. Optimize Images and Media Files to Reduce Memory Usage</strong></h3>
<p>One of the most common reasons for memory exhaustion is uploading large, high-resolution images. When you upload a picture, WordPress doesn’t just store it directly; it uses PHP to process it and create multiple smaller versions (thumbnails). This image processing is a very memory-intensive task, and a large file can easily push PHP past its limit.</p>
<p>To prevent this, always optimize and resize your images <em>before</em> uploading them to WordPress using a tool like Photoshop or an online image compressor. You can also use a WordPress plugin that optimizes images on the fly, but be mindful that the optimization plugin itself will also consume resources. By reducing the initial file size, you significantly decrease the amount of memory needed for processing.</p>
<p><strong><em>Suggested read: </em></strong>Scaling RAM &amp; CPU Cores – How They Affect WordPress Performance</p>
<h3 class="wp-block-heading" id="7-upgrade-your-hosting-plan-for-higher-php-memory-allocation"><strong>7. Upgrade Your Hosting Plan for Higher PHP Memory Allocation</strong></h3>
<p>If you have tried all the above methods and are still hitting memory limits, especially on a shared hosting plan, it may be time to upgrade. Shared hosting environments place strict, and often low, caps on resources like RAM to ensure stability for all users on the server. No amount of configuration file editing can overcome a hard limit imposed by your provider.</p>
<p>Upgrading to a VPS (Virtual Private Server) gives you dedicated resources and full control over your server environment. With <strong>RunCloud</strong> managing your VPS, you can easily set your PHP memory limit to 512 MB, 1GB, or whatever your applications require.</p>
<h2 class="wp-block-heading" id="wrapping-up-best-practices-to-prevent-the-wordpress-memory-exhaustion-error"><strong>Wrapping Up: Best Practices to Prevent the WordPress Memory Exhaustion Error</strong></h2>
<p>In this post, we have shown you not only how to fix the WordPress memory exhausted error but also how to build a resilient and high-performing website. After fixing the error, you can optimize your site by implementing a couple of best practices to prevent this in the future.</p>
<p>One of the most powerful preventative measures is to reduce your server’s overall workload. Every time a visitor loads a page on your site, WordPress executes PHP scripts and queries the database, all of which consume memory. Caching drastically reduces this workload by storing and serving a static HTML version of your page, bypassing the need for most PHP executions.</p>
<p><strong>With RunCloud, you can enable a highly optimized server-level solution like RunCache (NGINX FastCGI cache) with a single click. This immediately lowers your server’s memory and CPU usage and makes your site significantly faster.&nbsp;</strong></p>
<p><em>This is just one example of how RunCloud transforms server management from a reactive chore into a proactive strategy.&nbsp;</em></p>
<p>Sign up for RunCloud today and experience a faster, more stable WordPress site.</p>
<h3 class="wp-block-heading" id="faqs-on-wordpress-memory-exhausted-error"><strong>FAQs on WordPress Memory Exhausted Error</strong></h3>
<div id="rank-math-faq" class="rank-math-block">
<div class="rank-math-list ">
<div id="faq-question-1761827761742" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="how-do-i-increase-php-memory-in-wordpress"><strong>How do I increase PHP memory in WordPress?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>The most effective method is to edit your wp-config.php file by adding the line <code v-pre>define('WP_MEMORY_LIMIT', '256M');</code> just before the “That’s all, stop editing!” comment. If this doesn’t work, your host may be overriding it, so you can try setting the memory_limit value in your .htaccess or php.ini file.</p>
</div>
</div>
<div id="faq-question-1761827780618" class="rank-math-list-item" readability="9.5">
<h3 class="rank-math-question " id="what-causes-memory-limit-errors-in-wordpress"><strong>What causes memory limit errors in WordPress?</strong></h3>
<div class="rank-math-answer " readability="14">
<p>Memory limit errors occur when a WordPress script, typically from a plugin or theme, requires more RAM than the server has allocated for PHP. This exhaustion is often triggered by resource-intensive functions, poorly coded components, or complex database queries that push the process beyond its allowed memory threshold.</p>
</div>
</div>
<div id="faq-question-1761827786311" class="rank-math-list-item" readability="8">
<h3 class="rank-math-question " id="why-does-my-site-crash-when-uploading-images"><strong>Why does my site crash when uploading images?</strong></h3>
<div class="rank-math-answer " readability="11">
<p>Image uploads are a memory-intensive process because WordPress must not only receive the file but also process it to create multiple smaller sizes (thumbnails). If the original image is very large or your PHP memory limit is low, this process can easily exceed the allocated memory and trigger a fatal error.</p>
</div>
</div>
<div id="faq-question-1761827794816" class="rank-math-list-item" readability="9">
<h3 class="rank-math-question " id="how-do-i-find-my-current-php-memory-limit"><strong>How do I find my current PHP memory limit?</strong></h3>
<div class="rank-math-answer " readability="13">
<p>The easiest way is to navigate to “Tools &gt; Site Health” in your WordPress dashboard, click the “Info” tab, and expand the “Server” section. Alternatively, a more direct server-level approach is to create a file named info.php in your root directory containing <code v-pre>&lt;?php phpinfo(); ?&gt;</code> to view the master memory_limit value.</p>
</div>
</div>
<div id="faq-question-1761827806428" class="rank-math-list-item" readability="8.5">
<h3 class="rank-math-question " id="can-plugins-cause-memory-exhaustion"><strong>Can plugins cause memory exhaustion?</strong></h3>
<div class="rank-math-answer " readability="12">
<p>Yes, plugins are the most frequent cause of memory exhaustion errors in WordPress. A single poorly coded plugin or too many plugins running complex operations simultaneously (like page builders, backup solutions, or security scanners) can quickly consume all available memory.</p>
</div>
</div>
<div id="faq-question-1761827813735" class="rank-math-list-item" readability="9">
<h3 class="rank-math-question " id="what-is-the-ideal-php-memory-limit-for-wordpress"><strong>What is the ideal PHP memory limit for WordPress?</strong></h3>
<div class="rank-math-answer " readability="13">
<p>A baseline of 128M is a good starting point for a modern website, but 256M is a safer and more common recommendation. For robust sites, especially those running e-commerce platforms like WooCommerce or numerous plugins, setting the limit to 512 MB is often ideal for preventing memory-related errors.</p>
</div>
</div>
<div id="faq-question-1761827822825" class="rank-math-list-item" readability="9">
<h3 class="rank-math-question " id="how-do-i-fix-fatal-errors-in-wordpress"><strong>How do I fix fatal errors in WordPress?</strong></h3>
<div class="rank-math-answer " readability="13">
<p>First, enable <code v-pre>WP_DEBUG</code> in your wp-config.php file to see a more detailed error message that often points to the culprit plugin or theme. If it’s a memory issue, increase the PHP memory limit; otherwise, the standard troubleshooting procedure is to deactivate all plugins and switch to a default theme to isolate the problem.</p>
</div>
</div>
<div id="faq-question-1761827835705" class="rank-math-list-item" readability="10">
<h3 class="rank-math-question " id="does-changing-themes-affect-memory-usage"><strong>Does changing themes affect memory usage?</strong></h3>
<div class="rank-math-answer " readability="15">
<p>Absolutely, themes can have a significant impact on memory usage, as modern themes often bundle complex features and functionality. A lightweight, well-optimized theme will consume far less memory than a large, multipurpose theme packed with page builders, sliders, and extensive integrations.</p>
</div>
</div>
</div>
</div>
<p>The post <a href="https://massive.news/how-to-fix-wordpress-memory-exhausted-error-increase-php-memory/">How to Fix WordPress Memory Exhausted Error Increase PHP Memory</a> appeared first on <a href="https://massive.news">MASSIVE News</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
