all 16 comments

sorted by: hot top controversial new old
[–] 10 points 9 months ago* (5 children)

Use a page caching plugin that writes HTML files to disk. I don't do a lot with WordPress any more, but my preferred one was WP Super Cache. Then, you need to configure Nginx to serve pages directly from disk if they exist. By doing this, page loads don't need to hit PHP and you effectively get the same performance as if it were a static site.

See how you go with just that, with no other changes. You shouldn't need FastCGI caching. If you can get most page loads hitting static HTML files, you likely won't need any other optimizations.

One issue you'll hit is if there's any highly dynamic content on the page, that's generated on the server. You'll need to use JavaScript to load any dynamic bits. Normal article editing is fine, as WordPress will automatically clear related caches on publish.

For the server, make sure it's located near the region where the majority of your users are located. For 200k monthly hits, I doubt you'd need a machine as powerful as the Hetzner one you mentioned. What are you using currently?

  • source
  • hideshow 5 child comments
  • [–] 6 points 9 months ago* (3 children)

    This is good advise, listen to dan. WP Super Cache is amazing although getting it working just right can take some tweaking.

    The Redis Object Cache plugin is worth a try. It'll only take a minute to set up.

    Is it 200k users or 200k page loads? Those are really different as each user will load multiple pages in a month. If it's 200k page loads then that server is way way too powerful (and expensive). Don't let a crappy developer hide their lack of optimization skills by throwing your money at the problem.

  • source
  • parent
  • hideshow 3 child comments
  • [+] [S] 2 points 9 months ago (3 children)
  • [–] 3 points 9 months ago* (2 children)

    Oh right, yeah, Wordpress does tend to use up an awful lot of storage - every image gets copied 5 or 6 times, in different sizes just incase you need that size. It's nuts.

    You don't need to store those images in your server though, they can be uploaded to S3 (object storage) where it is 10x cheaper to store them and then you can have a cheaper VPS. This way the VPS only needs to have enough storage for your MySQL database.

    https://wordpress.org/plugins/amazon-s3-and-cloudfront/

    There are many providers of S3-compatible storage, you don't need to use AWS. Cloudflare R2 is super cheap - https://www.cloudflare.com/en-gb/developer-platform/products/r2/ or Hetzner - https://www.hetzner.com/storage/object-storage/

  • source
  • parent
  • hideshow 2 child comments
  • [–] 1 point 9 months ago

    they can be uploaded to S3 (object storage) where it is 10x cheaper to store them

    This is heavily dependent on the VPS. Some of my VPSes are cheaper than object storage would be.

  • source
  • parent
  • load more comments (-1 replies)
  • load more comments (-1 replies)
  • [+] [S] 2 points 9 months ago* (1 child)
  • [–] 1 point 9 months ago

    Since you're using Hetzner, one option is to get a Hetzner storage box to store the media. 1TB space is $4/month (not sure about EU pricing). You can mount the storage on another system via NFS.

    On-disk cache prevents a "thundering herd" problem when you reboot - an in-memory cache would be empty on rebootz whereas an on-disk cache survives a reboot. Linux handles caching files in RAM automatically.

  • source
  • parent
  • load more comments (-1 replies)
    [–] 4 points 9 months ago

    This sounds like a very fun project. I also run a small local news organization and we use a company that specialize in managing small news sites (Our-Hometown.com, in case you want to give them a look). We've been very happy with their service for the past 25 years, so I don't plan on leaving them any time soon, but, as a self-hoster, I've also spent a lot of time thinking about how I'd put together the infrastructure. I think my preference is Nginx plus Varnish for caching. Also, in case you're not aware of it, Automattic makes a plugin for newsrooms that adds some industry-specific features (https://github.com/Automattic/newspack-plugin) that looks interesting, though I haven't tried it.

    Lee Hutchinson at ArsTechnica wrote an interesting series about hosting a weather news site in Houston that I thought was awful interesting and might be worth a read. Here's part 1 and part 2.

  • source
  • [–] 3 points 9 months ago

    Some, not all older Hetzner dedicated servers are really slow compared to even their shared VPSs.

    I wouldn't be surprised if you could actually do with a virtual server, unless you need the disk space or know the traffic is close to 20 TB / month. NVMe is fast though, you may get really good performance with the static HTML caching mentioned, if the content is suitable.

  • source
  • [–] 3 points 9 months ago* (1 child)

    OpenLiteSpeed https://openlitespeed.org/

    Host-specific guides (but no hetzner):

    https://docs.litespeedtech.com/cloud/images/wordpress/

    Very easy, robust, fast.

    You can def roll your own sever and solution, but WordPress needs a lot of help. As other commentors said, you need to bypass both the database and PHP as much as possible, via caching.

    While a simple redis or valkey store solves that, you're relying on some integration thru the php layer to make it happen, usually some plugin.

    Serving files or otherwise caching directly thru the webserver is gonna make it faaaaast.

    Then there's the question of database writes. Who is writing to your database, where, and how often?

    Edit: I see you have editors updating content 1-2x per hour. They should rewrite caches hot on each update so they're the only ones paying the db latency cost.

  • source
  • hideshow 1 child comment
  • load more comments (-1 replies)
    [–] [B] 2 points 9 months ago* (last edited 9 months ago)

    Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I've seen in this thread:

    Fewer Letters More Letters
    HTTP Hypertext Transfer Protocol, the Web
    IP Internet Protocol
    NFS Network File System, a Unix-based file-sharing protocol known for performance and efficiency
    NVMe Non-Volatile Memory Express interface for mass storage
    SATA Serial AT Attachment interface for mass storage
    SSD Solid State Drive mass storage
    VPS Virtual Private Server (opposed to shared hosting)
    nginx Popular HTTP server

    7 acronyms in this thread; the most compressed thread commented on today has 9 acronyms.

    [Thread #62 for this comm, first seen 5th Feb 2026, 16:20] [FAQ] [Full list] [Contact] [Source code]

  • source
  • [–] 1 point 9 months ago

    Two things to consider - check out Pressable or another dedicated WP Host. If you're over the price for shared hosting, they're competitive with Dedicated/VPS + addon backup solutions. They have a ton of caching built in, plus hourly backups. But it's not for everyone.

    One thing with the CDN considerations - where's your audience? Local like in or around one city? Or local as in one country. The wider the reach, the more a CDN is beneficial. It doesn't sound like it would help a lot. But it can also offload storage and the load of serving those requests.

    To add what others said - Caching. You could do it on site and add Cloudflare on top of it. But you'll probably want to add a few custom rules to cloudflare like Geo-restriction + no caching on /wp-admin/. Cloudflare also has anti-bot tech.

    Beyond that, I've been waging a war on bots for a number of reasons. One of the easiest ways to block them is to block ASNs if you use Cloudflare. If AI or bot traffic is a problem, read on. If not, don't worry about any of this.

    If you want to block IP ranges yourself in Apache/nginx, your firewall, or your VPS provider's firewall, start with looking up IPs in Amazon and Microsoft's IPs (Like as listed here: https://ipinfo.io/AS16509) and start with the largest ranges.

    With one line you can block 4.1M IPs from Amazon: 3.0.0.0/10 - start with these and go down to /16 and in a few hours you'll kill access to tens of millions of bots.

    You can also block by user agents.

    I'm happy to share some Apache Rules/files if it would be helpful.

    My theory on blocking is simple: I try to block as much as possible as far from the application layer at possible. It costs the most, in computational resources you pay for, to add a firewall inside of WordPress, like Wordfence. It also protects you the least. Blocking at Cloudflare and the VPS's providers firewalls would be most efficient, followed by the firewall on the VPS, followed by an Apache/Nginx firewall, and then your application layer - WordPress. If you're problems are mostly bot traffic, you want block as much bad traffic as possible without false positives.

  • source