nginx: localização para ips permitidos; PHP Inclui?

nginx: localização para ips permitidos; PHP Inclui?

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 é:

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

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 oincludediretiva, 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;
    }

informação relacionada