Nginx(エンジンエックス)は軽量で高速なWebサーバ・リバースプロキシサーバ・メールプロキシサーバです。
軽量で高速である仕組みとしてイベント駆動を採用したことが挙げられます。
イベント駆動では、IO多重化のためepollシステムコールが使用されます。epollはディスクリプターの状態がカーネル内で管理されるためプログラムがチェックする必要がなくなります。そのため、処理時間はリクエストによらず一定になり高速処理が可能となりました。
Apache2.xではMPM(マルチプロセッシングモジュール)としてprefork,worker,perchild,eventがあります。preforkではリクエストごとにプロセスを割り当て、workerではスレッドを増やします。イベント駆動方式を行うeventもありますが、それぞれキープアライブなどの処理が異なり、正常に動作しないモジュールやソフトウェアがあるため安易に変更できません。
設定ファイル
主な設定ファイルを挙げてみます。
- /etc/nginx/nginx.conf 主要設定
- /etc/nginx/conf.d/ 設定ファイル郡
- default.conf デフォルトサーバの設定
- ssl.conf SSLの設定
- virtual.conf バーチャルホストの設定
設定ファイルの書式
基本的な書式
ディレクティブ 値;
入れ子の書式
コンテキスト { ディレクティブ { ディレクティブ 値; } }
入れ子にした場合は親ブロックの設定を引き継ぎます。また子ブロック親の設定の上書きも可能です。
Webサーバを立ててみる
Nginxはモジュール構造となっており、主なモジュールとしてcore, events, http, mailなどがあります。
コンテキストでモジュールや処理などを指定し、その中で各ディレクティブと値を指定します。
最小限の設定でhttpサーバを立ててみます。
nginx.conf
user nginx; worker_processes 6; error_log /var/log/nginx/error.log events { worker_connections 768; } http { keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.type; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; server { listen 8080; #apacheとかぶらないように server_name www.hoge.com; location / { root /usr/share/nginx/html; index index.html index.php; } } error_page 404 403 /404.html; location = /404.html { root /usr/share/nginx/html; } }
デーモンを再起動してブラウザでアクセスしてみますと
ばっちり/usr/share/nginx/htmlにあるデフォルトのHTMLを読んでます。
リバースプロキシを立ててみる
以下はリバースプロキシとして稼動させる設定例です。
nginx.conf
: server { listen 8080; : location / { proxy_pass http://10.0.1.2:80; proxy_cache_path /var/cache/nginx levels1:2 keys_zone=czone:4m max_size=120m inactive=3d; proxy_temp_path /var/tmp/nginx; proxy_cache_key "$scheme://$host$request_uri"; #このままではログがプロキシからのアクセスとして記録されてしまうためヘッダーを転送させる proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } :
http://Nginxホスト:8080にアクセスするとhttp://10.0.1.2:80が表示されます。
- 関連記事
-
-
OpenLDAP 2015/05/09
-
PAM Pluggable Authentication Modules 2015/05/02
-
Nginx 2015/04/09
-
BIND9について 2015/03/30
-
DNSのお話 2015/03/30
-