はじめに
nginxつかってるときでも当然basic認証かけたいときってありますよね。
apacheは使わなくなった(もしくは入って無い)もののhtpasswd使ってbasicりたい!そんなときのメモ
アジェンダ
1. basic認証とhttpd-toolsのがいよう
basic認証
basic認証とは的な簡単な説明は別記事で書いてるのでそちらのリンクで済ませます
→ 【apache】basic認証をかけるメモ 〜 .htpasswdや.htaccessについて
httpd-tools
参考サイトのまんま引用です
httpd のツールは、管理者のコレクションとセキュリティ ツール本 Apache セキュリティ (オライリー) 用として開発されました。Apache httpd の監視、統計、ログ分析、DoS の検出、および防衛のためのツールを備えています。
参考 : Apache httpd tools
なぜhttpd-toolsをインストールするか
これも上記参考サイトに記載がありますが、
apacheは使わないがapacheファイミリーであるhtpasswdコマンドを使ってbasic認証をかけたいからですね。
2. httpd-toolsインストール
※ 一応update $ sudo yum update ※ インストール $ sudo yum install -y httpd-tools
簡単ですね。これでhtpasswdコマンドが使えるようになりました
3. htpasswdコマンドで.htpasswd作成
htpasswdコマンドで.htpasswdを作成します。
※ .htpasswdを置くディレクトリを作成して移動 ※ nginxで使いたいからここにしましたが最初はどこでも良いでしょう $ sudo mkdir /etc/nginx $ cd /etc/nginx ※ htpasswdコマンドで.htpasswd作成&ユーザ追加 ※ -cコマンドで新規作成。他オプションは後述 $ sudo htpasswd -b -m -c .htpasswd hoge hogepass ※ 中身見てみる $ cat .htpasswd hoge:D085DemY7wQYI ※ ユーザを追加&確認 $ sudo htpasswd -b .htpasswd piyo piyopass $ cat .htpasswd hoge:D085DemY7wQYI piyo:t6GHRD/miw7Ig
※ -mオプションでmd5ハッシュをかけたほうがより安全です
オプション
オプションは下記に書いたので参考にしてみてください
→ 【apache】basic認証をかけるメモ 〜 .htpasswdや.htaccessについて
4. nginxにbasic認証の設定を追加
説明
nginxの設定に下記を追記します
auth_basic "tekitou na bunsyou";
auth_basic_user_file /etc/nginx/.htpasswd;
auth_basicはこんな感じで表示されるものなのでなんでも良いです。

追記する場所は主に下記の2箇所で良いでしょう
- サイト全体にかけたいとき
- server {} の中
- サイトの中のディレクトリ単位にかけたいとき
- server {} の中のlocation {}の中
サイト全体にかける例
server {
listen *:80;
server_name example.co.jp;
auth_basic “auth basic”;
auth_basic_user_file /etc/nginx/.htpasswd;
}
ディレクトリ単位にかける例
server {
listen *:80;
server_name example.co.jp;
location /hoge/ {
auth_basic “auth basic”;
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
設定してみる
※ nginxのconfの場所はお使いのに合わせてください
$ sudo vi /usr/local/nginx/conf/extra/vhost.conf
---- vi追記 ----
server {
listen 5000;
server_name hoge.excample.com;
root /home/hoge;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
----------------
※ nginx再起動
$ sudo /etc/init.c/nginx restart
アクセスしてみるとこんな感じででます

まとめ
やるのはすぐなんですけど、locationの指定が間違ってて追記したのに
効かない(><)みたいなときはまずはserver配下に追記して効いてるかどうかだけみてみるのが良いと思います。