Nginx配置匹配错误目录 静态视频文件访问失败问题求助
问题根因
你当前配置中使用root指令的默认路径拼接逻辑为:root定义的路径 + location匹配的路径前缀 + 请求路径剩余部分,所以当你访问/videos/neuralAI.mp4时,Nginx会自动拼接出/pipelines/videos/neuralAI.mp4的查找路径,和你实际存放文件的/pipelines/assets/目录不匹配,因此触发文件不存在的报错。
解决方案
最优方案:替换root为alias指令
alias指令的逻辑是丢弃location匹配的路径前缀,直接用alias定义的路径拼接请求路径剩余部分,刚好匹配你的目录结构,修改后的location配置如下:
location /videos/ { access_by_lua_block { if(ngx.var.maintenance == "on") then local authorize = require("authorize") local maintenance = ngx.var.maintenance authorize.validate_access(nil, nil, "/videos", "{DEPLOYMENT}", maintenance) end } # 把原来的root替换为alias,注意末尾的斜杠必须保留 alias /pipelines/assets/; proxy_temp_path /usr/local/openresty/nginx/temp/proxy_temp; client_body_temp_path /usr/local/openresty/nginx/temp/client_body_temp; fastcgi_temp_path /usr/local/openresty/nginx/temp/fastcgi_temp; uwsgi_temp_path /usr/local/openresty/nginx/temp/uwsgi_temp; scgi_temp_path /usr/local/openresty/nginx/temp/scgi_temp; access_log /usr/local/openresty/nginx/logs/access.log; error_log /usr/local/openresty/nginx/logs/error.log; }
修改后访问/videos/neuralAI.mp4时,Nginx会直接查找/pipelines/assets/neuralAI.mp4,符合你的实际目录结构。
备选方案:调整目录结构
如果你不想修改Nginx配置,可以直接把/pipelines/assets目录重命名为/pipelines/videos,原有root配置无需改动即可正常访问。
生效验证
修改完成后执行以下操作确认配置生效:
- 执行
nginx -t检查配置语法是否正确,返回success代表配置合法 - 执行
nginx -s reload热重载配置,无需重启Nginx即可生效
内容的提问来源于stack exchange,提问作者learning fun。
相关产品推荐
相关产品推荐

