插件窝 干货文章 配置nginx访问本地静态资源,本地图片,视频教程

配置nginx访问本地静态资源,本地图片,视频教程

location 配置 Nginx static 913    来源:    2025-04-01

配置Nginx访问本地静态资源(图片、视频等)教程

基本配置方法

以下是一个基本的Nginx配置示例,用于提供本地静态资源服务:

server {
    listen 80;
    server_name yourdomain.com;  # 替换为你的域名或IP

    # 静态资源根目录配置
    location /static/ {
        alias /path/to/your/static/files/;  # 替换为你的实际路径
        autoindex on;  # 可选:启用目录列表
    }

    # 图片资源单独配置
    location /images/ {
        alias /path/to/your/images/;
        # 设置图片缓存时间
        expires 30d;
    }

    # 视频资源单独配置
    location /videos/ {
        alias /path/to/your/videos/;
        # 视频文件通常较大,需要特殊配置
        sendfile on;
        tcp_nopush on;
        # 设置视频缓存时间
        expires 365d;
    }
}

详细配置说明

1. 基本静态文件服务

location /static/ {
    root /var/www/static;
    # 或者使用alias
    # alias /var/www/static/;

    # 防止目录遍历攻击
    location ~* \.(php|php5|sh|pl|py)$ {
        deny all;
    }
}

注意rootalias的区别: - root会将完整URI路径附加到指定目录后 - alias会使用指定路径完全替换URI中的匹配部分

2. 图片服务优化配置

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

    # 启用图片优化
    image_filter resize 800 600;  # 可选:动态调整图片大小
    image_filter_jpeg_quality 85;
}

3. 视频服务优化配置

location ~* \.(mp4|webm|ogg)$ {
    root /var/www/videos;
    expires 365d;

    # 启用视频流媒体支持
    mp4;
    mp4_buffer_size 1m;
    mp4_max_buffer_size 5m;

    # 限制视频下载速度(可选)
    limit_rate_after 10m;
    limit_rate 1m;
}

4. 大文件下载优化

location /downloads/ {
    alias /var/www/downloads/;

    # 大文件下载优化
    sendfile on;
    tcp_nopush on;
    aio on;

    # 限制下载速度(可选)
    limit_rate 500k;
}

安全配置建议

  1. 禁用不必要的HTTP方法
location /static/ {
    limit_except GET HEAD {
        deny all;
    }
}
  1. 防止目录遍历
location /static/ {
    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
    }
}
  1. 设置正确的MIME类型
types {
    image/webp webp;
    video/mp4 mp4;
    video/webm webm;
    video/ogg ogv;
}

完整示例配置

user www-data;
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include mime.types;
    default_type application/octet-stream;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 65;

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

        # 静态资源根目录
        location / {
            root /var/www/static;
            index index.html;
            autoindex off;
        }

        # 图片服务
        location /images/ {
            alias /var/www/images/;
            expires 30d;
            access_log off;
        }

        # 视频服务
        location /videos/ {
            alias /var/www/videos/;
            mp4;
            mp4_buffer_size 1m;
            mp4_max_buffer_size 5m;
            expires 365d;
        }

        # 禁止访问隐藏文件
        location ~ /\. {
            deny all;
        }

        # 错误页面
        error_page 404 /404.html;
        location = /404.html {
            root /var/www/errors;
            internal;
        }
    }
}

部署步骤

  1. 创建静态资源目录:
sudo mkdir -p /var/www/{static,images,videos}
sudo chown -R www-data:www-data /var/www
  1. 测试Nginx配置:
sudo nginx -t
  1. 重新加载Nginx配置:
sudo systemctl reload nginx
  1. 测试访问:

- 访问 http://yourdomain.com/images/test.jpg - 访问 http://yourdomain.com/videos/sample.mp4

常见问题解决

  1. 403 Forbidden错误

    • 检查目录权限:chmod -R 755 /path/to/files
    • 检查所有权:chown -R www-data:www-data /path/to/files
  2. 404 Not Found错误

    • 确认文件路径是否正确
    • 检查Nginx配置中的rootalias路径
  3. 视频无法播放

    • 确保服务器支持视频MIME类型
    • 检查视频文件是否完整
  4. 性能问题

    • 启用sendfiletcp_nopush
    • 考虑启用gzip压缩(对视频无效)

通过以上配置,你可以高效安全地使用Nginx提供本地静态资源服务。