Проблема
Я пытаюсь запретить доступ к двум файлам в моем корневом веб-каталоге, 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
должно быть хорошо.