EC2(Amazon Linux)に Nginx をインストールしてBasic認証する
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インスタンスにアクセスして起動確認を行います。
.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 のバージョンは、1.2.6 でした。
今回は導入編として、インストール 〜 Basic認証 をやってみました。
次回は、IPアドレス制御について書いてみたいと思います。