この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
検証用にさくっとBasic認証をかけたWebサーバーが欲しかったので、Dockerで作りました。
せっかく作ったので docker-compose.yml
ファイルを共有します。
構成概要図
イメージとしてはこんな図のような環境を作ります。
dockerでBasic認証かけたプロキシサーバーのコンテナを作って、それをApacheを動かしているコンテナに転送します。
DockerでBasic認証をかけたWebサーバーを動かす
2つのコンテナ動かすので、Docker Composeを利用して動かします。
次の docker-compose.yml
を作成します。
docker-compose.yml
version: '3.9'
services:
nginx-proxy:
image: quay.io/dtan4/nginx-basic-auth-proxy
ports:
- 8080:80
environment:
BASIC_AUTH_USERNAME: username
BASIC_AUTH_PASSWORD: password
PROXY_PASS: http://apache/
SERVER_NAME: proxy.internal
networks:
- container-link
apache:
image: httpd
networks:
- container-link
networks:
container-link:
name: docker.internal
次のコマンドを実行すれば、dockerでBasic認証をかけたWebサーバーが動きます。
$ docker-compse up -d
動作確認
8080番ポートで公開しているので、次のように8080番ポートを指定してブラウザからアクセスするとBasic認証のユーザー名とパスワード入力を促されます。
docker-compose.yml
で、ユーザー名は「username」、パスワードは「password」で設定しています。
正しいユーザー名とパスワードを入力すると、Webサーバーにアクセスできます。
ユーザー名とパスワードを入力せずにキャンセルすると、401エラー が発生してアクセスできません。
curl
コマンドを使って、Authorizationヘッダを付与してBasic認証を突破してアクセスができることも確認してみます。
$ BASIC_AUTH_URL=<<YOUR_EC2_PUBLIC_IP>>
$ curl http://${BASIC_AUTH_URL}:8080/ \
-H "accept: application/json" \
-H "Authorization:Basic $(echo -n username:password | openssl base64)"
こちらでもWebサーバーにアクセスできました。
誤ったパスワードを送ると、 401エラー が発生してアクセスできないことも確認できます。