使用HTTP BASIC AUTH保护Docker容器

时间:2015-12-28 08:59:07

标签: security authentication nginx docker

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

Docker Engine版本> = 1.9.1

2 个答案:

答案 0 :(得分:4)

通常,您使用容器进行身份验证,例如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"。

查看用例

答案 1 :(得分:1)

以防万一:这是一个基于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

访问www.example.com(将替换为您的实际名字),然后系统会提示您输入用户名和密码(在这种情况下为“ test” /“ test”)。