solr-nightly:10.1.0-SNAPSHOT启用BasicAuth后UI认证异常求助
问题背景
在Docker中以host网络模式运行apache/solr-nightly:10.1.0-SNAPSHOT,指定--host 10.10.0.5连接3个ZK节点。执行docker exec -i solr10 bin/solr auth enable -type basicAuth -credentials admin:password启用基础认证后,后端API正常要求凭证,但Web浏览器访问UI时直接返回HTTP ERROR 401 Authentication failed, Response code: 401,不弹出凭证输入框。相同配置在9.10.1版本无此问题。
可能的解决方向
1. 强制Jetty对UI路径发送认证响应头
夜间版可能调整了Jetty默认配置,导致UI静态资源请求未触发Basic Auth的WWW-Authenticate响应头。可以添加SOLR_OPTS参数强制所有路径启用认证挑战:
environment: - ZK_HOST=10.10.0.2:2181,10.10.0.3:2181,10.10.0.4:2181 - SOLR_OPTS=-Dmetrics.jetty.host=0.0.0.0 -Dsolr.jetty.authentication.basic.force=true
重启容器后重试访问UI。
2. 替换--host参数为环境变量绑定
使用--host参数结合host网络模式可能导致主机头匹配异常,Solr仅处理指定IP的认证流程,浏览器请求的主机头不匹配时跳过挑战。改用SOLR_HOST环境变量绑定主机:
services: solr1: image: apache/solr-nightly:10.1.0-SNAPSHOT container_name: solr10 restart: unless-stopped network_mode: host environment: - SOLR_HOST=10.10.0.5 - ZK_HOST=10.10.0.2:2181,10.10.0.3:2181,10.10.0.4:2181 - SOLR_OPTS=-Dmetrics.jetty.host=0.0.0.0 volumes: - ./solr10:/var/solr
移除原command中的--host配置,重启容器测试。
3. 手动触发浏览器认证验证
如果是浏览器未收到认证响应头,可以直接在地址栏携带凭证访问:
http://admin:password@10.10.0.5:8983/solr
若UI能正常加载,说明问题出在认证响应头的发送逻辑,需要进一步检查Solr的security.json配置,确保forwardCredentials参数为true:
docker exec -i solr10 cat /var/solr/data/security.json
确认security.json中authentication部分包含"forwardCredentials": true,保证认证信息能传递到UI相关请求。
4. 检查夜间版UI认证逻辑bug
由于是快照版本,可能存在UI与Basic Auth适配的临时bug。可以尝试清理浏览器缓存后重试,或者切换到同一分支的最新夜间镜像,看是否已修复该问题。
内容的提问来源于stack exchange,提问作者miran80

