Nginx -- Static File Serving Confusion With Root & Alias

Better Stack Team
Updated on October 7, 2024

When configuring Nginx to serve static files, it’s important to understand the difference between the root and alias directives, as they handle file paths differently. Here’s a detailed explanation of each and how to use them correctly in your Nginx configuration.

root Directive

The root directive sets the root directory for the server or location block. The specified path is used to resolve file requests.

Usage Example

 
server {
    listen 80;
    server_name example.com;

    root /var/www/html;  # Root directory for this server

    location /images/ {
        # Files are served from /var/www/html/images/
    }

    location / {
        # Files are served from /var/www/html/
    }
}
  • Behavior: When using root, Nginx appends the URI requested by the client to the root directory specified. For example, a request to /images/logo.png will be resolved to /var/www/html/images/logo.png.

alias Directive

The alias directive, on the other hand, replaces the location part of the URI with the specified path. This is useful when the directory structure on the server does not match the URL structure.

Usage Example

 
server {
    listen 80;
    server_name example.com;

    location /images/ {
        alias /var/www/static/images/;
    }

    location / {
        root /var/www/html;
    }
}
  • Behavior: With alias, Nginx uses the specified path in place of the location part of the URI. For example, a request to /images/logo.png will be resolved to /var/www/static/images/logo.png.

Key Differences

  1. Path Concatenation vs. Replacement:
    • root: Appends the request URI to the root directory.
    • alias: Replaces the location part of the URI with the specified directory path.
  2. Configuration:
    • root: Typically used at the server or location block level to specify a directory for file serving.
    • alias: Used within a location block to map a URI to a specific directory, useful for more complex mappings.

Examples to Illustrate Differences

  1. Using root

     
    server {
        listen 80;
        server_name example.com;
    
        root /var/www/html;
    
        location /images/ {
            # /images/ will map to /var/www/html/images/
            # For example, /images/logo.png maps to /var/www/html/images/logo.png
        }
    
        location /static/ {
            # /static/ will map to /var/www/html/static/
            # For example, /static/css/style.css maps to /var/www/html/static/css/style.css
        }
    }
    
  2. Using alias

     
    server {
        listen 80;
        server_name example.com;
    
        location /images/ {
            alias /var/www/static/images/;
            # /images/ will map to /var/www/static/images/
            # For example, /images/logo.png maps to /var/www/static/images/logo.png
        }
    
        location /static/ {
            alias /var/www/static_files/;
            # /static/ will map to /var/www/static_files/
            # For example, /static/css/style.css maps to /var/www/static_files/css/style.css
        }
    }
    

Common Pitfalls

  • Trailing Slash with alias: Ensure that you end the path specified with alias with a trailing slash if it’s used in the context of a location that also ends with a slash.
  • Mixing root and alias: Avoid using root and alias together in the same location block as it leads to unexpected behavior. Use alias to completely replace the URI path when needed.

Summary

  • Use root: When you want to specify a base directory for file requests where the path is appended to the root.
  • Use alias: When you need to map a URI to a specific directory path directly, replacing the location part of the URI.

By understanding these directives and their proper usage, you can configure Nginx to serve static files accurately according to your directory structure and URL mapping needs.

Got an article suggestion? Let us know
Licensed under CC-BY-NC-SA

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Make your mark

Join the writer's program

Are you a developer and love writing and sharing your knowledge with the world? Join our guest writing program and get paid for writing amazing technical guides. We'll get them to the right readers that will appreciate them.

Write for us
Writer of the month
Marin Bezhanov
Marin is a software engineer and architect with a broad range of experience working...
Build on top of Better Stack

Write a script, app or project on top of Better Stack and share it with the world. Make a public repository and share it with us at our email.

community@betterstack.com

or submit a pull request and help us build better products for everyone.

See the full list of amazing projects on github