如何为Azure Web App for Containers上的Web应用配置密码保护
Azure Web App for Containers 单固定密码访问保护配置方案
针对仅需单账号固定密码校验、无需搭建复杂用户管理体系的场景,优先选择以下低改造成本的方案,不需要额外部署独立身份服务:
方案1:零镜像修改,通过启动命令前置Basic Auth(推荐,10分钟完成配置)
该方案不需要修改原有业务代码、不需要重新构建容器镜像,直接在Azure门户配置即可生效:
- 本地生成Basic Auth规范的密码哈希,执行以下命令,将命令里的占位符替换为你要设置的用户名、固定密码,把输出的哈希串复制留存:
printf "自定义用户名:$(openssl passwd -apr1 你的固定访问密码)\n" - 进入Azure门户对应Web App的配置页,打开配置 > 常规设置面板,找到「启动命令」输入框,填入以下内容:
说明:Azure会自动向容器注入apt update && apt install -y caddy && echo '上一步生成的完整哈希串' > /tmp/.htpasswd && caddy reverse-proxy --from :$PORT --to http://localhost:原有容器内应用的监听端口 --basicauth /* /tmp/.htpasswd$PORT环境变量,不需要手动修改;如果原有应用默认监听80端口,直接把命令里的端口值替换为80即可 - 保存配置等待应用重启完成,之后访问站点会自动弹出浏览器原生的身份校验框,输入预设的用户名密码即可正常访问,校验失败会直接返回401未授权响应。
实现逻辑:通过启动命令临时安装轻量反向代理Caddy,所有外部请求先经过Caddy的密码校验,校验通过才会转发到容器内运行的原有业务服务,对业务逻辑完全无侵入。
方案2:调整容器镜像内置认证(适合可自定义构建镜像的场景)
如果你可以重新构建业务容器镜像,直接在容器内的Web服务层配置Basic Auth即可,不需要依赖启动命令装组件:
- 若用Nginx做反向代理,在对应站点的server配置块中加入以下规则,提前将生成好的htpasswd文件打入镜像或挂载到容器对应路径:
location / { auth_basic "演示站点访问校验"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:业务服务监听端口; } - 若业务是Node.js、Python、Java等直接启动的服务,不想额外加Nginx层,直接在服务入口加10行以内的中间件做Basic Auth请求头校验即可,不需要接入任何第三方用户管理SDK。
注意事项
- 所有配置里不要存储明文密码,统一存储哈希值,避免配置泄露后密码直接被盗用
- 配置完成后建议用浏览器无痕模式访问测试,避免本地缓存的无认证访问状态导致误判配置失效
- 后续如果需要取消密码保护,直接把启动命令改回原有容器的默认启动命令、或者移除Web服务里的认证配置即可,可随时回滚
内容的提问来源于stack exchange,提问作者movingabout
相关产品推荐
相关产品推荐

