
我一直在嘗試在 SSL 網站中設定受密碼保護的目錄,如下所示:
/etc/nginx/sites-available/default
server {
listen 443:
ssl on;
ssl_certificate /usr/certs/server.crt;
ssl_certificate_key /usr/certs/server.key;
server_name server1.example.com;
root /var/www/example.com/htdocs/;
index index.html;
location /secure/ {
auth_basic "Restricted";
auth_basic_user_file /var/www/example.com/.htpasswd;
}
}
問題是當我嘗試存取 URL 時https://server1.example.com/secure/
,出現「404:未找到」錯誤頁面。
我的 error.log 顯示以下錯誤:
011/11/26 03:09:06 [error] 10913#0: *1 no user/password was provided for basic authentication,
client: 192.168.0.24, server: server1.example.com, request: "GET /secure/ HTTP/1.1",
host: "server1.example.com"
但是,我能夠為普通 HTTP 虛擬主機設定受密碼保護的目錄,沒有任何問題。
是配置問題還是其他什麼問題?
答案1
可能是 auth_basic_user_file 的路徑問題,您的絕對路徑使 nginx 感到困惑:
http://wiki.nginx.org/HttpAuthBasicModule#auth_basic_user_file
從0.6.7版本開始,檔案名稱路徑是相對於nginx設定檔nginx.conf的目錄,而不是相對於nginx前綴目錄。
我不確定你在其他情況下是如何工作的。文件中的引用表明您應該擁有類似的內容:
auth_basic_user_file htpasswd/www.example.com
如果您的伺服器設定檔為“/etc/nginx/nginx.conf”,則密碼檔案為“/etc/nginx/htpasswd/www.example.com”。
您可以透過執行「sudo nginx -t」來檢查 nginx 配置。如果存在配置錯誤,即身份驗證文件不在預期的位置,它應該在那時告訴您。