Nginx - 如何处理具有多个子目录的 URL

Nginx - 如何处理具有多个子目录的 URL

在我的应用中,我有一个路由 /audio/*,因此该路由会拾取任意数量的音频文件夹。我不确定如何在 Nginx 中处理它。基本上,我需要访问这些文件 a) 存储在站点根目录之外的文件和 b) 4 或 5 个目录深度的文件。我只能输入 3 作为别名,因为其他文件事先是未知的。

这是一个网址

10.0.2.2 - - [03/Nov/2017:23:21:33 +0000] "GET /vagrant/TestRails/Music/VA%20-%20Punk%2045%20Chaos%20in%20the%20City%20of%20Angels%20and%20Devils%20(2016)/20%20The%20Hollywood%20Squares%20-%20Hollywood%20Square.mp3 HTTP/1.1" 500 595 "http://127.0.0.1:8080/audio/vagrant/TestRails/Music/VA%20-%20Punk%
2045%20Chaos%20in%20the%20City%20of%20Angels%20and%20Devils%20(2016)/20%20The%20Hollywood%20Squares%20-%20Hollywood%20Square.mp3" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

我的网站在/vagrant/TestRails/MediaExplorer,音频文件存在于/vagrant/TestRails/Music/.../

编辑:发布整个服务器块:

server {
  listen      80;
  server_name localhost:8000;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/errorlog debug;
  root       /vagrant/TestRails/MediaExplorer;
  index      /home.slim;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    try_files /system/maintenance.html $uri $uri/home.slim $uri.html @ruby;
   }

   location @ruby {
     proxy_pass http://media_explorer;
   }

   # ** This is the block in question **
   location /audio/ {
     alias /vagrant/TestRails/Music/Album1.....n/files;
     try_files $uri /subfolder/$uri $uri/;
     autoindex on;
  }

这是可以做到的吗?到目前为止,它显然不起作用。我尝试了一些 try_files,虽然事情完全被搞砸了,但不确定这是否是可以使用的方法。

答案1

尝试这个

location /audio/ {
  root /audio/root/path/to/audio/ 
}

答案2

针对此问题,我想到几个可能的解决方案。

  • 让你的应用程序找出文件在磁盘上的实际位置,然后返回X-Accel-重定向到 nginx 来提供实际的文件服务。
  • 使用覆盖文件系统让所有文件都出现在同一个(虚拟)目录中。

相关内容