使用基本驗證保護 Nginx 上的 Piwik,但允許存取 piwik.js

使用基本驗證保護 Nginx 上的 Piwik,但允許存取 piwik.js

我在我的伺服器上運行了 nginx,並且最近使用以下配置安裝了 Piwik:

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

我正在嘗試關閉 /piwik.js 的基本身份驗證,因為它是從應用程式本身請求的,並且總是要求輸入用戶名和密碼。

我在這裡做錯了什麼?

--- 更新 1 ---

更新的配置:

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

現在,我可以從應用程式存取 piwik.js,並且還要求對analytics.example.org 進行基本驗證。但是,當我單擊“取消”時,網站的一部分將被加載,接下來是基本身份驗證、取消、加載等。

--- 更新 2 ---

我還在指令中添加了基本的身份驗證內容location ~ .php$,現在它正在工作,但是將它放在兩個地方似乎不正確。無論如何,我可以讓它變得更好嗎?

答案1

最近遇到了類似的挑戰,您的位置區塊現在看起來是正確的:

Nginx:基於領域選擇性開啟/關閉 Auth Basic

持續的變化可能是由於瀏覽器快取造成的,這也導致我在這個主題上浪費了數小時的時間。每當您更改任何 http 身份驗證設定時,請完全關閉瀏覽器,最好將其重置,然後重新開啟頁面並查看新設定是否按預期工作。這對我來說很有效。

會將此添加為對上面答案的評論,但還沒有足夠的代表點。

相關內容