Host a static website

Put plain HTML, CSS, and JavaScript online with zero code — deploy the Static Website template onto a PHP Web Server application, then drop your files into public/.

Skip the setup This guide has a one-click starter template that installs everything below onto your server.

Not every website needs code. A portfolio, a landing page, a documentation site, a game jam entry — if it's HTML, CSS, JavaScript, and images, you can host it on Falix without writing a single line of backend logic. A real nginx web server does the work; you just supply the files.

At a glance
You need A server running the PHP Web Server application (we only use its nginx part — no PHP required)
Plan Any plan
Time Ten minutes

New to creating servers? Start with Create your first app server.

Step 1 — Deploy the Static Website template

Use the template on this page. It writes an nginx setup plus a sample public/ folder onto your server, and — this is the part that saves you the headache — it wires your assigned SERVER_PORT into the nginx config automatically, so the site comes up on your public port with no editing.

A template only overwrites files with the same names, so it won't touch unrelated files.

⚠️ Heads up: If you deploy it onto a server currently running a different application (say Node.js), the panel will switch that server to PHP Web Server first, which reinstalls it and wipes its files — it warns you before doing so. On a fresh PHP Web Server, there's nothing to lose.

Step 2 — Start it and check the sample

Press Start, then open your server's address from the Network page in a browser (see Your first web app for exactly where that address lives). You'll get an "It works!" page. That confirms nginx is serving public/ on your port.

Step 3 — Replace the files with your own

Your whole site lives in the public/ folder. Open the File Manager, go into public/, and replace index.html, style.css, and the rest with your own files — or upload them over SFTP if you'd rather drag a folder across. The file layout maps straight to your URLs:

File URL
public/index.html / — your home page
public/about/index.html /about/
public/blog/post.html /blog/post.html

The home page must be named exactly public/index.html (lowercase), or the front page 404s. Structure your files the way you want your URLs to read.

Step 4 — See your changes

Edits to files in public/ are served live from disk — save the file, then refresh the page in your browser. You do not need to restart the server for content edits.

💡 Tip: If you don't see the change, it's almost always your browser's cache: do a hard refresh (Ctrl/Cmd+Shift+R) to bypass it.

The one exception is the nginx config itself (nginx.template.conf) — if you change that, restart the server so nginx re-reads it.

Content types and a custom 404

You don't set content types by hand. nginx sends the right Content-Type for every file from its built-in mime.types list — .css as text/css, .js as JavaScript, images, fonts, PDFs, and downloads all get their correct type automatically. There's nothing to configure.

One thing the template does not ship is a custom "page not found" page: out of the box, a missing URL returns nginx's plain built-in 404. To show your own, add a public/404.html, then edit nginx.template.conf and add one line inside the server { ... } block:

error_page 404 /404.html;

Restart the server so nginx re-reads the config, and any missing path now serves your 404.html. (It's the config file, so a content-style refresh isn't enough — this one needs the restart.)

Step 5 — Give it a real address

The address:port URL is fine for testing but ugly to share. When you're ready for a proper domain with automatic HTTPS, follow Domains and HTTPS.

Troubleshooting

  • 404 on a page — the file name or path doesn't match the URL. Check spelling and case; confirm the home page is exactly public/index.html, and that /about/ has an index.html inside public/about/.
  • Changed a file but the old version still shows — it's cached in your browser, not stale on the server. Hard-refresh to bypass the cache; static files are served live, so no restart is needed for content edits.
  • The site won't load at all — that's a reachability problem, not a file problem. Work through I can't reach my app.

Next steps

Was this guide helpful?