Nginx

使用基本身份驗證保護 Nginx 上的 Piwik,但允許訪問 piwik.js

  • June 11, 2015

我在我的伺服器上執行了 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$,它現在正在工作,但是在兩個地方使用它似乎並不正確。無論如何我可以讓它變得更好嗎?

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

Nginx:基於Realm的Auth Basic的選擇性開/關

持續不斷的變化可能是由於瀏覽器記憶體造成的,這也導致我在這個話題上浪費了數小時的時間。每當您更改任何 http auth 設置時,請完全關閉瀏覽器,最好重置它,然後重新打開頁面並查看新設置是否按預期工作。這對我有用。

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

引用自:https://serverfault.com/questions/686777