我正在尝试在 Raspberry Pi 上设置一个 nginx Web 服务器,以便从 Android 进行访问。Android v.14 坚持使用基本身份验证,但我无法让它工作。
我的家庭网络包括一个 CalDAV 日历,该日历托管在Baïkal上,使用 nginx 安装在运行 PiOS 的 Raspberry Pi 3B 上。所有东西都是最新版本。它应该允许我在桌面(Linux 和 Thunderbird)和运行OneCalendar的 Android 手机之间共享日历。当两个设备都连接到我的家庭网络时,它们应该会自动同步。它以前使用纯 http 工作,直到 Android 更新。
这三个设备的 IP 地址都在 192.168.1.* 范围内。我不太担心安全性,因为所有设备都在防火墙后面,所以下面的所有设备都尽可能地松懈,至少在它正常工作之前是这样。
我已经根据 nginx 文档设置了基本身份验证: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
sudo apt install apache2-utils
sudo htpasswd -c /etc/ssl/.htpasswd myuser
sudo vi /etc/nginx/sites-enabled/mysite
一切似乎都成功了。以下是我的站点文件位置部分中的新行:
auth_basic "Baikal";
auth_basic_user_file /etc/ssl/.htpasswd;
satisfy any;
allow 192.168.1.0/24;
deny all;
我在 nginx 文件中找不到 ssl 配置的迹象。
奇怪的是,Thunderbird“可以正常工作”,但 Android 却失败了,提示“不支持摘要式身份验证,请尝试在您的服务器上启用基本身份验证”。nginx 向手机报告“401 未授权”错误。nginx 错误日志中显示以下行:
http fastcgi header: "Status: 401 Unauthorized"
http fastcgi header: "WWW-Authenticate: Digest realm="BaikalDAV",qop="auth",nonce="66ddb6608ccb4",opaque="d66d5f0524036afcb61420e358f990ce""
WWW-Authenticate: Digest realm="BaikalDAV",qop="auth",nonce="66ddb6608ccb4",opaque="d66d5f0524036afcb61420e358f990ce"
我多次检查过这两个客户端是否使用相同的 URL(http://192.168.1.11:9999/cal.php/calendars/myuser/default)、用户名和密码。如能提供任何帮助以解决这些问题,我将不胜感激。
这些 WWW-Authenticate 标头不是由 Nginx 发送的,而是由 Web 应用本身发送的。您需要在Baïkal 的 config.yaml
dav_auth_type
中进行更改。