Назад | Перейти на главную страницу

Nginx загружает файлы php - Возможная причина: регулярные выражения

Проблема

Я пытаюсь запретить доступ к двум файлам в моем корневом веб-каталоге, update.php, install.php и требовать аутентификации для apc.php (также веб-корневого каталога).

Я думаю, что успешно отказал в доступе, но при открытии файла он загружается, а не запускается.

Например, после ввода моей аутентификации для IPADDRESS / apc.php он загружается на мой компьютер, а не открывается. То же самое происходит с update.php.

Если я удалю блоки, ссылающиеся на эти три файла, он будет работать успешно, но, конечно, они не заблокированы. Как я могу это исправить?

До сих пор

(Я переставил так, чтобы соответствующие фрагменты оказались наверху.)

Думаю проблема вот в чем:

Единственное совпадение местоположения, с которым я могу работать, - это ^ ~, все остальные игнорируются (почему?), А выражение ^ ~ прекращает поиск после сопоставления, и поэтому я думаю, что оно никогда не находит фрагмент PHP. Так что он загружается, а не запускается.

Я попытался добавить конфигурацию php в блок, давая:

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

Но это просто приводит к тому, что страница становится пустой.

Конфигурация сервера

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


 }

Может быть, выражение

location ^~ /...

неправильно? Разве это не должно читаться:

location ~ ^/... 

?

Зачем вам здесь регулярное выражение?

location /install.php

должно быть хорошо.