【问题标题】:Securing a Docker container with HTTP BASIC AUTH使用 HTTP BASIC AUTH 保护 Docker 容器
【发布时间】:2022-05-04 05:27:26
【问题描述】:

考虑运行一个 Docker 容器,其中的 Web 应用程序暴露了某个端口。如何在访问 URL(HTTP BASIC AUTH)之前应用额外的安全层?

Docker 引擎版本 >= 1.9.1

【问题讨论】:

标签: security authentication nginx docker


【解决方案1】:

通常情况下,您专门使用一个容器进行身份验证,例如 NGiNX。
这在“Authenticating proxy with nginx”中有描述,不仅增加了基础认证,还增加了ssl(https)

然后,该 Web 服务器将反向代理到您的容器。

您有一个更通用的解决方案(基于反向代理 NGiNX)jwilder/nginx-proxy

nginx-proxy 设置一个运行 nginx 的容器,docker-gen
docker-gen 为 nginx 生成反向代理配置,并在容器启动和停止时重新加载 nginx。

使用“Automated Nginx Reverse Proxy for Docker”查看用例。

【讨论】:

    【解决方案2】:

    这是一个基于jwilder/nginx-proxy Basic Auth support 的说明的配置示例:

    docker-compose.yml 文件(通过运行docker-compose up -d 使用):

    version: '2.1'
    
    services:
      nginx-proxy:
        container_name: nginx-proxy
        restart: always
        image: jwilder/nginx-proxy
        networks: 
          - proxynet
        ports:
          - "80:80"
        volumes:
          - /srv/docker/nginx/htpasswd:/etc/nginx/htpasswd
          - /etc/nginx/vhost.d
          - /usr/share/nginx/html
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
    networks:
      proxynet:
        external: true
    

    这是一个简单的容器,它使用该代理作为域名www.example.com

    version: '3.3'
    
    services:
       example:
         container_name: www.example.com
         image: php:7.2-apache
         restart: always
         networks:
           - proxynet
         expose:
           - "80"
         environment:
           - VIRTUAL_HOST=www.example.com
           - VIRTUAL_PORT=80
    
    networks:
      proxynet:
        external: true
    

    /srv/docker/nginx/htpasswd/ 下,放置一个www.example.com 文件,包含:

    test:wTVo4pnGgDWBo
    

    访问http://www.example.com(替换为您的实际域名),然后系统会提示您输入用户名和密码(在本例中为test:test)。

    【讨论】:

    • 有趣的例子,它说明了我自己的答案。 +1
    • 我正在运行该代码,但出现错误.. WARNING: /etc/nginx/dhparam/dhparam.pem was not found. Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'
    • dhparam.pem 确实是强制性的:要自动生成 SSL 证书,您可以看看优秀的 github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多