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