nginx XSendFile e permissões

1

Sou um novato no Linux. Eu tenho um script PHP que, com base na correção de alguns parâmetros, decide se deve servir um arquivo para o usuário ou não. Estou servindo arquivos através do recurso XSendFile no nginx. Eu gostaria de bloquear o acesso direto aos arquivos para que o usuário seja forçado a baixá-los através do script PHP.

Meu problema é que, se eu definir as permissões de arquivos para 640, quando tento fazer o download diretamente, recebo um 403 Forbidden, mas não consigo fazer o download com o script também. Considerando que, se eu configurá-lo para 644, eu sou capaz de fazer as duas coisas (eu pensei que precisava adicionar a permissão Executar para habilitar o download direto de um arquivo. Eu estava errado?) Como devo configurar permissões para conseguir o que eu preciso?

Editar: observe que não posso mover os arquivos acima do diretório raiz da web, porque alguns arquivos devem ter acesso direto, enquanto outros não devem. Então eu tenho que mantê-los todos no mesmo diretório e ser capaz de ativar / desativar o download direto seletivamente.

    
por pt2ph8 19.05.2011 / 10:46

1 resposta

1

O Nginx tem uma diretiva para isso. Você pode marcar um local como "interno", o que significa que o Nginx o processa apenas como resultado de reescrita, X-Accel-Redirect e similares. Se você tentar solicitar esse local diretamente, receberá 404 "Não encontrado".

location /downloads {
  internal;
}

location /scripts {
  # should issue X-Accel-Redirect: /downloads/file.ext
}
    
por 19.05.2011 / 14:31