Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →To host a static HTML website on a VPS, install a web server such as Nginx, copy your HTML, CSS, JavaScript, and image files into a domain-specific document root, point DNS to the VPS, open only the required ports, and use Certbot to enable HTTPS. No application runtime or database is required for files that are already generated.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
This guide answers the practical questions behind the setup: “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?” The examples target a Debian- or Ubuntu-based VPS and use example.com as a placeholder.
As an Amazon Associate I earn from qualifying purchases.
What a static-site VPS setup actually contains
A static website is a collection of files that the server can return as-is: HTML documents, stylesheets, JavaScript bundles, fonts, images, downloads, and other assets. The server does not need to execute application code to generate each page. Linode’s documentation describes the same principle: “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.”
For one domain, the request path is straightforward:
#1 Best Overall
- [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
- [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
- [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
- [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
- [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
- A visitor requests
https://example.com/. - DNS resolves
example.comto the VPS public IP address. - Nginx accepts the connection on port 443, decrypts HTTPS, and selects the matching server block.
- Nginx maps the URL to a file under the site’s document root, such as
/var/www/example.com/html/index.html. - The file is returned without a PHP, Node.js, Python, or database process.
Use a separate document root and server block for every domain. This prevents one site’s files or configuration from accidentally becoming the default response for another hostname and makes certificates, deployments, and troubleshooting easier.
A VPS gives you operating-system access and control over the web server. You are responsible for updates, firewall rules, SSH security, DNS records, permissions, backups, and certificate renewal. A managed static-hosting service can hide much of that work, but a VPS is useful when you need predictable server access or want to host several sites on one machine.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
What you need before installing Nginx
A supported VPS and administrative access
Choose a current, supported Ubuntu or Debian image from your VPS provider. Record the public IPv4 address assigned to the server. If you intend to serve IPv6, record the public IPv6 address as well and confirm that the provider has routed it to the VPS.
Keep an SSH session available while changing firewall rules. Log in with the provider’s initial account, then create a separate non-root account with sudo access:
sudo adduser deploy
sudo usermod -aG sudo deploy
Replace deploy with your preferred username. Install your SSH public key for that account and verify that a second terminal can log in before you restrict or close the initial account. Do not disable the only working administrative path.
Your finished site files
Build the site on your development machine if it uses a generator or bundler. The VPS only needs the resulting files. The document root should contain an entry file such as index.html plus the referenced assets. Check case sensitivity before uploading: Logo.png and logo.png are different names on a typical Linux filesystem.
A domain you control
You need access to the DNS zone for the domain. The domain can be registered with one company and use another company’s DNS service; what matters is that you can create the required A records and, if applicable, an AAAA record.
How to install Nginx on the VPS
Connect over SSH as your sudo-capable user. Update the package index and install the distribution package:
sudo apt update
sudo apt install nginx
Start Nginx now and configure it to start after a reboot:
sudo systemctl enable --now nginx
sudo systemctl status nginx --no-pager
The distribution usually supplies a default site and a default document root, often /var/www/html. Treat that as a test location rather than the permanent home of every domain. Open the VPS IP address in a browser or run:
curl -I http://YOUR_VPS_IPV4
A successful response confirms that Nginx is listening on HTTP. If it fails, check the service status, the VPS provider’s network firewall, and local firewall rules before adding a domain to the configuration.
Rank #2
- 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
- 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
- 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
- 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
- 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.
How to create a document root and deploy the files
Create a directory dedicated to the domain. The html subdirectory matches the layout used in the Ubuntu and Nginx examples:
sudo mkdir -p /var/www/example.com/html
Copy the built site into that directory using your preferred transfer method. For example, from your local machine, rsync can copy a build directory over SSH:
rsync -avz --delete ./dist/ deploy@YOUR_VPS_IPV4:/tmp/example-site/
Then, on the VPS, move the files into the document root. The exact command depends on where you uploaded them; do not run a destructive --delete operation until you have confirmed that the source directory is complete.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →sudo cp -a /tmp/example-site/. /var/www/example.com/html/
Set ownership so your deployment account can update the files while Nginx can read them. Substitute your actual account name if it is not deploy:
sudo chown -R deploy: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 {} ;
These permissions allow directory traversal and file reads without making the tree world-writable. Avoid granting Nginx write access unless a specific application requires it; a static site does not.
Confirm that the expected entry file exists:
ls -l /var/www/example.com/html/index.html
If your build output uses a different entry filename, either configure that filename with the Nginx index directive or rename the entry file to index.html.
How to configure an Nginx server block for the domain
Create a site-specific configuration in sites-available:
Recommended Free Tools
sudo nano /etc/nginx/sites-available/example.com
Use this port-80 configuration, replacing both domain names with the names you actually control:
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 maps URL paths to files below the document root. index index.html tells Nginx which file to serve for a directory request. server_name makes the block respond to both the apex hostname and its www counterpart. try_files $uri $uri/ =404 serves an existing file or directory and returns a 404 response instead of silently serving an unrelated file.
The IPv6 listen [::]:80; line is appropriate only when the VPS is configured for IPv6. If you do not have working IPv6 connectivity, omit that listener and do not publish an AAAA record. A broken AAAA record can cause some visitors to fail before falling back to IPv4.
Enable the site and avoid the default-site trap
Debian and Ubuntu commonly enable sites by symlink:
Free tools Windows power users keep installed
One-click scans. No signup required.
Rank #3
- [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
- [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
- [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
- [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
- [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
If the distribution’s default site would catch requests for your hostname, disable it after ensuring that your new link exists:
sudo rm /etc/nginx/sites-enabled/default
Only remove the default link when you no longer need it for testing. Removing a file from sites-enabled does not delete the original configuration in sites-available.
Validate before applying any change:
sudo nginx -t
Proceed only when Nginx reports that the syntax test is successful. Apply configuration changes with a graceful reload:
sudo systemctl reload nginx
A reload makes Nginx read the new configuration without dropping active connections. Restarting the service is usually unnecessary for a normal site or certificate change.
How do I point my domain to an Nginx server?
At your DNS provider, create an A record for the apex domain and another A record for www, both pointing to the VPS public IPv4 address:
| Hostname | Record type | Value | Purpose |
|---|---|---|---|
@ or example.com |
A | VPS public IPv4 address | Resolves the root domain |
www or www.example.com |
A | VPS public IPv4 address | Resolves the www hostname |
@ or example.com |
AAAA | VPS public IPv6 address | Use only when IPv6 is configured and tested |
www |
AAAA | VPS public IPv6 address | Use only when IPv6 is configured and tested |
The A records are required for the common two-hostname setup. Add AAAA records only when the VPS, firewall, and Nginx listeners all support IPv6; otherwise, leaving an old or incorrect AAAA record in place can make the site intermittently unreachable.
DNS changes are not instant everywhere. Before requesting a certificate, verify that both hostnames resolve to the intended address from more than one network or resolver. On a system with DNS utilities installed, you can query them directly:
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA
dig +short www.example.com AAAA
Do not request HTTPS until the names resolve correctly and port 80 is reachable. Let’s Encrypt’s HTTP-01 validation must be able to reach the domain through the public internet.
Which firewall ports should a static website expose?
Allow only the services required for administration and web traffic:
- SSH: the port used to administer the VPS. Keep it restricted to trusted source addresses when your provider and network allow that.
- HTTP (TCP 80): initial site access and ACME HTTP-01 certificate validation.
- HTTPS (TCP 443): encrypted visitor traffic after TLS is enabled.
On a Debian- or Ubuntu-based server using UFW, explicit rules are easy to audit:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Confirm the SSH rule before enabling UFW, and keep your current SSH session open while testing a second connection. Many VPS providers also have a network-level firewall; the provider firewall and UFW must both permit the same required traffic. Do not open database, mail, cache, control-panel, or other unrelated ports merely because the VPS could run those services.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchRank #4
- Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
- Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
- All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
- Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
- Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
How do I enable HTTPS for a static site?
Once DNS resolves and HTTP works, install Certbot and its Nginx integration:
sudo apt update
sudo apt install certbot python3-certbot-nginx
Request certificates for both hostnames and allow Certbot to edit the matching Nginx server block:
sudo certbot --nginx -d example.com -d www.example.com
Certbot uses the server_name values to find the site, completes ACME validation, adds TLS directives, and reloads Nginx. Follow its prompts for an email address and HTTP-to-HTTPS redirection. Let’s Encrypt certificates remain valid for three months, according to DigitalOcean’s 2026 documentation, so renewal is part of operating the site rather than a one-time task.
After a successful run, the effective arrangement normally contains an HTTPS server listening on port 443 and an HTTP server that redirects visitors with a 301 response:
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteserver {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# Certbot-managed certificate and key directives appear here.
}
Do not copy certificate paths from another server. Certbot writes the correct paths for the certificate it issued and may add renewal hooks or managed directives.
Test automatic renewal
Run a dry test to confirm that the renewal process can complete:
sudo certbot renew --dry-run
A dry run does not replace the live certificate. It checks the renewal workflow against the ACME service. Also confirm that the system’s scheduled Certbot timer or distribution-provided renewal job is enabled, and check its logs if the dry run reports a problem.
How to verify the finished deployment
Test each hostname and each protocol rather than assuming that a successful certificate command means every URL works:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
- Open
https://example.comandhttps://www.example.comin a browser. - Request the HTTP versions and confirm they return a 301 redirect to HTTPS:
curl -I http://example.com
curl -I http://www.example.com
- Check the final HTTPS responses:
curl -I https://example.com
curl -I https://www.example.com
- Open representative CSS, JavaScript, image, font, and download URLs. A page that loads while its assets return 404 is not a complete deployment.
- Visit every intended deep link, such as
/about.htmlor/docs/getting-started.html. The suppliedtry_filesrule should return the matching file or a deliberate 404. - Inspect the certificate in the browser and confirm that both names are covered, the connection is valid, and the certificate is not expired.
- Review Nginx’s error log if a request fails:
sudo tail -n 50 /var/log/nginx/error.log
Use sudo nginx -T when you need to see the complete configuration Nginx is currently loading, including included files and Certbot-managed sections.
How to update static files safely
Updating content does not require an Nginx reload when only files change. Upload the new build into a temporary directory, verify it, and then publish it. For small sites, copying into the document root is sufficient; for larger or high-traffic sites, an atomic directory switch reduces the chance that visitors receive a mixture of old and new assets.
Whichever method you choose:
- Keep the same readable ownership and permissions after deployment.
- Do not upload private keys, source-control directories, environment files, or build secrets into the public root.
- Preserve stable filenames or update references in the HTML and CSS together.
- After configuration edits, run
sudo nginx -tand thensudo systemctl reload nginx. - Do not reload merely because content files changed; a reload is needed for configuration, listener, header, or certificate changes.
Maintain backups of the source repository and the Nginx configuration. A VPS snapshot can help with recovery, but it should not be the only copy of your site.
Best Value
Common failures and precise fixes
The browser shows the Nginx welcome page
The default server block is probably handling the request, or the request’s hostname does not match your server_name. Confirm that the symlink in /etc/nginx/sites-enabled exists, remove the default link if appropriate, check the spelling of both hostnames, and reload after a successful nginx -t.
The domain resolves, but the connection times out
Check the VPS provider firewall and UFW for TCP 80 or 443 rules. Confirm that Nginx is running and listening:
sudo systemctl status nginx --no-pager
sudo ss -tulpn | grep nginx
If IPv6 is enabled in DNS but not configured on the VPS, remove the incorrect AAAA records or complete the IPv6 setup before testing again.
Certbot cannot validate the domain
HTTP-01 validation needs public access to port 80. Verify both A records, ensure that the request reaches this VPS rather than an old server, make sure UFW and the provider firewall allow port 80, and confirm that Nginx has a port-80 block for every requested name. A local-only DNS record or a proxy that does not pass the ACME challenge can also prevent validation.
Nginx reports a syntax error
Run sudo nginx -t and read the filename and line number in its output. Typical causes include a missing semicolon, an unmatched brace, a duplicate directive, or a typo in a path. Correct the indicated file, test again, and reload only after the test succeeds.
Recommended Free Tools
HTML loads but CSS or images return 404
Inspect the browser’s requested URL and compare its capitalization and path with the actual filename under /var/www/example.com/html. Check that the build did not place assets in a different subdirectory and that directory permissions allow Nginx to traverse every parent directory.
Renewal succeeds but the old certificate remains visible
Confirm that the HTTPS server block points to Certbot’s managed certificate paths, run sudo nginx -t, and reload Nginx. Inspect sudo nginx -T to identify duplicate 443 server blocks that might be serving a different certificate.
Nginx, Apache, and alternative deployment approaches
Nginx versus Apache
| Consideration | Nginx | Apache |
|---|---|---|
| Static-file support | Serves HTML, CSS, JavaScript, images, and other files directly. | Also serves static files directly. |
| Configuration style | Uses server blocks, commonly under sites-available and sites-enabled on Debian-based systems. |
Uses virtual-host configuration, with conventions that differ by distribution. |
| This guide’s commands | Directly applicable. | Not directly applicable; directives and enablement commands must be translated to the installed distribution. |
| Best choice | A good fit when you want the documented Nginx workflow and a simple static server. | A reasonable choice when your team already operates Apache and its configuration conventions. |
Both can host a static site. The important operational requirement is one correctly matched virtual host or server block per domain, a readable document root, a working firewall, and a maintained TLS configuration.
HTTP-01 versus DNS-01 ACME validation
| Method | What you must provide | When it fits |
|---|---|---|
| HTTP-01 | The requested hostname must reach an HTTP service on public port 80. | The normal choice for a VPS running Nginx and reachable from the internet. |
| DNS-01 | A temporary ACME TXT record in the domain’s DNS zone. | Useful for wildcard certificates or servers that cannot accept inbound HTTP. |
The command in this guide uses Certbot’s Nginx integration with the HTTP-based workflow. DNS-01 requires access to create TXT records and, depending on the DNS provider, an appropriate Certbot DNS plugin or a manual record-change process.
Free tools Windows power users keep installed
One-click scans. No signup required.
Provider-managed image versus manual installation
| Approach | Advantages | Trade-offs |
|---|---|---|
| LEMP or similar managed image | May preconfigure Nginx, firewall defaults, and Certbot, reducing initial setup. | Versions, paths, and defaults may be chosen for you; inspect them before adding a site. |
| Manual package installation | Gives you control over package versions, directory layout, users, and enabled services. | You must configure Nginx, firewall rules, certificates, and renewal yourself. |
Regardless of the starting image, inspect the active configuration and test the result. A preconfigured image is not proof that your particular domain, DNS records, permissions, or certificate are correct.
Final deployment checklist
- A supported Ubuntu or Debian VPS is reachable over SSH with a non-root sudo user.
- Nginx is installed, running, and enabled at boot.
- The site files are in a dedicated root such as
/var/www/example.com/html. - Directories are traversable, files are readable, and nothing in the public root is unnecessarily writable.
- The server block contains the correct
root,index,server_name, andtry_filesdirectives. - The site is enabled, the default site is not intercepting the hostname, and
sudo nginx -tpasses. - A records for the apex and
wwwnames point to the VPS IPv4 address. - AAAA records exist only when the VPS has working IPv6.
- The firewall permits SSH, TCP 80, and TCP 443, with unrelated services closed.
- Certbot has issued a certificate for every hostname and configured HTTPS.
- HTTP redirects to HTTPS, assets load, deep links behave as intended, and
sudo certbot renew --dry-runsucceeds.
Once these checks pass, Nginx is serving the static files directly from the VPS, DNS is directing both hostnames to the correct machine, and HTTPS renewal is part of the server’s normal maintenance routine.
Quick Recap
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.

