Por que o local filho desativa a localização pai no Nginx?

1

Eu quero desativar o access_log para um arquivo php.

location ~ \.php$ {
    location ~ ^/dontlog\.php$ {
        access_log off;
    }

    # fastcgi stuff
    ...
}

Isso faz com que o dontlog.php não vá embora fastcgi, ele apenas se torna um arquivo de texto, não um script php. Outros arquivos php passam por isso. access_log off funciona.

Eu não entendo porque isso acontece. É porque se a nova localização for encontrada, as localizações dos pais são ignoradas? Eu cansei de colocá-lo depois do código fastcgi, mesmo resultado.

    
por Qiao 08.05.2018 / 15:20

1 resposta

1

Veja a postagem do blog abaixo para uma boa explicação sobre a herança do nginx. Infelizmente, é complicado pelo fato de que diferentes tipos de opções de configuração são herdados de maneiras diferentes. No seu exemplo, suspeito que você esteja usando fastcgi_pass , que não herda.

Action directives are where it starts to get interesting. They are confined to one context and will never inherit downwards, they can however be specified in multiple contexts and in some cases will be executed for each context

link

Observe também o seguinte exemplo (do mesmo blog), que mostra que a configuração de um único valor fastcgi_param em um bloco aninhado substituirá todos os valores de um pai.

server {
    access_log /var/log/nginx/access.log;
    include fastcgi.conf;

    location ~ ^/calendar/.+\.php$ {
        access_log /var/log/nginx/php-requests.log; # If this executes then server context one never does.

        fastcgi_param ENV debug; # This *overwrites* the higher context array.
        include fastcgi.conf     # Therefore we include it in *this* context again.
    }
}
    
por 08.05.2018 / 15:35

Tags