Nginx的 – 如何处理有多个子目录的url

在我的应用程序中,我有一个路由/audio/ *,所以任何数量的audio文件夹被路由拾取。 我不确定如何在Nginx中处理它。 基本上我需要访问这些文件:a)存储在网站根目录之外的文件; b)4或5个目录。 我只能把3作为别名,因为其他人事先不知道。

这是一个url

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 ,audio文件存在于/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,而事情完全抛弃,不知道如果这是反正使用的方法。

尝试这个

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

我可以想到几个可能的解决scheme。

  • 让您的应用程序将文件的实际磁盘位置进行分类,然后将X-Accel-Redirect返回给nginx以提供实际的文件。
  • 使用覆盖文件系统使文件全部出现在同一个(虚拟)目录中。