Bird
Raised Fist0
Nginxdevops~5 mins

Root directive in Nginx - Commands & Configuration

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
The root directive in nginx tells the server where to find the files it should serve to users. It solves the problem of linking web addresses to actual files on the server.
When you want to serve static files like HTML, CSS, or images from a specific folder on your server.
When you need to set the main folder for your website content so nginx knows where to look.
When you want to host multiple websites on one server and each site has its own folder.
When you want to change the folder nginx uses without moving files around.
When you want to test a new version of your website by pointing nginx to a different folder.
Config File - nginx.conf
nginx.conf
events {}

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

        root /var/www/example.com/html;

        location / {
            index index.html index.htm;
        }
    }
}

This configuration sets up a simple nginx server listening on port 80 for example.com.

The root directive tells nginx to look for files inside /var/www/example.com/html.

The location / block defines the main URL path and sets the default files to serve.

Commands
This command tests the nginx configuration file for syntax errors before applying changes.
Terminal
sudo nginx -t
Expected OutputExpected
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
This command reloads nginx to apply the new configuration without stopping the server.
Terminal
sudo systemctl reload nginx
Expected OutputExpected
No output (command runs silently)
This command fetches the homepage from the nginx server to verify it serves files from the root folder.
Terminal
curl http://example.com
Expected OutputExpected
<!DOCTYPE html> <html> <head> <title>Welcome to example.com!</title> </head> <body> <h1>Success! The nginx server is working.</h1> </body> </html>
Key Concept

If you remember nothing else from this pattern, remember: the root directive tells nginx the exact folder where your website files live.

Common Mistakes
Setting root inside the location block but forgetting to set it in the server block.
nginx may not find files correctly because root is overridden or missing in some locations.
Set the root directive in the server block or explicitly in each location block where needed.
Using a relative path instead of an absolute path for root.
nginx requires an absolute path to find files; relative paths cause errors or no files served.
Always use the full absolute path starting from root, like /var/www/example.com/html.
Not reloading nginx after changing the root directive.
Changes won't take effect until nginx reloads the configuration.
Run 'sudo nginx -t' to test, then 'sudo systemctl reload nginx' to apply changes.
Summary
The root directive sets the folder where nginx looks for website files.
Test nginx configuration with 'nginx -t' before reloading.
Reload nginx to apply changes and verify by accessing the site.

Practice

(1/5)
1. What does the root directive do in an nginx configuration?
easy
A. It sets the maximum number of client connections.
B. It defines the server's IP address.
C. It specifies the port number nginx listens on.
D. It sets the folder where nginx looks for files to serve.

Solution

  1. Step 1: Understand the purpose of the root directive

    The root directive tells nginx which folder to use as the base path for serving files.
  2. Step 2: Compare with other options

    Other options like IP address, port, or client limits are set by different directives, not root.
  3. Final Answer:

    It sets the folder where nginx looks for files to serve. -> Option D
  4. Quick Check:

    root = folder path for files [OK]
Hint: Root sets the base folder for files nginx serves [OK]
Common Mistakes:
  • Confusing root with listen directive
  • Thinking root sets server IP or port
  • Assuming root controls client limits
2. Which of the following is the correct syntax to set the root directory to /var/www/html inside a location block?
easy
A. root = /var/www/html;
B. root /var/www/html;
C. root: /var/www/html;
D. root /var/www/html

Solution

  1. Step 1: Recall nginx directive syntax

    Directives use the format: directive_name value; without equals or colons.
  2. Step 2: Check each option

    root /var/www/html; uses correct syntax: root /var/www/html;. Options A and C use invalid symbols, D misses the semicolon.
  3. Final Answer:

    root /var/www/html; -> Option B
  4. Quick Check:

    Correct syntax = root path followed by semicolon [OK]
Hint: No equals sign or colon; end with semicolon [OK]
Common Mistakes:
  • Using equals sign (=) after root
  • Omitting semicolon at end
  • Using colon (:) instead of space
3. Given this nginx config snippet inside a server block:
location /images/ {
    root /var/www/data;
}

If a client requests /images/pic.jpg, which file path will nginx try to serve?
medium
A. /var/www/data/images/pic.jpg
B. /var/www/data/pic.jpg
C. /images/pic.jpg
D. /var/www/html/images/pic.jpg

Solution

  1. Step 1: Understand root with location

    The root directive appends the full request URI to the root path.
  2. Step 2: Combine root and request URI

    Request URI is /images/pic.jpg. Root is /var/www/data. So nginx looks for /var/www/data/images/pic.jpg.
  3. Final Answer:

    /var/www/data/images/pic.jpg -> Option A
  4. Quick Check:

    root + full URI = file path [OK]
Hint: Root + full URI = file path nginx serves [OK]
Common Mistakes:
  • Assuming root replaces location prefix
  • Ignoring location path in file path
  • Confusing root with alias directive
4. You set root /var/www/html; inside a location /static/ block, but requests to /static/style.css return 404 errors. What is the most likely cause?
medium
A. The root path is incorrect or missing the /static/ folder.
B. You forgot to restart nginx after changing the config.
C. The location block should use alias instead of root.
D. The file style.css is not readable by nginx.

Solution

  1. Step 1: Understand root with location prefix

    Root appends the full URI, so nginx looks for /var/www/html/static/style.css.
  2. Step 2: Check folder structure

    If the actual files are in /var/www/html without the static subfolder, nginx won't find them, causing 404.
  3. Final Answer:

    The root path is incorrect or missing the /static/ folder. -> Option A
  4. Quick Check:

    Root + URI must match actual file path [OK]
Hint: Root must include location path or use alias [OK]
Common Mistakes:
  • Not matching root path to location URI
  • Assuming config reload fixes path errors
  • Confusing root and alias usage
5. You want nginx to serve files from /srv/www/site when users request /files/, but without including /files/ in the file path. Which configuration correctly achieves this?
hard
A. location /files/ { root /srv/www/site; }
B. location /files/ { alias /srv/www/site/files; }
C. location /files/ { alias /srv/www/site/; }
D. location /files/ { root /srv/www/site/files; }

Solution

  1. Step 1: Understand root vs alias behavior

    Root appends full URI to path, alias replaces location prefix with given path.
  2. Step 2: Match requirement to config

    To serve files from /srv/www/site without /files/ in path, alias must be used.
  3. Final Answer:

    location /files/ { alias /srv/www/site/; } -> Option C
  4. Quick Check:

    Use alias to strip location prefix from file path [OK]
Hint: Use alias to avoid adding location prefix to path [OK]
Common Mistakes:
  • Using root when alias is needed
  • Missing trailing slash in alias path
  • Confusing root and alias effects