EC2(Amazon Linux)に Nginx をインストールしてBasic認証する

2013.02.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Nginx(エンジンエックス) は、軽量で高速なロシア製のHTTPサーバです。
最近の調査では、Apache や IIS に比べ、Nginx はかなりシェアを伸ばしているようです。

以下、Nginx と Apache の簡単な比較です。

Nginx Apache
アーキテクチャ イベント駆動 同期ソケット、スレッド、プロセス
プラットフォーム マルチプラットフォーム
※Windows、GNU/Linux、Unix、BSD、OS X、Solaris
マルチプラットフォーム
※Windows、GNU/Linux、Unix、BSD、OS X、Solaris、AIX、OS/2..
実装 C CとC++
※多くのモジュールはC++
モジュールシステム 静的モジュールシステム
※コンパイル時にインクルードしなければならない
動的モジュールシステム
バーチャルホスト サポート サポート
HTTPS モジュールでサポート
※コンパイル時にモジュールを指定してコンパイルする必要がある
モジュールでサポート
ドキュメント 日本語の情報が少ない 豊富
誕生年 2002 1994

一番目につく違いはやはりアーキテクチャで、Apache はプロセス駆動なのに対し、Nginx はイベント駆動になっています。
あの Node.js と同じ方式ですね。
Nginx はパフォーマンスが良いとされていますが、有名な C10K問題(クライアント1万台問題)があり、Nginx ははじめからこの問題に対処するように設計されています。


今回は導入編として、Amazon Linux に Nginx をインストールして、Basic 認証をかけるところまでやってみたいと思います。

Amazon Linux の起動

AWSのコンソールから Amazon Linux を起動します。
起動手順は割愛しますが、セキュリティグループは、22番と80番を自身のIPからアクセス可能なように許可しておきます。

インストールと起動確認

今回はパッケージからインストールします。

$ sudo yum install -y nginx

インストールが終わったら、自動起動の設定と、nginx の起動を行います。

$ sudo chkconfig nginx on
$ sudo service nginx start

EC2インスタンスにアクセスして起動確認を行います。

nginx-01

.htpasswd の作成

認証用のファイルとして .htpasswd を作成します。
Apache がインストールされていれば、htpasswd コマンドを実行できますが、インストールされていない場合は、openssl コマンドとリダイレクトを使って作成します。

$ cd /usr/share/nginx/html/
$ printf "cm:$(openssl passwd -crypt blog)\n" | sudo tee .htpasswd
cm:GJJaL7ZZFYrzg

本来リダイレクト(>>)を使って出力したいところですが、出力先ディレクトリのオーナーがrootユーザのため、tee コマンドを使ってリダイレクトしました。

作成されたことを確認します。

$ ls -la
合計 28
drwxr-xr-x 2 root root 4096 2月 23 16:59 2013 .
drwxr-xr-x 3 root root 4096 2月 23 16:48 2013 ..
-rw-r--r-- 1 root root 17 2月 23 16:59 2013 .htpasswd
-rw-r--r-- 1 root root 3696 1月 10 00:17 2013 404.html
-rw-r--r-- 1 root root 3738 1月 10 00:17 2013 50x.html
-rw-r--r-- 1 root root 3770 1月 10 00:17 2013 index.html
-rw-r--r-- 1 root root 370 1月 10 00:17 2013 nginx-logo.png

nginx.conf の編集

nginx.conf に basic認証 の設定を追記します。

$ sudo vim /etc/nginx/nginx.conf
    server {
        listen 80;
        server_name localhost;

        #charset koi8-r;

        #access_log /var/log/nginx/host.access.log main;

        auth_basic "basic authentication";                   
        auth_basic_user_file "/usr/share/nginx/html/.htpasswd";

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

auth_basic ディレクティブは、basic認証時のメッセージダイアログに表示されます。
auth_basic_user_file ディレクティブは、先ほど作ったパスワードファイルの場所を指定します。

また、今回はサーバー全体に指定しましたが、以下のように特定のパスに対して、認証を掛けることも可能です。

location /blog/ {
    auth_basic "basic authentication";
    auth_basic_user_file "/path/to/.htpasswd";
}

設定を有効にする為に、nginx を reload します。

$ sudo service nginx reload

basic認証の確認

※念のため、一旦ブラウザを閉じて、履歴も消しておきます。
再度、EC2インスタンスにアクセスすると、Basic 認証が掛かるので、、

nginx-02

ユーザー名とパスワードを入れて、ログインします。

nginx-03

上記で無事、サイトを表示することができました。
ちなみに今回の nginx のバージョンは、1.2.6 でした。

今回は導入編として、インストール 〜 Basic認証 をやってみました。
次回は、IPアドレス制御について書いてみたいと思います。

参考URL