はじめに
こんにちは。ponponnsanです。今回は、basic認証をnignxで設定してみました。いずれはSSOでnginx経由から複数サービスへアクセスできるようにしたいです。
経緯
VPNでサービスを展開した際、VPNに繋げてさえいれば、URLにアクセスできてしまう。今回は簡単に対象人数を限定的としたいため、basic認証で入れる人を限定する。
方法
- ローカルで、.htpasswdファイルを作成
- nginxコンテナにマウント
- confにbasic認証の設定を追加
それぞれの手順を詳しくみていきましょう。
ローカルで、.htpasswdファイルを作成
パッケージインストール
ubuntuで操作しています。
sudo apt-get install apache2-utils
.htpasswd ファイルの作成
htpasswd -bc .htpasswd USER USER_PASSWORD
htpasswd -b .htpasswd USER_DEV USER_PASSWORD
オプションコマンドの-b
は、パスワードをコマンドラインから入力できます。履歴には残ってしまうようなので、適宜調整してください。私の場合はこっちの方が早いと感じたのでつけています。
-c
はユーザーとパスワードが書かれたファイルを新規作成/上書きすることができます。上書きされたくない場合は、-c
をとってください。
このような認証ファイルはgit ignoreにして、gitにプッシュすることがないよう気をつけてください。
nginxコンテナにマウント
ローカルで.htpasswdファイルが作成されたら、docker-composeのnginxコンテナにマウントしていきます。
version: '3.9'
services:
nginx:
image: nginx:1.24
container_name: nginx
networks:
- network
volumes:
- ./nginx-template:/etc/nginx/templates
- ../.htpasswd:/etc/nginx/.htpasswd #追記
confにbasic認証の設定を追加
nginxの設定を、私はnginx-template/nginx.conf.template
に記載しています。
そして、nginx.conf.template
に先ほどのbasic認証の設定を追記していきます。
server {
listen ${NGINX_PORT_HTTPS} ssl;
server_name ${SERVER_ADDRESS};
location ~ /api {
auth_basic "Restricted"; #追記
auth_basic_user_file /etc/nginx/.htpasswd; #追記
include uwsgi_params;
uwsgi_pass unix:///tmp/uwsgi.sock;
...
}
location /files {
auth_basic "Restricted"; #追記
auth_basic_user_file /etc/nginx/.htpasswd; #追記
alias /var/www/backend/files;
...
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
最後に
docker composeを上げ直せば動くと思います。このとき、うまく動かない場合はimageを削除して再度上げなおしてみてください。
.htpasswdファイルは、ローカルで作成するため、共同開発をする際は、各自で作成する必要があります。
参考文献