MP4 module and X-Accel-Redirect


I currently have a setup involving nginx-extras (1.1.19) and PHP,
making heavy use of the X-Accel-Redirect heades to serve files with
previous authentication. This also enables range requests and so on,
which work flawlessly.

Sadly, I can’t seem to make this approach work with the MP4 streaming
module. It works as expected with a standalone mp4 file and the
?start= parameter works just fine. But passing a request like this:


Does not work and yields the entire file instead.

My config approach is the following:

location ~ .php$ {

fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

fastcgi_index index.php;

include fastcgi_params;



location ~ .mp4$ {

location /files/ {
rewrite_by_lua ’
…misc script to track connections…
alias /home/service/files/;

location /priority {
rewrite ^ /request.php last;

I cannot try any more or different combinations for the mp4 directive,
I’ve tried to put it everywhere and just in a few places, and still,
can’t manage to get anything. Some time Google shows some message
similar to this but dead in the wind without answer.

Thank you for your time.

I have finally resorted to a mixed approach:

  • I generate symbolic links (ln -s) from the concealed ‘internal’
    location to a folder in the public root, only for the files I need
  • That folder has a location {} directive, containing the mp4;
    parameter to enable streaming support
  • This location has an access_by_lua directive, which passes, using
    ngx.location.capture, a copy of the request to a local API (written in
    PHP) and validates the access
  • Also rate limiting

That way I can mimic the usual approach where PHP does all these
checks, in a much more complicated way… But still, it works.

On Sat, Apr 21, 2012 at 2:18 AM, Adrián Navarro [email protected]

           fastcgi_read_timeout 300;
   location /priority {

Thank you for your time.

Adrián Navarro / (+34) 608 831 094