首页 > 解决方案 > docker 反向代理 - 如何使用 htpasswd 授权

问题描述

我想用基本的身份验证支持来保护我的反向代理服务器。根据 [read-me][1] 我已添加 -v /path/to/htpasswd:/etc/nginx/htpasswd到我的 docker-compose 文件中:

version: '2'
services:
    frontproxy:
        image: traskit/nginx-proxy
        container_name: frontproxy
        labels:
            - "com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen"
        restart: always
        environment:
            DEFAULT_HOST: default.vhost
            HSTS: "off"
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - /home/frank/Data/htpasswd:/etc/nginx/htpasswd
            - /var/run/docker.sock:/tmp/docker.sock:ro
            - "certs-volume:/etc/nginx/certs:ro"
            - "/etc/nginx/vhost.d"
            - "/usr/share/nginx/html"
    nginx-letsencrypt-companion:
        restart: always
        image: jrcs/letsencrypt-nginx-proxy-companion
        volumes:
            - "certs-volume:/etc/nginx/certs"
            - "/var/run/docker.sock:/var/run/docker.sock:ro"
        volumes_from:
            - "frontproxy"
volumes:
    certs-volume:

htpasswd文件包含我.htpasswd从工作 nginx 服务器的文件中复制的内容。我知道和之间的区别.htpasswdhtpasswd但不理解这里应该使用哪种格式和名称。

代理服务器连接到服务(在我的情况下是激进的)而不检查授权(密码不存储在浏览器中!)。

必须更改哪些内容才能使 nginx 检查授权?[1]:https ://github.com/nginx-proxy/nginx-proxy#readme

标签: jwilder-nginx-proxy

解决方案


我认为您误读了此处的 htpasswd 是一个文件夹,并且相应的 htpasswd 文件的名称必须与您的虚拟主机名匹配:

您必须在目录 /etc/nginx/htpasswd/$VIRTUAL_HOST 上创建一个名为其等效 VIRTUAL_HOST 变量的文件

这意味着:

  • 您将文件夹挂载到 docker 容器的 /etc/nginx/htpasswd 中
  • 在此文件夹中,您创建一个根据您的虚拟主机地址命名的 passwdfile,例如 example.de:
  • 您可以使用以下命令创建此相应文件: htpasswd -c example.de username

推荐阅读