[email protected]Support 24/7 · Billing 09:00 – 00:00LinkedInXFacebook
NexonHost
Netherlands Dedicated ServersAmsterdam · Equinix AM6Germany Dedicated ServersFrankfurt · Equinix FR4Romania Dedicated ServersBucharest · VoxilityAustria Dedicated ServersVienna · Interxion VIEBulgaria Dedicated ServersSofia · TelepointFrance Dedicated ServersParis · Interxion PAR — Marseille · Digital Realty MRS3Ireland Dedicated ServersDublin · Equinix DB2Italy Dedicated ServersMilan · Irideos AvalonPoland Dedicated ServersWarsawSpain Dedicated ServersMadrid · Equinix MD2United States Dedicated ServersAshburn · Equinix DC
← All articles
BlogsSeptember 29, 2026

WordPress DDoS Protection: What a Proxy Stops That a Plugin Can't

WordPress DDoS Protection: What a Proxy Stops That a Plugin Can't

WordPress runs 40.2% of all websites, according to W3Techs, and 58.7% of the sites whose content management system can be identified. That share makes it the most targeted CMS by simple arithmetic, and it means attack tools ship with WordPress-specific modes. The useful question about WordPress DDoS protection is not whether your site will be targeted, but where the attack gets stopped.

The short answer: not inside WordPress.

Why a security plugin cannot stop a flood

A security plugin is PHP code running on your server. For it to block a request, that request has already crossed your network port, completed a TCP handshake and a TLS negotiation, taken a web server worker and started a PHP process. The plugin then spends more CPU deciding to say no.

That is fine against someone trying passwords one at a time. It is useless against a flood, because a flood works by exhausting exactly the resources the plugin needs to run: the port, the connection table, the PHP workers and the CPU. Some firewall plugins load before WordPress itself to save work, but they still run on the same machine. A volumetric attack fills the port before any software on the server gets a vote.

Plugins still earn their place for malware scanning, login hardening and file integrity checks. They are the last line of defence, not the first.

The endpoints attackers actually hit

A WordPress flood rarely bothers with the cached homepage. It goes for the URLs that make PHP and the database work on every single request.

Target Why it hurts Default exposure
/xmlrpc.php Every call runs PHP, and one request can carry many calls Enabled by default since WordPress 3.5 (December 2012)
/wp-login.php Each attempt runs a deliberately slow password hash Always on
/wp-admin/admin-ajax.php Plugin actions run uncached, often for logged-out visitors Depends on your plugins
/?s= search A database query per request, rarely cached Always on
Random query strings Most page caches treat a new URL as a cache miss Depends on your cache rules
WooCommerce cart and checkout Tied to a session, so never served from cache 19.8% of WordPress sites run WooCommerce

XML-RPC deserves its own paragraph

XML-RPC predates the WordPress REST API, and some older apps and integrations still talk to sites through it. WordPress 3.5, released on 11 December 2012, switched it on for every site and removed the settings option to turn it off. Two of its methods matter to an attacker:

  • system.multicall executes a list of method calls from a single HTTP request. A rate limit that counts requests per IP address under-counts the login attempts packed inside them.
  • pingback.ping makes your server fetch a URL supplied by the caller, to check that the page really links to you. The Pingback specification has carried a warning since a 2007 erratum that this fetch can be abused for denial of service. It also means a stranger can make your server connect to a machine they control, and see your server's real IP address.

If nothing you use needs XML-RPC, block /xmlrpc.php at the proxy or the web server. If something does, allow it only from the addresses that need it.

What has to sit in front of the site

WordPress DDoS protection works when the attack is absorbed before it reaches your server. That means a DDoS protection proxy: your DNS points at the proxy, the proxy terminates TLS and filters the traffic, and only clean requests are forwarded to your origin server.

A proxy that is useful for WordPress does four things:

  1. Absorbs volumetric floods at layers 3 and 4 on its own network, so your port never sees them.
  2. Challenges bots with a JavaScript or redirect check that browsers pass and scripts usually do not. That is the right tool for wp-login.php and cache-busting floods.
  3. Filters by source and behaviour: GeoIP and ASN blocking, rate limits per path, and rules for xmlrpc.php.
  4. Keeps the origin private, with the origin firewall accepting web traffic from the proxy only.

Point 4 is where most set-ups fail. If your server's real address is still reachable, an attacker skips the proxy and floods the origin directly. Pingbacks, old DNS records, mail headers and subdomains left off the proxy are the usual leaks. Once the proxy is live, restore real visitor IPs so that your logs, rate limits and comment spam filters keep working; getting real visitor IPs on your backend covers the web server side.

Slow, low-volume attacks need the same layer. Protecting against Slowloris with a layer 7 proxy shows an attack no plugin can see coming, and how a DDoS protection proxy works walks through the filtering layers in order.

Sizing a proxy plan from your own traffic

Proxy plans are sold by clean traffic, meaning the traffic that passes the filters and reaches your site, and by the size of flood the network absorbs. Dropped attack traffic is not the number to plan around. Your legitimate monthly transfer is.

Take that figure from your current host's bandwidth graph. As a rough guide, if an average page view transfers 2 MB, including the images and scripts served through the proxy:

Plan Clean traffic a month Page views at 2 MB each Layer 4 absorption Monthly price
Micro 3 TB about 1.5 million 10 Gbps €49
Small 5 TB about 2.5 million 25 Gbps €139
Business 15 TB about 7.5 million 50 Gbps €399
Enterprise Unmetered no cap 100 Gbps included, up to 1 Tbps €710

Annual billing takes 10% off. Every plan includes unlimited domains, SSL, the robot-detection web challenge, GeoIP blocking, WAF support and live logs; the larger plans add ASN blocking and advanced flood filters. A shop with a heavy checkout, or a news site that spikes, should size for its busiest month rather than an average one.

A checklist for putting WordPress behind a proxy

  1. Lower the DNS TTL a day before the switch, then point the A record at the proxy.
  2. Firewall the origin so that ports 80 and 443 accept connections from the proxy's addresses only.
  3. Block or restrict /xmlrpc.php, and turn off pingbacks if you do not use them.
  4. Put a challenge in front of wp-login.php, and rate-limit admin-ajax.php and search.
  5. Exclude /wp-admin/ and the WooCommerce cart and checkout from caching rules, but not from filtering.
  6. Restore real visitor IPs in the web server and in any security plugin.
  7. Watch the live logs for a week and tune the rules before an attack, not during one.

If the site itself has outgrown its host, WordPress hosting requirements lists the signs, and managed WordPress hosting takes the server work off your hands entirely.

Where to start

NexonHost's anti-DDoS proxy for websites sits in front of any WordPress site, wherever it is hosted, with no migration: plans start at €49 a month for 3 TB of clean traffic and 10 Gbps of layer 4 absorption, with unlimited domains on every plan. If you want the same protection for servers and APIs as well as websites, remote DDoS protection covers the whole estate.

Specifications and pricing are as of 28 September 2026 — check the product pages for current figures.

Sources

  • Usage statistics and market share of WordPress, W3Techs. 40.2% of all websites, 58.7% of sites with a known CMS, WooCommerce on 19.8% of WordPress sites. Retrieved 28 September 2026.
  • Version 3.5, WordPress.org documentation. Released 11 December 2012; XML-RPC enabled by default and its Writing Settings option removed. Retrieved 28 September 2026.
  • IXR_Server::multiCall() and wp_xmlrpc_server, WordPress Developer Resources. The multicall handler and the pingback.ping method. Retrieved 28 September 2026.
  • Pingback 1.0, Stuart Langridge and Ian Hickson, including the 2007 erratum on denial of service. Retrieved 28 September 2026.
  • NexonHost store, remote protection plans: clean traffic, layer 4 absorption, features and billing cycles. Retrieved 28 September 2026.
  • Computed: 3 TB ÷ 2 MB = 1.5 million page views; 5 TB ÷ 2 MB = 2.5 million; 15 TB ÷ 2 MB = 7.5 million.
Keep reading
Backup Storage Cost: Flat Quota or Metered Object Storage?
September 12, 2026

Backup Storage Cost: Flat Quota or Metered Object Storage?

Two shapes of backup storage exist and they are priced on different axes: a fixed quota for a fixed figure, or per-gigabyte elasticity with transfer metered separately. Both are legitimate. Here is the arithmetic, with the assumptions named.

Read article →
Magento 2 Hosting Requirements: The Version Matrix That Decides Upgrades
September 11, 2026

Magento 2 Hosting Requirements: The Version Matrix That Decides Upgrades

Magento is the heaviest mainstream ecommerce platform you can self-host, and its requirements list is the reason. It is PHP, a database, a search engine, a cache, a broker and a reverse proxy, each with a matrix that moves every release. Here is all of it.

Read article →
AI Agent Hosting Requirements: Sizing a Server for OpenClaw
September 10, 2026

AI Agent Hosting Requirements: Sizing a Server for OpenClaw

An agent is not a chatbot with extra features. It runs a loop, holds state, and acts on a schedule whether or not anyone is watching. That difference is the whole infrastructure question, and it is why running one on a laptop stops working in about a week.

Read article →
Get in Touch

Together, Let’s Build a Faster, Safer Internet.

Build scalable infrastructure with NexonHost — high-performance dedicated servers, VPS hosting, cloud hosting, and DDoS protection across Europe.

Get Started →Contact Us
[email protected]Support 24/7 · Billing 09:00 – 00:00