読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【nginx】nginxとhttpd-tools(htpasswd)でサクっとbasic認証をかけるメモ

はじめに

nginxつかってるときでも当然basic認証かけたいときってありますよね。
apacheは使わなくなった(もしくは入って無い)もののhtpasswd使ってbasicりたい!そんなときのメモ

アジェンダ

  1. basic認証httpd-toolsのがいよう
  2. httpd-toolsインストール
  3. htpasswdコマンドで.htpasswd作成
  4. nginxに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認証をかけたいからですね。

参考 : サーバにhtpasswdだけインストールしたい

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はこんな感じで表示されるものなのでなんでも良いです。 f:id:tweeeety:20150705174020p:plain

追記する場所は主に下記の2箇所で良いでしょう

  1. サイト全体にかけたいとき
    • server {} の中
  2. サイトの中のディレクトリ単位にかけたいとき
    • 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

アクセスしてみるとこんな感じででます f:id:tweeeety:20150705174158p:plain

まとめ

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