希望这是正确提问的地方。我已在 Nginx Web 服务器上设置并运行 Piwik,并使用 HTTP 基本身份验证对其进行保护,如下所示。
location /analytics {
alias /var/www/piwik/;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/pass;
try_files $uri $uri/ /index.php;
}
location ~ ^/analytics(.+\.php)$ {
alias /var/www/piwik$1;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
这对于保护非常有用www.example.com/analytics。但是,由于每个页面上都有 Piwik 跟踪标签,因此系统会提示用户在每个页面上登录。在官方常见问题解答,该问题已针对 Apache 得到解决,但没有针对 Nginx 得到解决。
如果您在 Piwik 文件上使用 HTTP 身份验证(基本或摘要),则应将 piwik.php 和 piwik.js 从此身份验证中排除,否则您网站上的访问者将会收到身份验证弹出提示。
除了这两个之外,我可以使用哪种 Nginx 规则来保护该目录中的所有文件?是否可以对位置块进行负正则表达式匹配?我见过使用.htaccess,但没有关于 Nginx 的问题。其他类似的问题有这里,这里, 和这里。
任何帮助,将不胜感激!
答案1
这个怎么样:
location = /analytics/piwik.php {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param /var/www/piwik/piwik.php;
}
location = /analytics/piwik.js {
try_files $uri;
}
该=
运算符表示这些规则优先。您当前规则的问题在于该location /
规则在使用顺序中排在第一位。使用可以=
改变这一点。