使用 HTTP BASIC AUTH 保护 Docker 容器

Kho*_*zzy 2 security authentication nginx docker

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

Docker 引擎版本 >= 1.9.1

Von*_*onC 6

通常,您将一个容器用于身份验证,例如 NGiNX。
这在“ Authenticating proxy with nginx ”中有描述,不仅增加了基本的认证,还增加了ssl(https)

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

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

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

请参阅“用于 Docker 的自动 Nginx 反向代理”的用例。


Céd*_*oys 6

以下是基于jwilder/nginx-proxy 基本身份验证支持的说明的配置示例:

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
Run Code Online (Sandbox Code Playgroud)

这是一个简单的容器,它使用域名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
Run Code Online (Sandbox Code Playgroud)

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

test:wTVo4pnGgDWBo
Run Code Online (Sandbox Code Playgroud)

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