mi PHP incluye:
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;
}
Intento permitir el acceso a archivos en un directorio por ubicación:
location ~ /internal {
allow IP;
deny all;
}
Funciona, pero se pueden descargar los archivos php de este directorio.
Respuesta1
Tenga en cuenta que: Nginx siempre elige solo un bloque de ubicación para coincidir con una solicitud. El orden de búsqueda es:
=
^~
None
~
~*
@
por lo tanto, una solicitud /internal/foo.php
coincide /internal
primero con la ubicación del prefijo, luego la búsqueda finaliza y no se verifican las expresiones regulares. Es por eso que aparece un cuadro de diálogo de descarga cuando solicita archivos PHP.
Para evitar duplicados, coloque la directiva común en un archivo separado y use elinclude
directiva, algo como esto:
/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;
}
Respuesta2
Intente agregar una ubicación php para el interior de la ubicación /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;
}