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

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Put a website’s public files in the directory named by the active NGINX server block’s root directive. On a standard Ubuntu installation, that directory is usually /var/www/html. A custom site can use a path such as /srv/my-site/html, and a server hosting several domains should normally give each domain its own document root.

The path itself does not make a site work. NGINX must select the correct server block, be able to traverse and read the directory, and have request handling configured for the application. PHP sites additionally need a PHP-FPM handoff; placing .php files under the root is not sufficient.

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

What the NGINX document root actually controls

NGINX uses the root directive to choose a filesystem directory. It then appends the requested URI to that directory when looking for a file. For example, with:

root /srv/my-site/html;

a request for /images/logo.png maps to /srv/my-site/html/images/logo.png. The same rule applies whether the root is under /var/www, /srv, or another filesystem location.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application:Upgraded attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Warranty & Support: Our Electric air duster comes with 5 years warranty and 24/7 customer service. During this period, if you have any questions,pls kindly feel free to contact us.

The root belongs inside the server block that should answer the request. If a different server block wins because of its address, port, or server_name, NGINX can look in a different directory even though the file exists on disk. The active configuration, not the directory name alone, determines what visitors receive.

“Even for a single-site configuration, while you can place your website at /var/www/html, you may want to place the website’s files at a different location in your filesystem.”

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.
Ubuntu documentation

Choose a layout that matches your deployment

Deployment Typical root Isolation Best fit
One site on the default Ubuntu install /var/www/html None beyond the single site A simple static site or first installation using Ubuntu’s default server block
One custom site /srv/my-site/html Separate directory for the site Projects that should not use the distribution’s default web tree
Several domains /var/www/example.com/html and one equivalent directory per domain Each domain has its own files and server-block configuration Hosting multiple independent sites on one server

Using /var/www/html

On Ubuntu’s default NGINX setup, /var/www/html is the conventional single-site location. The default server block also provides index-file handling and a try_files $uri $uri/ =404 fallback. That fallback checks whether the requested path is a file or directory and returns HTTP 404 when neither exists.

This location is a convention, not a requirement. It is convenient when you are replacing the default page or deploying one small site, but it gives you no automatic separation if you later add unrelated domains.

Using a custom /srv directory

A custom root such as /srv/my-site/html keeps the project clearly separated from the default site. Ubuntu documents this style explicitly. The important part is that the server block says root /srv/my-site/html;; NGINX does not infer the location from the directory name.

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth

Using one root per domain

For multiple sites, create a directory for each domain, such as /var/www/example.com/html. Give each domain a matching file in /etc/nginx/sites-available/, then enable that file with a symlink in /etc/nginx/sites-enabled/. Separate roots prevent one site’s public files from being mixed with another’s and make deployments, backups, and permissions easier to reason about.

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.

Set up a single custom site step by step

1. Create the public directory

Create the directory that will contain files intended for web access:

sudo mkdir -p /srv/my-site/html

The final html directory is the document root in this example. You can choose another name, but use the same path consistently in the server block and deployment process.

2. Put only public assets there

Place the site’s index file, HTML, CSS, JavaScript, images, and application entry points under the root. A minimal static site might contain:

/srv/my-site/html/index.html
/srv/my-site/html/css/site.css
/srv/my-site/html/images/logo.png

Do not put database dumps, private keys, deployment credentials, environment files containing secrets, or backups in this tree. Anything inside the document root is potentially addressable through an HTTP request unless another rule blocks it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.

3. Set traversal and read permissions

The NGINX worker must be able to traverse every parent directory and read the files it serves. Ubuntu’s custom-site example applies mode 755 to the custom tree before creating the index file:

sudo chmod -R 755 /srv/my-site

Treat that as a starting point for a read-oriented static site, not a reason to make every directory writable. If an application must write uploads, cache data, or generated files, grant write access only to the specific directory that needs it. Keep the rest of the document root read-only to the web process where practical.

4. Define the server block

Create a site configuration in /etc/nginx/sites-available/. A basic static configuration has the following shape:

server {
    listen 80;
    server_name example.com www.example.com;

    root /srv/my-site/html;
    index index.html index.htm;

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

Change the domain names and root to match your deployment. The index directive tells NGINX which files to try when a request ends at a directory. The try_files rule makes missing files return 404 instead of silently being passed elsewhere.

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

5. Enable the site

For a multi-site layout, enable the configuration by linking it into sites-enabled:

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

Use a distinct filename for each domain. Make sure an old default server block is not unexpectedly handling the same address and port; the selected block must contain the root you intend to use.

6. Validate and reload NGINX

Check the syntax before applying the change:

sudo nginx -t

Only after the test succeeds, reload the service:

sudo systemctl reload nginx

A reload applies the configuration without the full stop-and-start cycle. If the syntax test reports an error, correct the named file or directive and test again before reloading.

How to place files for several domains

Use a repeatable one-domain/one-root pattern. For example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
/var/www/example.com/html/index.html
/var/www/another-example.net/html/index.html

Then create a server-block file for each domain in /etc/nginx/sites-available/. Each file should specify its own server_name, root, index handling, and request routing. Enable both files with separate symlinks in /etc/nginx/sites-enabled/, test the complete configuration, and reload NGINX once the test passes.

This arrangement isolates ordinary content, but it does not by itself isolate operating-system users, application processes, or databases. If two applications require different write permissions, give each only the directories it needs and avoid sharing writable paths between sites.

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Static files versus a PHP application

LEMP commonly means Linux, NGINX, MySQL, and PHP, but NGINX does not execute PHP merely because a file ends in .php. A PHP-enabled site needs a location block that matches PHP requests and forwards them to the installed PHP-FPM socket. The socket filename depends on the distribution and PHP version, so use the socket that actually exists on your server rather than copying a version-specific path blindly.

The public root should still contain only files meant to be requested by visitors. Keep application configuration, secrets, command-line scripts, deployment keys, and database credentials outside it whenever the framework permits. The PHP-FPM handoff changes how matching requests are processed; it does not change which directory NGINX searches first.

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

Why NGINX returns 404 when the file exists

A 404 usually means NGINX looked somewhere other than the directory you checked, or the request path did not match the file exactly. Work through these checks in order:

  1. Confirm the active root. Open the server-block file selected for the request and verify that its root points to the directory containing the file.
  2. Check the URI-to-path mapping. Remove the leading URI from the request and append the remainder to the root. A request for /about/index.html with root /srv/my-site/html expects /srv/my-site/html/about/index.html.
  3. Check spelling and case. Linux filesystems are normally case-sensitive, so Logo.png and logo.png are different names.
  4. Check directory traversal and file readability. NGINX needs execute/traverse permission on parent directories and read permission on the file. A correct filename still fails when a parent directory blocks traversal.
  5. Check the server name and enabled file. Ensure the domain’s configuration is linked in sites-enabled and that another server block is not answering the request.
  6. Check request handling. A try_files rule can intentionally return 404 for paths that are not real files or directories. Dynamic applications may need an application fallback rather than the static rule.
  7. Retest and reload. Run sudo nginx -t, then sudo systemctl reload nginx after correcting the configuration.

Permissions and write access without weakening the site

Serving a file requires read access; serving a path also requires traverse access on every directory above it. Write access is a separate requirement and should be narrowly scoped. A static site normally needs no web-process write permission at all. An application that accepts uploads can use one dedicated upload directory while leaving code and configuration unwritable.

  • Keep secrets, backups, deployment keys, and database files outside the public root.
  • Give NGINX read access to public assets and traverse access to their parent directories.
  • Grant application write access only to directories that explicitly need generated content or uploads.
  • Do not treat a broad recursive write permission as a fix for a 404; it creates a security problem while failing to address an incorrect root or server block.

A practical decision checklist

  • One Ubuntu site, minimal customization: start with /var/www/html and the default server block.
  • One project with its own deployment tree: use a custom directory such as /srv/my-site/html and point root to it explicitly.
  • Several domains: create one document-root directory and one enabled server-block file per domain.
  • Static content: serve index files and use try_files $uri $uri/ =404 unless the application requires another fallback.
  • PHP: configure PHP-FPM forwarding in addition to placing public files under the root.
  • Any deployment: keep non-public data outside the root, verify permissions, test with nginx -t, and reload only after a successful test.

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.