插件窝 干货文章 nginx如何设置资源请求目录

nginx如何设置资源请求目录

location 目录 Nginx alias 606    来源:    2025-04-22

Nginx 资源请求目录设置指南

在 Nginx 中设置资源请求目录主要涉及配置 location 指令和 rootalias 指令。以下是详细的配置方法:

基本目录设置

1. 使用 root 指令

server {
    listen 80;
    server_name example.com;

    # 设置根目录
    root /var/www/html;

    location / {
        index index.html;
    }

    # 静态资源目录
    location /static/ {
        # 实际路径为 /var/www/html/static/
        # 会自动将URI中的/static/映射到文件系统的/static/目录
    }
}

2. 使用 alias 指令

location /images/ {
    # 使用alias时,URI中的/images/会被替换为指定的路径
    alias /var/www/media/;

    # 可选:设置目录列表显示
    autoindex on;
}

高级配置选项

1. 目录访问控制

location /protected/ {
    alias /var/www/protected_files/;

    # 禁止目录列表
    autoindex off;

    # 访问控制
    allow 192.168.1.0/24;
    deny all;

    # 基本认证
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

2. 设置默认文件

location / {
    root /var/www/html;
    index index.html index.htm default.html;
}

3. 文件缓存设置

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    root /var/www/html;
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

4. 防止目录遍历

location / {
    root /var/www/html;
    try_files $uri $uri/ =404;
}

5. 多个目录合并

location /assets/ {
    # 尝试按顺序查找文件
    try_files $uri @fallback;
}

location @fallback {
    root /var/www/alternative_assets;
}

实际应用示例

1. 网站主目录 + 静态资源子目录

server {
    listen 80;
    server_name example.com;

    root /var/www/example.com;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /static/ {
        # 静态文件缓存30天
        expires 30d;
        add_header Cache-Control "public";
    }

    location /uploads/ {
        alias /var/www/shared_uploads/;
        # 禁止PHP文件执行
        location ~ \.php$ {
            deny all;
        }
    }
}

2. 多个项目目录配置

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

    location /project1/ {
        alias /var/www/projects/project1/public/;
        index index.html;
    }

    location /project2/ {
        alias /var/www/projects/project2/dist/;
        index index.html;
    }
}

注意事项

  1. rootalias 的区别:

    • root 会将 location 的 URI 部分附加到指定的路径后
    • alias 会完全用指定的路径替换 location 的 URI 部分
  2. 路径末尾斜杠:

    • 对于目录,建议在 location 和 alias 指令中都加上斜杠
    • 例如:location /images/alias /path/to/images/
  3. 权限问题:

    • 确保 Nginx 工作进程用户(通常是 www-data 或 nginx)对目录有读取权限
    • 执行命令:chown -R www-data:www-data /var/www/
  4. 测试配置:

    • 修改配置后,使用 nginx -t 测试配置是否正确
    • 然后使用 systemctl reload nginx 重新加载配置

通过以上配置,您可以灵活地设置 Nginx 的资源请求目录,满足各种静态资源服务需求。