Nginx baixando arquivos php - Possível causa: expressões regulares

2

Problema

Estou tentando negar acesso a dois arquivos em minha raiz da web, update.php, install.php e requer autenticação para apc.php (também webroot).

Acho que neguei o acesso com sucesso, mas ao abrir o arquivo, ele é baixado em vez de ser executado.

Por exemplo, depois de inserir minha autenticação para IPADDRESS / apc.php, ele faz o download para o meu computador em vez de abrir. A mesma coisa acontece para update.php.

Se eu remover os blocos que fazem referência a esses três arquivos, ele funcionará com sucesso, mas é claro que eles não serão bloqueados. Como posso consertar isso?

Até agora

(Eu rearranjei para trazer os pedaços relevantes para o topo.)

Eu acho que o problema é este:

A única correspondência de local que eu posso começar a trabalhar é ^ ~, todos os outros são ignorados (por quê?), e a expressão ^ ~ pára a busca após a correspondência e então eu acho que ela nunca encontra o pedaço do PHP. Então, ele faz o download em vez de ser executado.

Eu tentei adicionar a configuração do php ao bloco:

location ^~ /update.php {
      allow 127.0.0.1;
      deny all;
      fastcgi_param SCRIPT_FILENAME /srv/www/mysite/public$fastcgi_script_name;
      fastcgi_pass 127.0.0.1:9000;
      include /etc/nginx/fastcgi_params;
}

Mas isso faz com que a página fique em branco.

Configuração do servidor

server {
      listen 8080;
        server_name website website.com;
        access_log /srv/www/website/logs/access.log;
        error_log /srv/www/website/logs/error.log;
        root /srv/www/website/public;


        location / {
           index index.php index.html index.htm;
           error_page 404 = @drupal;
        }

        ##deny access to update and install for everyone except the server
        location ^~ /update.php {
            allow 127.0.0.1;
            deny all;
        }

        location ^~ /install.php {
            allow 127.0.0.1;
            deny all;
        }


        ##authentication required to access apc.php
        location ^~ /apc.php {
            auth_basic "Restricted access"; #realm
            auth_basic_user_file /srv/www/website/public/.htpasswd-users;
        }

        ##drupal rewrite rules
        location @drupal {
            rewrite ^(.*)$ /index.php?q=$1 last;
        }

        ##secure private file directory
        location ~* /privatefiles {
             internal;
        }

        ##Add headers to advagg
        location ~* files/advagg_(?:css|js)/ {
            access_log off;
            expires    max;
            add_header ETag "";
            add_header Cache-Control "max-age=290304000, no-transform, public";
            add_header Last-Modified "Wed, 20 Jan 1988 04:20:42 GMT";
            try_files  $uri @drupal;
        }

        ## Replicate the Apache <FilesMatch> directive of Drupal standard
        ## .htaccess. Disable access to any code files. Return a 404 to curtail
        ## information disclosure. Hide also the text files.
        location ~* ^(?:.+\.(?:htaccess|make|txt|log|engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(?:\.php)?|xtmpl)|code-style\.pl|/Entries.*|/Repository|/Root|/Tag|/Template)$ {
            return 404;
        }

        location ~ \..*/.*\.php$ {
            return 403;
        }

        ##rules for running php
        location ~ \.php$ {
            try_files $uri =404;
            include /etc/nginx/fastcgi_params;
            if ($uri !~ "^/default/files/") {
                fastcgi_pass 127.0.0.1:9000;
            }
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /srv/www/website/public$fastcgi_script_name;
         }


 }
    
por split_account 27.11.2013 / 20:54

1 resposta

0

Pode ser que a expressão

location ^~ /...

está errado? Não deveria ler:

location ~ ^/... 

?

Por que você precisa de uma expressão regular aqui?

location /install.php

deve estar ok.

    
por 28.11.2013 / 09:44