nginx: ubicación de ips permitidas; ¿PHP incluye?

nginx: ubicación de ips permitidas; ¿PHP incluye?

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:

  1. =
  2. ^~
  3. None
  4. ~
  5. ~*
  6. @

por lo tanto, una solicitud /internal/foo.phpcoincide /internalprimero 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 elincludedirectiva, 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;
    }

información relacionada