Skip to main content
.com domains from $2.99 — free WHOIS privacy on every name

Performance Glossary

Nginx, and Why Your Rewrite Rules Went Quiet

You put a site behind nginx, the .htaccess rules stopped applying, and you need the equivalent configuration rather than a workaround for it.

The short answer

Nginx is the event-driven web server that handles thousands of simultaneous connections inside a small number of worker processes, because a worker never sits blocked on one slow client — it moves to the next ready socket instead.

The other half of the answer is the one people arrive here for: nginx does not read .htaccess and never will. The same behaviour goes into central configuration as location and rewrite blocks, applied when the service reloads.

By the HostingFast team · Reviewed 12 August 2026

100+

Terms, measured not asserted

2 min

To read one entry

Plain

Configuration you can copy

24/7

Engineers on shift

The architecture absorbs connection floods that a process-per-request model finds expensive, which is why it so often sits at the front of a busy stack, terminating TLS and passing work back to PHP-FPM or an application server behind it.

Central configuration is a trade. You gain speed and predictability and lose the per-customer, per-directory flexibility that shared hosting is built on. That single trade-off explains most of the differences between the two servers and most of the arguments about them.

Why the rules stopped applying

There is no silent failure to debug: nginx never looks for the file. Your redirects, your deny rules and your header directives are simply not being read, which is why the site behaves as though the file were empty rather than throwing an error.

Every common .htaccess recipe has a published nginx equivalent — try_files for the WordPress front controller, a location block for static asset expiry, a return 301 for each redirect. Translate them once into the server block, reload, and the behaviour comes back.

Where the concurrency actually comes from

worker_processes times worker_connections is the theoretical ceiling, and on a machine where each connection costs kilobytes rather than megabytes that number gets very large. The real limit is usually the file descriptor cap or the application behind the proxy, not nginx itself.

This is also why nginx is such a good place to terminate TLS and serve static files. The expensive, slow parts of a page — the ones where a client dawdles — are handled by a process that does not care how long the client takes, leaving your PHP workers for work that needs them.

Proxying, and the headers people forget

A reverse proxy in front of an application is the canonical deployment: nginx handles certificates, compression and static files, then passes what is left to a port the app is listening on. What breaks first is almost always the forwarded headers, because the app now sees the proxy's address instead of the visitor's.

Set X-Forwarded-For and X-Forwarded-Proto and make the application trust them, or you will spend an afternoon wondering why every user appears to be at 127.0.0.1 and why the framework keeps redirecting an https request back to http.

Checking the config before you reload

nginx -t parses the configuration and reports the file and line of any error without touching the running service. Make it reflex: edit, test, reload. A reload with a broken config leaves the old workers serving, but a restart does not, and that distinction has ended a few evenings badly.

After the reload, curl -I the URLs whose behaviour you changed and read the status and headers. The config file says what you intended; the response says what the server is doing.

An aisle of racks inside the London datacentre

Two servers, one honest comparison

Where two tools solve the same problem differently, these entries say what each optimises for and which reading tells you which one you are limited by.

On our own platform LiteSpeed handles the serving, so .htaccess keeps working while cached pages are returned without starting PHP at all.

  • The translation, directive by directive
  • Where the real ceiling sits
  • Proxy headers spelled out
  • Test before reload, always

Why HostingFast

Standard on every plan

Design choices named as choices

Where a tool omits something on purpose, the entry says so instead of treating it as a missing feature.

Recipes translated, not replaced

The nginx equivalents for the .htaccess blocks you already rely on, with the front controller included.

The real limit identified

Worker maths, descriptor caps and the application behind the proxy, in the order they actually bind.

Proxy pitfalls up front

The forwarded headers that break client IP logging and https detection, before they cost you an evening.

A safe reload procedure

Test the configuration, reload rather than restart, then verify with the response instead of the file.

Honest about what we run

The entry says which server our platform uses and why, so you can weigh the advice against it.

Quick Start

From order to online

  1. 1

    List every rule you are losing

    Read the .htaccess you are leaving behind and write down each directive's intent. Intent translates cleanly; syntax does not.

  2. 2

    Write the server block and test it

    Add try_files, the static expiry location and each redirect, then run nginx -t and fix what it names before going near a reload.

  3. 3

    Verify with responses, not files

    curl -I every URL whose behaviour you changed. Status codes and headers are the only evidence that the block matched.

Built In

Loaded onto every plan

  • LiteSpeed compiled into the server, not a caching plugin bolted on afterwards
  • NVMe on every tier — the entry plan runs the same drives as the top one
  • SSH, Git and Composer on the developer-focused plans
  • PHP version selectable per site, switched from the control panel in seconds
  • DDoS filtering absorbed at the network edge, before it reaches your workers
  • Staging you can clone, break and throw away before anything reaches live
  • Daily backups with a self-service restore you run yourself from the panel
  • Renewal billed at your signup rate — no year-two step change
  • Zero setup fees, on any plan, ever
  • A human on support at any hour, including for the awkward questions

Frequently Asked

What people ask us most often

Can I make nginx read .htaccess if I really need to?

No, and no module adds it. The design decision is deliberate: reading a file in every directory on every request is exactly the per-request work nginx exists to avoid. Convert the rules into the server block once and they are parsed at reload rather than on every hit.

Is nginx worth running on my own VPS?

For heavy concurrency or reverse proxy duty it is excellent, and it will hold connections a process-per-request server cannot afford. For following published tutorials without friction, Apache's ecosystem is kinder. Pick the one whose documentation you can still parse at eleven at night.

What is the refund window if this turns out to be the wrong fit?

Thirty days on shared, business, WordPress and WooCommerce hosting; seven on reseller. VPS and dedicated servers are built to order the moment payment clears, so they sit outside the guarantee, as do domain registrations, where the registry charges the instant the name is secured.

Does the price move at renewal?

No. You renew at the rate you ordered at, every term, because there is no introductory teaser price to fall off. Every invoice sits in your client area and auto-renewal is a toggle in the account rather than a phone call to somebody's retention desk.

Keep reading

Changing hosts? Run through our checklist first.

A straightforward sequence for a switch your visitors never feel: which files move first, how to shift email across without losing a single message, the right moment to repoint DNS, and the two mistakes behind almost all the downtime we get asked to rescue.

You'll get the checklist email, then occasional pointers on keeping a site running fast. Unsubscribe the moment you want out — the privacy policy covers the rest.

Serve the static half without waking PHP.

LiteSpeed caching, NVMe on every tier and DDoS filtering absorbed at the edge, with no setup fee attached.

View WordPress Hosting plans