Negar que tudo seja substituído por outro bloco de localização

3
location /_private {
    deny    all;
}

location ~ \.php$ {
    # Workaround PHP vulnerability:
    # http://forum.nginx.org/read.php?2,88845,page=3
    try_files   $uri =404;

    include /etc/nginx/fastcgi_params;
    keepalive_timeout 0;

    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass    unix:/tmp/php.socket;
}

Eu gostaria de negar acesso a tudo, que está no diretório _private . Quando eu tento acessar _private/a , recebo erro 403, como deveria. Mas quando tento acessar _private/b.php , a parte deny all é completamente ignorada.

    
por Ragnis 13.12.2011 / 20:37

1 resposta

3

Faça com que seu /_private local tenha precedência sobre a correspondência de expressão regular:

location ^~ /_private {

É isso.

A documentação do nginx tem boas informações sobre qual bloco de localização será aplicado a uma determinada solicitação. Para citar:

  1. Directives with the "=" prefix that match the query exactly. If found, searching stops.
  2. All remaining directives with conventional strings. If this match used the "^~" prefix, searching stops.
  3. Regular expressions, in the order they are defined in the configuration file.
  4. If #3 yielded a match, that result is used. Otherwise, the match from #2 is used.
    
por 13.12.2011 / 20:46

Tags