検証用にDockerでBasic認証をかけたWebサーバーを作ってみた

検証用にさくっとBasic認証をかけたWebサーバーが欲しかったので、Dockerで作りました。 せっかく作ったのでdocker-compose.ymlファイルを共有します。
2021.02.18

この記事は公開されてから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エラー が発生してアクセスできないことも確認できます。

参考