Nginx mp4 proteção hotlink não funciona

1

Eu tento proteger o hotlink para arquivos mp4, mas não funciona para mim.

Este é o código que estou usando:

  location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css)$ {
  valid_referers none blocked http://188.226.192.56;
  if ($invalid_referer) {
    return 403;
  }

  root   /usr/share/nginx/html;
  expires 1d;
}

Funciona bem para .jpg, .png, etc, mas não para mp4. O que estou fazendo errado?

Aqui está o meu conf nginx:

server {
listen       80;
server_name  ipaddress;

#charset koi8-r;

#access_log  logs/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index index.php index.html index.htm;
}

error_page  404              /404.html;
location = /404.html {
    root   /usr/share/nginx/html;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
    include        fastcgi_params;
}
location /usr/share/nginx/html/video/ {
    # activate flv/mp4 parsing for pseudostreaming
    flv;
    mp4;
    mp4_buffer_size     4M;
    mp4_max_buffer_size 10M;
}    
    location ~ .mp4$ {
    gzip off;
    gzip_static off;
    mp4;
    limit_rate_after 10m;
    limit_rate 1m;
}   
client_max_body_size    80m;

location ~* \.(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css)$ {
  valid_referers none blocked http://188.226.192.56;
  if ($invalid_referer) {
    return 403;
  }

  root   /usr/share/nginx/html;
  expires 1d;
}  

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}

}

Obrigado!

    
por Afternova 15.08.2014 / 13:36

1 resposta

1

O motivo é que você tem um bloco location ~ .mp4$ separado em sua configuração, que o nginx usa ao enviar os arquivos. Portanto, seu outro bloco location que evita hot-linking não é aplicado.

A maneira mais fácil de corrigir isso é incluir a prevenção de hot-linking no bloco de localização MP4 da seguinte forma:

location ~ \.mp4$ {
    valid_referers none blocked http://188.226.192.56;
    if ($invalid_referer) {
        return 403;
    }
    gzip off;
    gzip_static off;
    mp4;
    limit_rate_after 10m;
    limit_rate 1m;
}

Além disso, sua diretiva location /usr/share/nginx/html/video/ provavelmente é inútil. A menos que seus vídeos sejam acessados usando http://example.com/usr/share/nginx/html/video/videofile.mp4 como URLs, a diretiva nunca será usada. Você deve removê-lo. A diretiva location sempre precisa de um URI (parte após domínio na URL) para correspondência.

Outro problema na sua configuração é que você usa a diretiva root dentro de location blocks. Você deve usar root apenas no nível server e, em seguida, se precisar especificar outros caminhos para alguns locais de URL, use a diretiva alias nesses locais.

    
por 15.08.2014 / 15:48

Tags