meu PHP inclui:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
}
Tento permitir o acesso aos arquivos em um diretório por localização:
location ~ /internal {
allow IP;
deny all;
}
Funciona, mas os arquivos php neste diretório podem ser baixados.
Responder1
Tenha em mente que: O Nginx sempre escolhe apenas um bloco de localização para corresponder a uma solicitação. A ordem de pesquisa é:
=
^~
None
~
~*
@
portanto, uma solicitação /internal/foo.php
é correspondida primeiro pelo local do prefixo /internal
, depois a pesquisa é encerrada e a expressão regular não é verificada. É por isso que você recebe uma caixa de diálogo de download ao solicitar arquivos PHP.
Para evitar duplicação, coloque a diretiva comum em um arquivo separado e use oinclude
diretiva, algo assim:
/etc/nginx/php.conf
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
/etc/nginx/nginx.conf
location /internal {
allow IP;
deny all;
location ~ ^/internal(.*\.php)$ {
include php.conf;
}
}
location ~ \.php$ {
include php.conf;
}
Responder2
Tente adicionar um local php para dentro do local /internal, como:
location ~ /internal/\.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.socket;
include /etc/nginx/fastcgi_params;
}