![使用基本身份验证保护 Nginx 上的 /analytics,但允许访问 .php 和 .js 文件?](https://linux22.com/image/649566/%E4%BD%BF%E7%94%A8%E5%9F%BA%E6%9C%AC%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E4%BF%9D%E6%8A%A4%20Nginx%20%E4%B8%8A%E7%9A%84%20%2Fanalytics%EF%BC%8C%E4%BD%86%E5%85%81%E8%AE%B8%E8%AE%BF%E9%97%AE%20.php%20%E5%92%8C%20.js%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
希望这是正确提问的地方。我已在 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 /
规则在使用顺序中排在第一位。使用可以=
改变这一点。