Nginx 中的重定向

Nginx 中的重定向

我正在设置一个简单的虚拟主机来模拟一些特定的响应,这些响应在生产中将来自单个 URL。举例来说,生产 URL 可能如下所示:

http://domain.com/getdeviceinfo/info.bin

它实际上以.ini格式返回文本。我在我的 webroot 中设置了几个测试文件,/info/(legacy|new)/(daily|monthly)/device.htm将测试几个不同的响应,我想设置重定向,以便我可以将相同的 url 重定向到适当的资源。测试 URL 可能看起来像这样:

http://devdomain.com/devicename/legacy/monthly/getdeviceinfo/info.bin

我想要做的是提取适当的值并提供(在此示例中)

/info/legacy/monthly/devicename.htm

Chrome 至少正在尝试下载一个叫做的东西info.bin

这是我的location区块:

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  alias /opt/dev/hughesnet-modem-simulator/info/$software/$plan;
  try_files $uri $uri $device.htm
}

我也尝试将alias值设置为 来/opt/dev/hughesnet-modem-simulator/info/$software/$device.htm代替try_files。我知道我刚刚搞砸了语法,但我不确定我哪里做错了。

任何见解都将不胜感激。

谢谢。

更新

我目前的location区块:

location ~ ^/(?<device>[^/]+)/(?<software>[^/]+)/(?<plan>[^/]+)/getdeviceinfo/info.bin$ {
  types {}
  default_type text/plain;
  alias /opt/dev/project-root/info/$software/$plan/$device.htm;
}

答案1

.bin默认映射到 MIME 类型application/octet-stream,这就是浏览器尝试下载它的原因。

要解决此问题,请覆盖块中的 MIME 类型映射location

location /.... {
    types { }
    default_type text/plain;
    # the rest of your stuff
}

答案2

混合使用 alias-with-variables 和 try_files 可能是导致问题的原因。不要使用别名,只需使用 root:

# Including the /s in the variables makes the try_files a little more efficient
location ~ ^(?<device>/[^/]+)(?<software>/[^/]+)(?<plan>/[^/]+)/getdeviceinfo/info.bin$ {
  # Set the root to the base of all the files
  root /opt/dev/hughesnet-modem-simulator/info;

  # construct the file path to append to the root
  try_files $software$plan$device.htm =404;
}

相关内容