如何根据路由值在Nginx中创建动态根?

时间:2018-05-23 17:50:51

标签: nginx

我想要完成的是能够通过这样的路线:

  <div class="grid1">Some Text 1 | </div>
  <div class="grid1">Some Text 2 | </div>
  <div class="grid1">Some Text 3 | </div>
  <div class="grid1">Some Text 4 | </div>
  <div class="grid1">Some Text 5 | </div>
  <div class="grid1">Some Text 6 | </div>
  <div class="grid6">Some Text 7 | </div>

在Nginx中我希望它读取abc123然后调用一段代码(不要关心什么语言:php,python,golang,fortran ......)然后返回所需的实际密钥加载文件。

在我的配置中,我有这个:

mysite.com/abc123/file.mp3

当我传递server{ #lots of basic stuff here location / { mp4; mp4_buffer_size 1m; mp4_max_buffer_size 5m; root /my_path/; } } 时,这是有效的。如果该文件存在于abc123/file.mp3

,它将找到该文件并播放它

我想要的是将(从数据库/my_path/abc123/file.mp3转换为abc123 myKey123

首先,这是否可能?

如果是这样,我不确定如何处理这个问题。我知道这个问题可以有多种解决方案,但任何方向都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

PHP脚本可以使用X-Accel-Redirect标头发出重定向。这被nginx视为内部重定向,因此重写的URI不会向用户公开。 documentation在细节上有点薄,希望你能找到一个使用PHP的例子。

如果您可以使用唯一的前缀对重写的URI进行围栅,例如/download/myKey123/file.mp3,您可以使用internal指令保护文件不被直接访问。有关详细信息,请参阅this document。在这种情况下,您不需要混淆myKey123

location /download/ {
    internal;
    ...
}