flv streaming and proxy_pass

Igor Sysoev is at rambler-co.ru
Tue Feb 24 13:02:05 MSK 2009


On Wed, Feb 18, 2009 at 07:39:41PM +0200, Karolis wrote:

> hi list,
> 
> I am using nginx / apache combination to stream flv files.
> Nginx serves static files and forwards dynamic requests to apache/mod_php.
> 
> Request flow would be as follows:
> 
> - client requests some file
> - nginx rewrites the filename to a local cache dir
> - if file is found in the cache dir, nginx sends the file
> - if file is not found, then request is passed to apache, which will 
> create the file and send the contents.
> 
> For flv files we want flv streaming.
> 
> The rules I am using to make this work are as follows:
> 
>    # Map request url to cache dir
>    location /dbfile {
>            rewrite  "^/dbfile/([0-9]{3})([0-9]{3})([0-9]{3})/(.*)$" 
> /cache/$1/$2/$1$2$3__$4  last;
>    }
> 
>    # Forward PHP requests to apache, in case we don't have cache yet
>    location ~ ^/cache/ {
>        if (!-f $request_filename) {
>            proxy_pass  http://127.0.0.1:8080;
>        break;
>        }
>    }
> 
>    # Handle FLV streaming
>    location ~ ^/cache/(.*)\.flv$ { flv; }
> 
> In this configuration, proxy_pass works, but flv streaming doesn't.
> If I move FLV "location" directive above proxy_pass, then flv will work, 
> and proxy_pass won't.
> 
> How do I get them both to work together? I don't want streaming of 
> proxied requests, I only want to
> flv-stream the files that are on local filesystem.

    location /dbfile {
        rewrite  "^/dbfile/([0-9]{3})([0-9]{3})([0-9]{3})/(.*)$" 
                 /cache/$1/$2/$1$2$3__$4  last;
    }
 
    location /cache/ {
        flv;
        error_page  404  = @apache;
    }

    location @apache {
        proxy_pass  http://127.0.0.1:8080;
    }

However, Apache should pass flv headers by itself.


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list