現在、一部のコンテンツを提供する302リダイレクトを実装するサーバーがあります。たとえば、ユーザーのリクエスト:
http://Origin1.example.com/m3ugen/segsrc/jet480.mp4
そして、このサーバーは302で応答し、以下を提供します。
http://Origin1.example.com/Segments/HLS_TS/segsrc/jet480.mp4-20140831-142558.m3u8`
これは私たちにとって問題であり、Nginxにこれを処理させてよりユーザーフレンドリーにし、302リダイレクトを処理しない一部のプレーヤーと連携させたいと考えています。
私たちが欲しいのは:
ユーザーリクエストhttp://frontend.example.com/hls/jet480.mp4.m3u8
で、nginxが受け取りました。
Nginxがhttp://Origin1.example.com/m3ugen/segsrc/jet480.mp4
にリクエストを送信
Nginxはリダイレクトコード302 http://Origin1.example.com/Segments/HLS_TS/segsrc/jet480.mp4-20140831-142558.m3u8
を受信します
Nginxはhttp://Origin1.example.com/Segments/HLS_TS/segsrc/jet480.mp4-20140831-142558.m3u8
にリクエストを送信し、302リダイレクトなしでユーザーに直接応答を提供します。
これはNginxで実行できると思いますが、それについてはあまり経験がありません。どんな助けでも大歓迎です。
P.D.オリジンサーバーを構成できません。 Helix Serverを使用し、m3u8プレイリストを提供するときに、ファイルごとに変化するタイムスタンプを追加します。
これは理想的ではなく、これを実行する代わりにクリーンなワークフローを作成する方がはるかに良いでしょう。しかし、好奇心から、これは可能かどうか疑問に思う人々にとって有益かもしれません。
はい、そうです、_error_page
_、rewrite
、map
、_proxy_intercept_errors
_および_proxy_redirect
_ディレクティブと_$upstream_http
_ varパターン。
Nginxが駆動するように設計されているパスから遠く離れていることに注意してください。
_map $upstream_http_location $redirect_uri {
"~http://[^/]+/(?<location_uri>.*)$" "$location_uri";
}
upstream Origin {
server Origin1.com;
}
server {
listen 80;
server_name nginx-front.com;
proxy_set_header Host "Origin1.com";
proxy_redirect http://Origin1.com/ /;
location ~ ^/hls/(\w+)\.mp4\.m3u8$ {
proxy_pass http://Origin/m3ugen/segsrc/$1.mp4;
proxy_intercept_errors on;
error_page 301 302 = @handler;
}
location @handler {
rewrite ^ /$redirect_uri break;
proxy_pass http://Origin;
}
}
_