Sou um administrador do Apache experiente em uma vida passada, mas decidi dar um mergulho e aprender o nginx. Até agora, tudo parece bastante intuitivo, mas está claro que eu ainda não internalizei o jeito nginx de fazer as coisas, então estou certo de que este é um problema fácil de resolver, mas não consigo encontrar uma resposta óbvia.
Eu tenho um servidor que usa o servidor php-fpm para PHP onde desejo restringir o acesso a alguns subdiretórios no meu documento raiz pelo IP de origem (por exemplo: phpmyadmin, alguns scripts de teste que eu escrevi, etc.). Por alguma razão, a restrição que tenho no lugar parece funcionar bem para diretórios e arquivos, mas os arquivos PHP servidos pelo servidor FastCGI aparentemente ignoram essa restrição de acesso. Eu verifiquei que esse é o caso criando arquivos de teste de tipos diferentes no diretório restrito. Arquivos de texto e HTML são de fato negados e retornam um 403, mas os arquivos PHP não importam que seus conteúdos pareçam ser analisados e retornados ao cliente.
Aqui estão as seções relevantes da configuração do meu site:
# pass all PHP scripts to FastCGI server socket
location ~ \.php$ {
# Filter out arbitrary code execution
location ~ \..*/.*\.php$ {return 404;}
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# allow access to tools pages as necessary
location ~ /tools/ {
allow 10.11.12.13/32;
allow 10.11.12.14/32;
deny all;
}
Há mais na configuração, mas não diretivas que afetam arquivos PHP ou / tools / location, tanto quanto eu posso dizer. O comportamento que estou procurando é que todos os arquivos em / tools / sejam restritos, não importa o tipo de arquivo, a menos que haja uma regra de permissão explícita para o intervalo de IPs em questão.
Qualquer luz que você possa lançar sobre isso para me apontar na direção certa seria muito bem vinda!