nginxの初期の設定ファイルを読み解いてみよう
まあ暇だしnginxの初期の設定ファイルについて書いていこうと思う。
そもそもなぜnginxを使うのか?
例えば、Railsを使うなら当たり前の様にnginxがセットで使われる印象だけど、なんでnginxをみんな使っているんだろう?他のプロダクトでも使っているから、他の会社でも使っているから、といった事もあるだろうけど、それはnginxがイベント駆動型のHTTPサーバーだからですよね。
HTTPサーバーっていうのは、クライアントからの要求に応えて、HTMLや画像を送信するものですね。Webサーバーって呼ばれたりもします。PHPを使うときにはApacheが使われる事が多いけど、あれもHTTPサーバーです。
イベント駆動型のnginx
イベント駆動型の前に、C10K問題というものを知っているでしょうか?
クライアントからの要求を各プロセスで1つずつ処理していくため、オーバーヘッドが大きくなるっていうやつです。Apacheなんかがそうですね。でも、イベント駆動型であれば、少ないプロセス数で処理する事ができからオーバーヘッドが小さい。 まあ、そんなところがnginxの良いところ。
nginxを試す
nginxを使う際には、/etc/nginx/nginx.conf.d
という設定ファイルが作られます。ちょっとこれを見ていきましょう。
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; }
初期状態の設定ファイルは上記だけど、これを読み解きたいなら以下の記事を読んでみるといいです。
起動して画面を表示させてみる
sudo service nginx start
nginxをインストールするとシステムサービス(常駐するプログラム)として実行するための設定もインストールされるので、上記の様に起動する事ができます。起動したら、Welcome to nginxという画面が出ますね。これは一体どうやって表示しているのでしょう?
もう一度設定ファイルを見てみると以下の様な記述があります。
include /etc/nginx/conf.d/*.conf;
他の設定ファイルを読み込んでいますね。/etc/nginx/conf.d/
配下の〇〇.confというファイルを読み込んでいます。そのディレクトリを見てみるとdefault.conf
というファイルがあるのが分かるでしょう。
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
この設定ファイルの中にはlocationの記述で最初に表示されるページを設定していたんですね。
root /usr/share/nginx/html;
とあるので、その中にあるindex.html
を見てみると最初に表示される画面のHTMLが確認できるはずです。
だから、ここをちょっと変えれば、こんな表示もできるっていう事ですね。
- nginx.confが読み込まれる
- nginx.confがincludeしている設定ファイル(default.conf)が読み込まれる
- default.confで先頭に表示するページを指定している
この様な流れです。
シンプルな設定ファイルを書いてみよう
とはいっても、初期設定のファイルだと見るばかりで終わってしまったり、ファイルが別れていたりするので、シンプルな設定ファイルを作ってみましょう。
# workerプロセスの起動数を定義。autoは最適値を試みる worker_processes auto; events { # 一つのworkerプロセグが開ける最大コネクション数 worker_connections 1024; } # httpサーバーの設定 http { # 同ディレクトリに存在するmime.typesファイルを相対パスで指定。MIMEタイプと拡張子を関連付けしている。 include mime.types; # ↑で拡張子からmimeタイプを決定できなかったときに適応される。 # octet-streamは任意のデータを表すmime型。デフォルトはtext/plain。 default_type application/octet-stream; #ログフォーマットの指定 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # アクセスログの出力先を指定。後ろのmainは↑で決めたフォーマット。 access_log /var/log/nginx/access.log main; # カーネル空間内で効率良くファイルを送信してくれる。 sendfile on; # レスポンスヘッダとファイルの内容をまとめて送るようになる。 tcp_nopush on; # バーチャルサーバの設定 server { listen 80; server_name localhost; # ルートディレクトリの設定 root /usr/share/nginx/html; index index.html index.htm; } }
nginx.conf
を上記の様に変えてもさっきと同じ様に動くはずです。ちょっとだけhtmlの記述を変えて確かめます。
- 作者: 久保達彦,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る