You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理VoIP电话Web端的auth_basic认证透传及配置问题

配置冗余项清理建议
  • root、index 指令可以直接删除:当前server块全量走反向代理逻辑,不会加载本地静态文件,这两个配置完全不会生效,保留无意义。
  • server_name _ 是Nginx默认的兜底匹配规则,如果你这台服务器的443端口仅部署这一个服务,可直接保留;如果有多个域名对应不同服务,修改为你实际绑定的访问域名即可。
认证透传解决方案

问题根因

  1. 你生成的admin:22222的Base64编码错误:当前使用的YWRtaW46MjIyMjIK是输入字符串带换行的编码结果,正确无换行的编码应为YWRtaW46MjIyMjI=,后端无法识别错误编码的认证头,因此返回401要求认证。
  2. 客户端输入的Nginx层Basic认证的Authorization头会默认转发到后端,覆盖你手动设置的认证头,导致后端收到的是Nginx层的认证信息,验证失败。
  3. 后端验证失败返回401时携带的WWW-Authenticate头会被Nginx转发到浏览器,触发浏览器再次弹出认证框,形成死循环。

修复后的完整配置

server {
    listen 443 default_server ssl;
    server_name _;

    # 证书配置保留即可
    ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
    ssl_protocols TLSv1.2; # 前端仅启用TLS1.2,符合安全要求

    # Nginx层认证配置
    auth_basic "VoIP phone";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        # 明确指定和后端通信使用SSL3.0,避免协议协商失败
        proxy_ssl_protocols SSLv3;

        # 先清空客户端传来的Authorization头,避免覆盖后端认证信息
        proxy_set_header Authorization "";
        # 填入正确的后端账号Base64编码
        proxy_set_header Authorization "Basic YWRtaW46MjIyMjI=";
        # 隐藏后端返回的认证头,避免浏览器弹出二次认证框
        proxy_hide_header WWW-Authenticate;

        # 原有代理配置保留
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
        proxy_pass https://192.168.100.51;
        proxy_http_version 1.1;
     }
}

验证步骤

配置修改后执行nginx -t检查语法无误,再执行nginx -s reload重载配置,访问时仅需要输入你设置在.htpasswd里的新账号密码即可直接进入管理页面,不需要再输入后端的默认账号。

内容的提问来源于stack exchange,提问作者Matthai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:24:06