October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
VGSources
Blog

How to Host a Static HTML Website on a VPS

A complete Nginx-based walkthrough for hosting static HTML, CSS, JavaScript, and images on a VPS, including DNS, firewall setup, HTTPS, renewal, and troubleshooting.
Length10 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

To host a static HTML website on a VPS, install Nginx on an Ubuntu or Debian server, place your HTML/CSS/JavaScript and image files in a dedicated document root, create a domain-specific server block, point DNS to the VPS, and use Certbot to enable HTTPS. This workflow answers the practical questions “How do I host a static HTML website on a VPS?”, “How do I point my domain to an Nginx server?”, and “How do I enable HTTPS for a static site?” without needing a database or application runtime.

What static hosting on a VPS actually requires

A static site is delivered as files. The browser requests an HTML document, stylesheet, JavaScript bundle, image, font, or other asset, and the web server reads that file from disk and returns it. There is no PHP, Node.js, Python process, database, or application server in the basic setup.

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Linode Docs describes the principle directly: “If your website consists entirely of static files like HTML, CSS, JavaScript, and images, then you only need to set up a simple web server to serve the files.” Nginx is a common choice because it is packaged for major Linux distributions, handles static files efficiently, and supports TLS termination, redirects, compression, and multiple domains. Apache can serve the same files, but the steps below use Nginx.

A VPS gives you administrative control over the operating system, firewall, web-server configuration, logs, and deployment process. That control also means you are responsible for updates, SSH security, DNS correctness, certificate renewal, backups, and recovering from configuration mistakes.

#1 Best Overall
Sale
Gaoye Blue Light Blocking Glasses
  • BLUE LIGHT BLOCKING GLASSES: Our blue light glasses for women boast UV400 protection, blocking harmful blue rays from computer screens. With these bluelight glasses women, you can enjoy gaming, reading, or watching TV with no worries of eye strain.
  • EYE RELIEF: Our blue light glasses are engineered to reduce blurry vision or strain caused by prolonged screen time. These womens blue light glasses aid in better sleep by preventing blue light from disrupting your natural sleep cycle, helping you fall asleep faster and enjoy a more restful night's sleep, making them the perfect christmas present.
  • COMFORTABLE: Crafted from durable material, our trendy blue light glasses for woman or blue light glasses men ensure long-lasting comfort. The high-transmittance lenses accessories, gamer gifts for men, help keep your eyes relaxed. Perfect stocking stuffers, gifts for gamers men, christmas gifts for men, halloween costumes.
  • LIGHTWEIGHT: These clear blue light glasses feature a lightweight frame, meaning they’ll stay comfy for long-term wear. Perfect as blue blockers glasses for women or mens blue light glasses, these non-prescription fake glasses for men can be worn throughout the day. The blue light blocking glasses women feature polycarbonate HD lenses, which are anti-reflective and restore true color.
  • WORRY-FREE PURCHASE: If you experience any issues, our support team is ready to assist you quickly. These are the perfect costume glasses for cosplay dressing up.

What you need before starting

  • A VPS running a currently supported Ubuntu or Debian release with a public IPv4 address. A provider-managed LEMP image is optional; a manual installation gives you more control over package versions and file layout.
  • SSH access and a non-root account with sudo privileges. Keep one working administrative session open while changing SSH or firewall settings.
  • A registered domain whose DNS you can edit. You will create records for the apex name, such as example.com, and normally for www.example.com.
  • Your built static files, including an entry file named index.html unless you plan to change the Nginx index directive.
  • A plan for backups and updates. The VPS provider’s storage, snapshots, or a separate backup destination can be used; the exact retention and price depend on the provider.

Do not publish an AAAA record until the VPS has working IPv6 connectivity and Nginx is listening on IPv6. A broken AAAA record can make some visitors fail even when the IPv4 address is correct.

Provision and secure the VPS

Create a sudo user and retain SSH access

Log in through the provider’s console or initial SSH account, create a normal user, grant administrative privileges, and test a second SSH session before closing the first. The exact user-creation command differs slightly by distribution, but the goal is an account that can run administrative commands with sudo rather than operating the website as root.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Apply the distribution’s security updates before installing the web server. Use the package manager supplied by the image, reboot if the kernel or other core packages require it, and reconnect to confirm that SSH still works.

Allow only the public services you need

The public firewall should expose SSH for administration, HTTP on port 80 for initial access and ACME HTTP validation, and HTTPS on port 443 for visitors. DigitalOcean’s LEMP image documentation lists those SSH, HTTP, and HTTPS allowances as the expected UFW baseline. Restrict SSH to your administration network when practical, and do not expose database, cache, control-panel, or development ports to the internet.

With UFW, the final rules should conceptually allow:

  • SSH (the port you actually use),
  • TCP 80,
  • TCP 443.

Check both the VPS firewall and any provider-level network firewall. A rule in only one of those layers is not enough if the other layer blocks traffic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install Nginx and identify its default layout

On Ubuntu or Debian, install Nginx from the distribution package repository:

Rank #2
Windex Gaming Cleaning Wipes, Pre-Moistened Wipes to Instantly Clean all Gaming Gear and Electronics, Resealable Packaging for a Freshness Lock, 25 count (Pack of 1)
  • WINDEX GAMING WIPES: effortlessly clean all your gaming gear and gaming electronics in one easy step with our new Windex Gaming Wipes
  • AMMONIA FREE: our ammonia-free formula is safe to use on all of your favorite gaming equipment like consoles, headsets, controllers, screens, keyboards, and more
  • PRE-MOISTENED WIPES: each wipe instantly removes dust, dirt, and stubborn smudges and fingerprints leaving a streak-free shine
  • ANTI-STATIC: great for cleaning and wiping down your gaming gear and electronics leaving behind no visible residue
  • COMPACT RESEALABLE PACKAGE: store your pack of Windex Gaming Wipes anywhere in your home for whenever a quick and easy wipedown is needed
sudo apt update
sudo apt install nginx

Confirm that the service is running and enabled for boot:

sudo systemctl status nginx
sudo systemctl enable nginx

Opening the VPS address in a browser should show the distribution’s default Nginx page. Its presence confirms basic connectivity, but it is not your website. The default document root is commonly under /var/www/html; verify the path in the active configuration rather than assuming it.

Create a separate document root for the domain

Use a dedicated directory for each domain. This prevents one site’s files and permissions from becoming entangled with another site’s configuration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo mkdir -p /var/www/example.com/html
sudo cp -R /path/to/your-built-site/. /var/www/example.com/html/

Replace example.com and the source path with your own values. Keep the directory readable by Nginx without making it world-writable. One straightforward ownership model is to keep deployment ownership with your administrative user and grant the web-server process read and directory-traverse access through group permissions. For a simple single-user deployment, you can set the files to a non-root owner and use permissions that allow read access to the web server:

sudo chown -R $USER:www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} ;
sudo find /var/www/example.com -type f -exec chmod 644 {} ;

On distributions or images that use a different Nginx group, substitute that group. Avoid chmod -R 777; it makes accidental modification and compromise easier.

Configure an Nginx server block

Create a configuration file in the distribution’s sites-available directory:

sudo nano /etc/nginx/sites-available/example.com

Use a port-80 server block like this, replacing both domain names and the document-root path:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
LISEN Cell Phone Stand Phone Holder for Desk, Office Decor Gadgets for Men
  • Ergonomic & Adjustable Design: Fight "text neck" and improve your posture. Designed for comfort, it offers an adjustable height (7.1in-8.5in) (1.4in adjustable range) and angle (5°-85°) Please note: cell phone stand is only 9 inches tall—the length of a standard pencil
  • Without blocking subtitles Perfect for office desk Tiktok Face Time Zoom video—this is the ultimate kitchen desk essential for phones! Perfect viewing experience while reducing neck back strain, A must-have for gamers streamers desk, and anyone who values both style and support!
  • Sleek & Stable Design fits Otterbox Case: Say goodbye to bent cables, tangles, and tip-overs! LISEN’s stylish adjustable desk phone holder features a built-in charging hole and smart cable management, keeping your phone secure and your workspace clutter-free cool gadgets for men
  • ANTI-SLIP DESIGN free hands: The under 10.00 items easy gadgets back and the bottom of this kitchen essentials for women are fully covered by anti-skid silicone, which LISEN stand up desk decor can provide maximum protection device from any scratches and slides
  • Your Perfect Viewing Companion:If your product arrives damaged or breaks within 365 days, reach out to LISEN for a quick and hassle-free solution. Struggling with assembly, like tightening the screw? We’ve got your back! Your experience matters to us. (Product including: phone Holder stand*1, screw*1, hexagon screwdriver*1, specification*1)
server {
    listen 80;
    listen [::]:80;
    root /var/www/example.com/html;
    index index.html;
    server_name example.com www.example.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

The root directive identifies the files to serve. index index.html makes a directory request look for that file. server_name tells Nginx which hostnames belong to this site, and try_files returns a 404 instead of silently routing a missing path somewhere else. This pattern follows the root/index/server-name arrangement documented by Nginx and Ubuntu Server.

Enable the site and disable a conflicting default

Ubuntu and Debian commonly enable sites by symbolic links:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo rm -f /etc/nginx/sites-enabled/default

Remove the default link only if it would otherwise catch your hostname or display the welcome page. On an image with a different layout, use its documented equivalent instead of creating a second, conflicting mechanism.

Always validate before applying a configuration change:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo nginx -t

Proceed only when the test reports that the syntax is okay and the test is successful. Apply a valid change with a reload:

sudo systemctl reload nginx

A reload makes Nginx reread configuration without dropping active connections. Restart only when a reload cannot apply the required change.

Point your domain to the Nginx server

Create the required DNS records

At your DNS provider, create an A record for the apex domain and another for the www hostname. Both should point to the VPS public IPv4 address:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Ledagic IC+RGBW USB Powered Led Light Bar with App & Remote Control, 2 Pack
  • Easy Installation: Our gaming lights have been designed to enhance your entertainment experience. Simply position the led light bar next to your TV or game console to create a game room environment with ease. They come with USB power and a 60 inch cord for direct mounting and mobility
  • Audio Syncing & Extensive Mode: The built-in high-sensitivity music sensor allows you to sync the TV led lights to your favorite music. Lights react and move to the beat of music, film and game audio, creating an incredible immersive sound and light experience – and all without the need for an additional hub. You can choose from 64+ patterns, including strobe, illusion, jump, energy, gradient, running, chasing, fluttering mode etc. Each mode can be applied to different scenes
  • 64+ Chasing IC+RGB & W Effect: The independent control design of IC+RGB and white all-in-one multifunctional rgbw led bar lights monitor backlight allows you to easily switch the led lights for desk between IC+RGB and white to enjoy a variety of lighting effects, you can choose white lighting mode with high brightness for better illumination when working, etc. Choose IC+RGB lighting mode when you need to create an entertaining atmosphere for the light show, 16 million colours of Color changing rgb light bar let you dance to the beat and create a dynamic party atmosphere
  • Dynamic and Dimmable Lights: 1%-full brightness free brightness adjustment gives you the flexibility to adjust dimmable led light bar for room decorations or a variety of occasions
  • USB Powered: USB light bars for room can be powered by powernank, usb charger, TV, Monitor, laptop PC mainframe, making behind TV led lighting bar easy to install in any location.TV led lights are powered by the TV usb interface / PC mainframe, can be turned on/off synchronously with TV / PC
Name Type Value Purpose
@ (or the provider’s apex notation) A VPS public IPv4 address example.com
www A VPS public IPv4 address www.example.com

Some providers use a CNAME for www that points to the apex name; that is also valid when the provider supports it. The important result is that both names resolve to the server hosting the matching Nginx block.

If IPv6 is configured end to end, add matching AAAA records and keep the listen [::]:80 directive. If IPv6 is not configured, leave AAAA absent rather than publishing an unreachable address.

Check DNS before requesting a certificate

DNS changes can take time to appear according to the records’ TTL and resolver caches. Check from a machine outside the VPS network:

dig +short example.com A
dig +short www.example.com A

Each lookup should return the VPS address. Also confirm that port 80 is reachable and that the request selects your server block. DNS must point to the VPS before HTTPS validation can succeed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Enable HTTPS with Certbot and Let’s Encrypt

Let’s Encrypt certificates are free. Certbot’s Nginx plugin can locate the matching server block, obtain a certificate, add the TLS configuration, and reload Nginx. Install Certbot and its Nginx integration using your distribution’s supported packages, then run:

sudo certbot --nginx -d example.com -d www.example.com

Follow the prompts for an email address, terms of service, and the preferred HTTP-to-HTTPS behavior. The resulting setup normally has an HTTPS server listening on port 443 and an HTTP block that returns a 301 redirect to https://$host$request_uri, matching Ubuntu’s documented pattern.

DigitalOcean documentation states that Let’s Encrypt certificates are valid for three months and support automatic renewal. Check the renewal timer and perform a dry run after installation:

Best Value
Sale
HUANUO FlowLift™ Dual Monitor Stand, Fully Adjustable Gaming Monitor Desk Mount for 13–32″ Computer Screens, Full Motion VESA 75x75/100x100 with C-Clamp & Grommet Base, Each Arm Holds 4.4 to 19.8 lbs
  • Compatible with Wide Screens - To ensure compatibility with the dual monitor mount, your each monitor must meet three conditions at the same time: First, computer screens size range: 13 to 32 inches. Second, screen weight range: 4.4 to 19.8 lbs. Third, the back of the monitor screen must have VESA mounting holes with a pitch of 75x75mm or 100x100mm.
  • Regarding the compatibility with desks - Your desk must meet three conditions at the same time: First, desk material: Only wooden desks are recommended, plastic or glass desks cannot be used. Second, desk thickness range: 0.59" - 3.54". Third, the bottom of the desk should not have any cross beams or panels, as this will interfere with installation. We recommend carefully checking that your desk and monitors meets all above conditions before purchasing.
  • Dual C-Clamp Hold - Worried your dual monitors might wobble or slip? Our upgraded base uses a larger platform plus a dual C-clamp structure to lock the dual monitor arm firmly to your desk. Each arm safely keeps your screens steady while you type, click and game—no shaking, no sliding, just a clean and secure setup you can trust every day. It also provides Grommet Mounting installation choice, both options ensure stable and secure fixation for your 0.59" - 3.54" desk.
  • Full-Motion Adjustment For Comfortable View - Pull the screen closer when you’re deep in a spreadsheet, push it back to watch videos, or rotate to portrait for coding — moving everything smoothly with just one hand. The monitor stand offers +85°/-50° tilt, ±90° swivel and 360° rotation. Raise your monitor up to 15.75″ to support a healthy sitting posture. Whether you’re working from home, gaming through the night, or switching between video calls and documents, getting the screens to your natural line of sight helps relieve neck, shoulder and back strain so you can stay focused longer with less fatigue.
  • Keep Your Desk Organized: By lifting both screens off the desktop, this dual monitor stand opens up valuable space for your keyboard, notebook, docking station or a simple, clutter-free work area. Built-in cable management guides wires along the arms, keeping cords out of sight and out of the way. Enjoy a tidy, modern workstation that looks as good as it feels to use.
sudo systemctl list-timers | grep -i certbot
sudo certbot renew --dry-run

A dry run tests the renewal path without replacing the live certificate. Keep port 80 reachable if you use HTTP-01 validation; the certificate authority must be able to fetch a temporary token over that port.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

HTTP-01 versus DNS-01 validation

Method What it needs When it fits
HTTP-01 Public DNS pointing to the server and inbound port 80 reachable Typical single-site VPS deployments using Certbot’s Nginx plugin
DNS-01 A temporary DNS TXT record created at the authoritative DNS provider Wildcard certificates or servers that cannot accept inbound HTTP

DNS-01 is useful when a wildcard such as *.example.com is required or when port 80 cannot be exposed. It requires reliable DNS automation or manual TXT-record changes, so HTTP-01 is usually simpler for the configuration in this guide.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Verify the finished site

Test every hostname and the behavior that matters to visitors, not just the home page.

  1. Open https://example.com and https://www.example.com. Confirm the certificate covers both names and that the browser reports a secure connection.
  2. Request the HTTP versions and verify they return a permanent redirect to the corresponding HTTPS URL rather than serving content over plain HTTP.
  3. Load CSS, JavaScript, images, fonts, and any other assets. Browser developer tools should show successful requests and no mixed-content warnings.
  4. Request a known deep path, such as /about.html, and confirm it returns the intended file. A missing file should produce a 404 because of try_files.
  5. Inspect Nginx’s access and error logs if a request fails. A 404 usually indicates a path or filename mismatch; a 403 commonly indicates directory or file permissions; a 502 suggests that a proxy configuration is present even though a pure static site does not need one.
  6. Check the server from an external network if possible. Local success can hide a provider firewall, incorrect DNS, or an IPv6 routing problem.

Do not describe the deployment as successful until both hostnames, redirects, assets, and representative deep links have been tested.

Updating the site safely

Static deployments do not require a web-server reload when only files change. Upload the new build into a staging directory, verify its contents, and switch it into place atomically where practical. A common pattern is to keep versioned release directories and update a symlink used by the Nginx root, or to copy files into a temporary directory and rename it after verification.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Preserve the owner, group, and read permissions that Nginx needs.
  • Do not delete the current release until the new files have been checked.
  • Use cache-busting filenames or an appropriate cache policy when replacing JavaScript, CSS, or images.
  • Run sudo nginx -t after configuration edits.
  • Reload Nginx only when its configuration changes; a file-only deployment does not need a reload.

Keep a copy of the last known-good release and the Nginx configuration. If an update introduces broken links or assets, switch the document root back to that release and investigate the failed build separately.

Nginx, Apache, and provider-managed images

Choice Advantages Trade-offs
Nginx manual install Clear separation of server blocks, document roots, firewall rules, and package versions; matches the workflow in this guide. You must configure updates, permissions, firewall rules, and certificate renewal yourself.
Apache Also serves static files and may be familiar if you already use its virtual-host and module conventions. The configuration paths and directives differ, so Nginx instructions and troubleshooting commands do not transfer unchanged.
Provider-managed LEMP image May preconfigure Nginx, firewall defaults, and Certbot, reducing initial setup work. Image-specific layouts and package choices can obscure where settings live and may require adapting commands.

For one or several simple static sites, the deciding factor is usually operational familiarity rather than raw performance. Keep each domain in its own document root and server block whichever web server you choose.

Common failures and fixes

Symptom Likely cause What to check
Nginx welcome page appears The default site is still enabled or the request does not match server_name. Check links in /etc/nginx/sites-enabled, the hostname in the request, and sudo nginx -T output.
Domain does not connect A or AAAA records are wrong, DNS has not propagated, or a firewall blocks 80/443. Use dig from outside the VPS and inspect both provider and UFW rules.
Certbot cannot validate DNS points elsewhere, port 80 is blocked, or the wrong server block answers. Fetch the HTTP URL externally, confirm the A records, and test sudo nginx -t.
403 Forbidden Nginx cannot traverse a directory or read a file. Check ownership and execute permission on every parent directory; keep files readable without making them writable by everyone.
404 for an existing page The file is outside the configured root, its case differs, or the URL is being treated as a directory. Compare the exact path and capitalization with root; inspect the access log.
HTTPS works on one hostname only The certificate or server block omitted the other name. Confirm both -d arguments were used and test each hostname independently.
Some visitors fail while IPv4 works An AAAA record advertises nonfunctional IPv6. Remove the AAAA record until IPv6 routing and Nginx’s IPv6 listener are working.

Final deployment checklist

  • Supported Ubuntu or Debian VPS is updated, and a tested non-root sudo account can connect over SSH.
  • Firewall permits only the required SSH port, 80, and 443.
  • Static files are in a dedicated document root with secure, readable permissions.
  • Nginx has a matching server block with root, index index.html, server_name, and try_files $uri $uri/ =404.
  • The default site cannot intercept the domain.
  • sudo nginx -t succeeds before every configuration reload.
  • A records for the apex and www resolve to the VPS; AAAA exists only when IPv6 is actually working.
  • Certbot installed a certificate for every hostname, HTTP redirects to HTTPS, and certbot renew --dry-run succeeds.
  • Home pages, assets, deep links, logs, and rollback files have been checked.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.