Nginx反向代理重定向

Nginx反向代理重定向,nginx,nginx-reverse-proxy,nginx-config,Nginx,Nginx Reverse Proxy,Nginx Config,我有一个Nginx反向代理。在反向代理中下载mp3文件时,如何将其重定向到真实的服务器URL 谢谢。要发送到多个后端,请声明第一个后端并向其发送代理 server { listen 6777; location ~ \.(mp3|wav)$ { return 301 http://10.10.1.1:8080$request_uri; }

我有一个Nginx反向代理。在反向代理中下载mp3文件时,如何将其重定向到真实的服务器URL


谢谢。

要发送到多个后端,请声明第一个后端并向其发送代理

server {
            listen 6777; 
                location ~ \.(mp3|wav)$ {
                return 301 http://10.10.1.1:8080$request_uri;
                }
             
                location / {
                proxy_pass http://backend;
                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";
               }

}
编辑:正如您所指出的,这只适用于代理。如果你特别想重定向,你需要选择一个。您可以编写一些Lua或NJ来随机选择一个,或者使用由任何具有随机性的内置变量(例如
$msec
)驱动的
映射来接近相同的行为。下面的示例不会给出严格的均匀分布,但它确实做到了这一点,而且非常简单

第二,关于使用301永久移动的注意事项:这告诉客户端记住重定向并在将来转到该地址。这很好,只要你把地址弄对了,它永远不会改变。如果您确实需要更改它,这将成为一个问题,因为您必须让每个客户端首先清除其缓存

为了避免这一点,考虑增加过期。多长时间由您决定,但关键是它给了您一个退出条款,强制客户端偶尔与服务器重新验证,以防服务器发生更改。与此同时,他们仍然可以从更快的客户端重定向中获益

编辑:更好的是,对于这样的情况,您可以有效地进行负载平衡,请使用302,这样相同的客户端将始终返回,并且每次都可以选择不同的上游

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";
    }
}
测试似乎工作正常,也符合预期(检查
位置
s):


你能展示一下你到目前为止的反向代理配置,以及“真正的服务器URL”是什么吗?谢谢你的评论。请核对答案。我想不使用代理直接发送请求。我有3个后端服务器,10.10.1.1 10.10.1.2 10.10.1.3如何添加多个?非常感谢您的评论。但是我试过这个。这是chrome控制台日志<代码>头部http://mp3servers/ net::ERR\u NAME\u未解析
当然!你说得对,这对重定向{bangs head on desk}不起作用。因此,要么你只需要重定向到你的一个mp3服务器,要么你需要代理转发到上游。如果这有助于确定是哪种情况,那么您在这种情况下想要重定向的理由是什么…?谢谢,我想使用302重定向,因为用户在loadbalancer上下载mp3时存在高带宽问题。我不知道如何解决这个问题,如果我使用302,请求将直接发送到mp3服务器。再次感谢。您使用的是什么版本的nginx?我们也许可以用NJS做这件事,非常简单。NJS版本是1.18。NJS有什么例子吗?非常感谢你。
$ 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