Nginx nega acesso a todos os arquivos PHP, exceto um de determinados IPs

1

Estou tentando negar acesso a todos os nossos scripts PHP, exceto um para todos os outros, exceto um IP.

    location / {
            deny all;
            allow <one-ip-address>;

            error_page 403 goodpage.php;

            try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
            deny all;
            allow <one-ip-address>;

            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location /goodpage.php {
            allow all;

            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

No entanto, o que quer que eu faça, sempre acabo restringindo todos os * .php ou nenhum. A instalação é Ubuntu 16.04, Nginx 1.10.0, Agradecemos antecipadamente.

    
por golstar 09.03.2017 / 11:05

1 resposta

1

Você precisa entender a ordem de avaliação dos blocos location . Consulte este documento para obter detalhes.

A solução simples seria alterar o local do prefixo para um local de correspondência exata. Por exemplo:

location = /goodpage.php {
    ...
}

Como a Orphans aponta, a instrução deny all; precisa estar após qualquer instrução allow mais específica. Consulte este documento para obter detalhes.

    
por 09.03.2017 / 11:20