検証用にDockerでBasic認証をかけたWebサーバーを作ってみた
検証用にさくっとBasic認証をかけたWebサーバーが欲しかったので、Dockerで作りました。
せっかく作ったので docker-compose.yml
ファイルを共有します。
構成概要図
イメージとしてはこんな図のような環境を作ります。
dockerでBasic認証かけたプロキシサーバーのコンテナを作って、それをApacheを動かしているコンテナに転送します。
DockerでBasic認証をかけたWebサーバーを動かす
2つのコンテナ動かすので、Docker Composeを利用して動かします。
次の 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エラー が発生してアクセスできないことも確認できます。