2015-03-13 118 views
0

我在wowza媒體服務器前面使用nginx來緩存視頻塊。 Live視頻發佈在wowza服務器上,並且wowza使其可以被HLS協議使用,該協議基本上是一系列返回視頻文件的http GET調用。我的配置文件看起來像 -帶有變量ip地址的Nginx proxy_pass

location /live_proxy { 
      proxy_cache my_zone; 
      add_header X-Proxy-Cache $upstream_cache_status; 
      proxy_cache_valid any 10m; 

      proxy_pass http://wowza_server_ip:1935/live; 
    } 

上述配置有效。但在這裏,你可以看到wowza_server_ip被硬編碼爲conf文件。我有多臺wowza服務器,它們將位於nginx服務器後面,並且可以在任何這些wowza服務器上發佈實時流。我有一個外部apis,告訴哪個wowza服務器正在發佈一個流。那麼有沒有辦法通過查詢參數傳遞ip地址,以便nginx可以請求適當的wowza服務器。的網址的video-- http://nginx_ip:8080/live_proxy/myStream/playlist.m3u8

+0

一些探索後,我發現,proxy_pass指令可以有變量。但我無法弄清楚如何將這些變量傳遞給nginx.http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass。 – gaurav 2015-03-31 12:28:50

回答

0

使用上游消費

例子:

upstream wowza_servers { 
    server xxx.xxx.xxx.xxx: 1935; 
    server xxx.xxx.xxx.xxx: 1935; 
    server xxx.xxx.xxx.xxx: 1935; 
} 

location /live_proxy { 
     proxy_cache my_zone; 
     add_header X-Proxy-Cache $upstream_cache_status; 
     proxy_cache_valid any 10m; 

     proxy_pass http://wowza_servers/live; 
} 
+0

但是,如果我理解它正確,就會以循環方式代理不同的wowza服務器。那不是我想要的。由於實時流只在一個特定的流的wowza服務器上可用,我想發送請求到適當的wowza服務器。我也知道流的wowza服務器的IP地址,所以我可以發送它的URL像http://...playlist.m3u8?ip = wowza_ip – gaurav 2015-03-13 14:03:29

+0

好吧抱歉,我錯了。您可以使用粘性會話http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky將您的目標ip服務器傳遞給cookie或URI。還有更靈活的'學習'粘性指令,但只有付費訂閱纔有效。如果你真的想用'get_url_param'指令來使用getparam作爲路由鍵,你可以檢出haproxy。 – coulix 2015-03-13 14:09:18

+0

實際上,我正在使用nginx中存在的rtmp模塊,haproxy沒有相應的功能,所以我不能避免使用nginx。如果nginx不能解決我的問題,那麼我會同時使用haproxy和nginx。但如果可能的話,我想避免這種情況。 – gaurav 2015-03-13 14:24:59