Proteja o Piwik no Nginx com autenticação básica, mas permita o acesso piwik.js

Proteja o Piwik no Nginx com autenticação básica, mas permita o acesso piwik.js

Coloquei o nginx em execução no meu servidor e instalei recentemente o Piwik com esta configuração:

server {
  listen 443 ssl spdy;
  server_name analytics.example.org;
  root /srv/www/analytics.example.org;
  index index.php;

  ssl_certificate ssl-certificates/wildcard.example.org.crt;
  ssl_certificate_key ssl-certificates/wildcard.example.org.key;

  access_log           /var/log/nginx/analytics.example.org_access.log;
  error_log            /var/log/nginx/analytics.example.org_error.log;

  auth_basic           "HTTP Basic Authentication";
  auth_basic_user_file htpasswd/example;

  satisfy              any;
  include              example_ip;
  deny                 all;

  location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires max;
  }

  location = /robots.txt {
    return 200 "User-agent: *\nDisallow: /\n";
  }

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ .php$ {
    try_files $uri $uri/index.php =404;
    include fastcgi.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
  }

  location = /piwik.js {
    satisfy any;
    allow all;
    auth_basic off;
    try_files $uri =404;
  }
}

Estou tentando desativar a autenticação básica para /piwik.js, pois ela é solicitada pelo próprio aplicativo e está sempre solicitando nome de usuário e senha.

O que estou fazendo de errado aqui?

--- Atualização 1 ---

Configuração atualizada:

...
location = /piwik.js {
  satisfy any;
  allow all;
  auth_basic off;
  try_files $uri =404;
}

location / {
  auth_basic           "Bitte authentifiziere dich.";
  auth_basic_user_file htpasswd/pass;

  satisfy              any;
  include              pass_ip;
  deny                 all;

  try_files $uri $uri/ /index.php?$args;
}
...

Agora vou acessar piwik.js do aplicativo e também solicitar autenticação básica para analytics.example.org. Porém, quando clico em cancelar, parte do site é carregada, próxima autenticação básica, cancelamento, carregamento, etc.

--- Atualização 2 ---

Também adicionei o material básico de autenticação à location ~ .php$diretiva e está funcionando agora, porém tê-lo em dois lugares não parece certo. De qualquer forma, posso torná-lo mais agradável?

Responder1

Tive um desafio semelhante recentemente e seus bloqueios de localização agora parecem corretos:

Nginx: ativação/desativação seletiva do Auth Basic com base no domínio

O fluxo persistente provavelmente se deve ao cache do navegador, que me causou horas de perda de tempo também neste tópico. Sempre que você alterar qualquer configuração de autenticação http, feche totalmente o navegador, de preferência redefina-o, reabra a página e veja se as novas configurações funcionam conforme o esperado. Isso funcionou para mim.

Teria adicionado isso como um comentário à resposta acima, mas ainda não tenho pontos de representação suficientes.

informação relacionada