Blocos de localização Nginx não se aplicam a arquivos .php dentro deles?

3

Portanto, para ajudar a evitar ataques de força bruta contra minha instalação do phpmyadmin, configurei o nginx para exigir a autenticação HTTP básica (nome de usuário e senha extras) e, em seguida, as solicitações precisam vir de um endereço IP da lista de permissões. No entanto, a lista branca de endereços IP funciona bem se eu rodar o link no entanto sem adicionar o bloco .php extra que eu poderia carregar link sem que meu IP esteja na lista de permissões. Esse problema não afeta a autenticação básica de HTTP. Existe uma razão pela qual isso acontece? De qualquer forma para contornar ter que adicionar blocos .php extras? Uma cópia da área de configuração do phpmyadmin está abaixo.

# Setup and secure phpMyAdmin
location /phpmyadmin/ {
  allow 1.2.3.4;
  deny all;
  auth_basic "phpMyAdmin - HTTP Basic Login";
      auth_basic_user_file /etc/nginx/pma_pass;
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    allow 1.2.3.4;
    deny all;
    }
}
    
por Nathaniel Suchy 20.05.2017 / 18:52

1 resposta

5

Na maioria das configurações PHP, há um location ~ \.php$ block que processa qualquer URI que termine com .php , portanto, a adição de restrições a outros location blocks afetará apenas os arquivos estáticos envolvidos. Consulte este documento para saber mais.

A solução mais limpa é usar um local de prefixo com o modificador ^~ , que garante que todos os URIs que começam com /phpmyadmin/ sejam processados por esse bloco e outros locations no nível superior não ignorem sua segurança . Consulte este documento para saber mais.

Como você descobriu, você precisará adicionar um location aninhado para manipular o PHP dentro desse bloco, mas todas as declarações de autenticação devem ser herdadas e não precisam ser repetidas dentro do bloco interno.

Por exemplo:

location ^~ /phpmyadmin/ {
    allow 1.2.3.4;
    deny all;
    auth_basic "phpMyAdmin - HTTP Basic Login";
    auth_basic_user_file /etc/nginx/pma_pass;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}
    
por 20.05.2017 / 19:11