Proxy_store downloading half videos!

Hi,

We’re using proxy_store on the edge server for replicating requested
mp4
files and some of our users reported that some of the videos are half
sized
and therefore they are unable to stream whole video file on their end
(coming from the edge server). On digging into the access_logs of nginx,
i
found the 500 internal server errors for 10~20 videos and on checking
the
size of 500 error videos it was half of the size compare to the mirrored
video files on the origin. Please check the following error of the
culprit
video link :-

203.124.62.213 - - [18/Sep/2014:15:13:58 +0500] “GET
/files/videos/2014/09/12/1410536044adf1b-360.mp4?start=729 HTTP/1.1” 500
588 “http://lw3.files.com/files/videos/2014/09/12/” “Mozilla/4.0
(compatible; MSIE 8.0; Windows NT 6.0)”

I’d like to inform that the issue is coming for 40% of the videos.

error_log :-

2014/09/18 15:30:40 [error] 3883#0: *77490
“/var/www/html/files/videos/2014/09/16/141088548798bb1-360.mp4” mp4
start
time exceeds file duration, client: 175.110.88.213, server:
lw3.files.com,
request: “GET
/files/videos/2014/09/16/141088548798bb1-360.mp4?start=736.8
HTTP/1.1”

You can see the “start time exceeds error” on edge server but the video
link starting from start=736.8 exists on origin server.

Nginx config :-

server {

    listen       80;
    server_name lw3.files.com;
    root /var/www/html/tunefiles;
    location ~ \.(mp4|jpeg|jpg)$ {
           root   /var/www/html/tunefiles;
            mp4;
    error_page 404 = @fetch;

        }


    location ~ \.(php)$ {
            proxy_pass http://fl008.files.net:80;
    }



    location @fetch {
    internal;
    proxy_pass http://fl008.origin.com:80;
    proxy_store        on;
        proxy_store_access user:rw group:rw all:r;
    root /var/www/html/tunefiles;

}

}

Regards.
Shahzaib

nginx version: nginx/1.7.4
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
–conf-path=/etc/nginx/nginx.conf
–error-log-path=/var/log/nginx/error.log
–http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
–lock-path=/var/run/nginx.lock
–http-client-body-temp-path=/var/cache/nginx/client_temp
–http-proxy-temp-path=/var/cache/nginx/proxy_temp --user=nginx
–group=nginx --with-http_flv_module --with-http_mp4_module

On Thu, Sep 18, 2014 at 3:49 PM, shahzaib shahzaib
[email protected]

On 18 Sep 2014, at 14:49, shahzaib shahzaib [email protected]
wrote:

2014/09/18 15:30:40 [error] 3883#0: *77490
“/var/www/html/files/videos/2014/09/16/141088548798bb1-360.mp4” mp4 start time
exceeds file duration, client: 175.110.88.213, server: lw3.files.com, request:
“GET /files/videos/2014/09/16/141088548798bb1-360.mp4?start=736.8 HTTP/1.1”
location ~ .(mp4|jpeg|jpg)$ {

    location @fetch {
    internal;
    proxy_pass http://fl008.origin.com:80;
    proxy_store        on;
        proxy_store_access user:rw group:rw all:r;
    root /var/www/html/tunefiles;

}

Do you have the mp4 module enabled at the origin? If so then you have
partial mp4
downloaded from there and stored locally. Note proxy_pass without URI
passes
client URIs to the origin keeping the arguments (including start).

Yes, the mp4 modules is enabled on origin as well as edge. Could you
please
help me resolving the issue ?

Try this directive instead of yours to download the entire file from the
backend

proxy_pass http://fl008.origin.com$uri;

Thanks a lot for the solution Roman, i’ll get back to you after applying
the fix. :slight_smile:

Looks like on using the proxy_pass http://fl008.origin.com:80
http://fl008.origin.com$uri; it worked . Could :80 be the issue ?

On Thu, Sep 18, 2014 at 6:43 PM, shahzaib shahzaib
[email protected]

proxy_pass http://fl008.origin.com$uri;
It didn’t work instead the error 502 gateway started to show up when
proxying the request via proxy_pass.

On Thu, Sep 18, 2014 at 6:32 PM, shahzaib shahzaib
[email protected]

This issue is fixed, now i am getting another issue. Whenever user
requests
for new file which is not yet downloaded on the edge server, user gets
the
403 forbidden error on browser and on refreshing the browser, the same
video started to stream as well as download. Why the proxy_store is
showing
403 error on first time ?

On Thu, Sep 18, 2014 at 6:45 PM, shahzaib shahzaib
[email protected]

I have seen your directives and I am not nginx expert but there was
something like “try” for connections to a proxy server that will first
try one direction and if not able to download from there use the other
one.

Take a peak here:

You can define two backends: store and proxy.
First try store and then proxy.
(I do hope I am right about the assumption)

Eliezer

403 forbidden error was due to hotlinking protection on the origin
server.
It was fixed.

On Fri, Sep 19, 2014 at 5:29 AM, Eliezer C. [email protected]