考虑使用暴露某个端口的Web应用程序运行Docker容器。如何在访问URL(HTTP BASIC AUTH)之前应用其他安全层?
Docker Engine版本> = 1.9.1
答案 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”)。