この記事は公開されてから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インスタンスにアクセスして起動確認を行います。
.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アドレス制御について書いてみたいと思います。