我有一个Nginx反向代理。在反向代理中下载mp3文件时,如何将其重定向到真实的服务器URL。
谢谢。
答案 0 :(得分:1)
要发送到多个后端,请先声明一个upstream
并对其进行代理。
编辑:正如您所指出的那样,这仅适用于代理。如果您特别想重定向,则需要选择一个。您可以编写一些Lua或NJS来随机选择一个,也可以通过map
来实现相同的行为,$msec
由具有某种随机性的任何内置变量驱动,例如map $msec $mp3server {
~[0-2]$ 10.10.1.1:8080;
~[3-5]$ 10.10.1.2:8080;
~[6-9]$ 10.10.1.3:8080;
}
server {
listen 6777;
location ~ \.(mp3|wav)$ {
#expires 1h;
#return 301 http://$mp3server$request_uri;
# or
return 302 http://$mp3server$request_uri;
}
location / {
proxy_pass http://example.com/;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
。下面的示例不会为您提供严格的均匀分布,但是它确实可以完成工作,并且确实很简单。
第二,关于使用“永久移动301”的警告:告诉客户端记住重定向,以后再转到该地址。只要您正确地指定了地址,那就太好了,而且永远-永远-都不会改变。如果您确实需要更改它,则将成为一个问题,因为您将必须让每个客户端首先清除其缓存。
为避免这种情况,请考虑添加有效期。多长时间取决于您,但是关键是它通过强制客户端在服务器发生更改时偶尔重新验证服务器,从而为您提供了get-out子句。同时,它们仍然受益于更快的客户端重定向。
编辑:更好的是,对于这样可以有效地实现负载平衡的事情,请使用302,这样同一客户端将始终返回并可以每次选择不同的上游。
Location
似乎可行并且可以期望进行测试(请检查$ curl -I http://127.0.0.1:6777/foo.mp3
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Wed, 12 Aug 2020 15:08:40 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://10.10.1.1:8080/foo.mp3
Expires: Wed, 12 Aug 2020 16:08:40 GMT
Cache-Control: max-age=3600
$ curl -I http://127.0.0.1:6777/foo.mp3
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Wed, 12 Aug 2020 15:08:41 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://10.10.1.2:8080/foo.mp3
Expires: Wed, 12 Aug 2020 16:08:41 GMT
Cache-Control: max-age=3600
$ curl -I http://127.0.0.1:6777/foo.mp3
HTTP/1.1 301 Moved Permanently
Server: nginx/1.18.0
Date: Wed, 12 Aug 2020 15:08:42 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://10.10.1.3:8080/foo.mp3
Expires: Wed, 12 Aug 2020 16:08:42 GMT
Cache-Control: max-age=3600
s):
(s1, e1), (s2, e2), ..., (sn, en)
答案 1 :(得分:0)
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.bundle.min.js"></script>
<div style="width: 100%; height: 250px;">
<canvas id='canvas_bar'></canvas>
</div>