使用基本身份验证保护 Nginx 上的 /analytics,但允许访问 .php 和 .js 文件?

使用基本身份验证保护 Nginx 上的 /analytics,但允许访问 .php 和 .js 文件?

希望这是正确提问的地方。我已在 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 /规则在使用顺序中排在第一位。使用可以=改变这一点。

相关内容