Egress is the data that leaves a server on its way to your visitors, and on AWS you pay for every gigabyte of it, about $0.09 per GB for the first 10 TB a month as of October 2026.
It is the usual reason people give for why hosting WordPress on AWS costs more than renting a server. We are a WordPress host, and earlier this year we priced our own setup on AWS to see how much of the difference egress really explains. We expected it to be most of the gap, but the numbers showed it was only a small part of it.
How much data does a WordPress site send?
A WordPress page that comes from a page cache is a small HTML file, and the CSS, scripts and fonts that go with it are usually cached by the browser after the first visit. Most of the bytes a typical WordPress site sends are images from its media library.
We measured what our servers send each month, including the nightly backups we copy to off-site storage. Our customer sites run on our own servers in the EU, where outgoing traffic is not billed, so there is no egress bill at all, however much they send.
Why are WordPress servers idle most of the day?
A WordPress server has to be sized for its busiest hours, such as a sale, a newsletter going out or a wave of bots. WooCommerce makes this harder, because carts and checkouts cannot be served from a cache, so every one of those requests runs PHP and queries the database.
For the rest of the day most of that capacity waits. We saw the same on our own servers when we measured how busy their CPU is over a normal day, and the greater part of it was idle most of the time.
What the same server costs on AWS
In June we priced the closest AWS equivalent at list prices: a general-purpose instance with the same CPU and memory, block storage, a NAT gateway and snapshots. On demand it came to several times what the same server costs us now. A three-year commitment on Graviton instances cut that roughly in half, which was still well above what we pay.
Egress was a small line on that bill. At $0.09 per GB, the traffic we measured came to a small fraction of the on-demand total.
Most of the rest is the instance itself, and the reason is how the two providers bill for capacity. On a server with a fixed monthly price the idle CPU is already paid for and costs nothing extra, while AWS charges for every vCPU you provision whether it is busy or not. A WordPress server sized for its peaks pays for those quiet hours too.
When does egress matter for WordPress on AWS?
Egress becomes the big number when a site sends a lot of heavy files, such as videos uploaded to the media library, large downloads sold through WooCommerce or unoptimized images. A site sending 50 TB a month would pay AWS over $4,000 for bandwidth alone, far more than a whole server with a fixed monthly price costs. Where outgoing traffic is not billed, the same traffic costs nothing.
Putting Cloudflare in front of AWS does not avoid that charge either. Cloudflare caches images but not WordPress pages by default, and AWS bills its traffic to Cloudflare the same way it bills traffic to anyone else. Moving the media library to storage that does not charge for egress, such as Cloudflare R2, is what removes it.
When does AWS make sense for WordPress hosting?
For us the case for AWS is not about cost. It would come from a customer contract that requires AWS by name, a compliance requirement we could not meet otherwise, or a need to keep data in a region we do not serve. Even then we would keep the WordPress sites where they are and move only the part the contract covers, because serving websites is where the price difference is largest.
The same peaks are why the price on your busiest day matters more than the price of the plan, which we cover in what to compare when choosing WordPress hosting in Europe.
Check your own numbers
If you are comparing hosting options for your WordPress sites, check two numbers first: your server’s average CPU use and how much data it sends each month. Most hosting control panels show monthly bandwidth, and on a Linux server you run yourself it is a single command:
cat /sys/class/net/eth0/statistics/tx_bytes
That counts bytes sent since the last reboot, so divide by the uptime to get a monthly figure, and use your real network interface name if it is not eth0.