CentOS8にnginxをインストールする – 設定ファイルの設定

前回はnginxのインストールを行い、サンプルページを表示させる所まで行いました。

ここでサンプルページのファイルを差し替えれば、自分のWebページを公開することが出来ます。

しかし、サンプルページはどこにあるのでしょう。

また、もともとサンプルページが置いてあった場所以外にはWebページに表示するファイルを置くことは出来ないのでしょうか。

設定ファイルを確認・編集することでこのような問題を解決出来ます。

この記事で行うこと

  1. nginxの設定ファイルの構成
    1. ファイルの構成
    2. コンテキストの構成
  2. nginxの設定ファイルの意味
    1. nginx.conf
    2. conf.d/default.conf

1. nginxの設定の構成

1-1.ファイルの構成

nginxの設定ファイルは nginx.confconf.d/ ディレクトリ内にある拡張子が .conf のファイルに分かれています。

nginx全体に関わるメインの設定ファイル nginx.conf 、各バーチャルホストの設定が conf.d/ 内のファイルとなります。

conf.d/ 内の設定ファイルは後述する include 部分によって nginx.conf に読み込まれます。

1-2. コンテキストの構成

nginxの設定はコンテキストと呼ばれる{ }で囲われたブロックの入れ子になっています。コンテキストによって設定できる項目が異なります。

主なコンテキストは以下の通りです

  • mainコンテキスト:どのブロックにも囲われていない部分です。nginx全体として常に参照される設定を内包します。
  • eventsコンテキスト:サーバが接続されるなど何かイベントが起きたときに参照する全般的な部分を設定します。
  • httpコンテキスト:Webサーバに関する部分を設定します。nginxはWebサーバ以外にもロードバランサーやメール用のプロキシサーバ機能としての機能を持つため、Webサーバに関する設定はhttpコンテキスト内に記載する必要があります。
  • serverコンテキスト:各ホスト特有の設定を行います。nginxでは同じサーバでもアクセスされたドメインによって動作を変える事が出来ます。www.example.comblog.example.com で両方とも同じサーバに接続されるものの、前者はHTML直置きで作ったWebサイトに、後者はWordPressで作ったブログにといった具合です。これがバーチャルホストです。
  • locationコンテキスト:各ディレクトリ特有の設定を行います。例えばあるページだけパスワードを入れないと入れないようにする、あるページはPHPを使っているのでPHP実行環境に処理を引き渡すなどです。

mainコンテキスト内にeventコンテキストとhttpコンテキストが存在し、httpコンテキスト内には複数のserverコンテキストが存在し、serverコンテキスト内には複数のlocationコンテキストが存在するという構成です。

2. nginx設定ファイルの意味

実際に設定ファイルを見ていきましょう。

なお実際の設定ファイルよりも簡略化されていますが、省いているのはオプション的な設定のため、掲載している設定ファイルでも動くようになっています。

2-1. nginx.conf

nginxの公式リポジトリからインストールした場合、 /etc/nginx/nginx.conf がメインの設定ファイルとなります。


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;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}                                  

まずはmainコンテキストです。

  • user:nginxの処理を実行するユーザです。これがnginxとなっているため、nginxというユーザにアクセス権がないファイルはnginxでは扱えません。
  • worker_processes:nginxの処理を行うCPUスレッドの数です。1の場合はシングルコアで動かしている事になります。基本的にはサーバで使えるCPUのスレッド数に合わせます。ちなみにautoで自動設定も出来ます。
  • error_log:エラーログの出力先と、どのレベルのエラーからログを出力するかの設定です。この場合「警告」以上のエラーを /var/log/nginx/error.log に出力します。
  • pid:nginxのプロセスIDが格納されているファイルを指定します。プロセスIDはプログラムを識別するための連番です。例えば、プログラムを停止したい際に、名前が同じ別のプログラムを停止することがないように使います。

次はeventコンテキスト。

  • worker_connections:ひとつの worker_process で何個まで接続を許すかという設定です。とりあえず個人サーバの場合は一旦1024で十分でしょう。

次にhttpコンテキストです。

  • default_type:MIMEタイプが設定されていない拡張子が出た際に、どのMIMEタイプとして扱うかを設定します。MIMEタイプはそのファイルの内容が文書か、画像か、動画かといった内容を示す情報です。application/octet-stream は任意のバイナリデータ、つまり何か分からないということです。普通はその上の行でinclude(後述)されている /etc/nginx/mime.types 内で設定されているはずなので、そこからあぶれた未知のファイルという事ですね。
  • log_format:ログの出力形式を設定できます。log_formatは複数設定出来ます。
  • access_log:アクセスログの出力先と出力形式を設定できます。今回は /var/log/nginx/access.log にすぐ上のlog_formatで設定した main という出力形式で出力する設定になっています。
  • keepalive_timeout:接続のタイムアウト時間を設定します。長く設定するほどタイムアウトで接続が途切れてしまうことが減りますが、よりリソースを使います。
  • include:別の設定ファイルから設定を読み込むものです。include /etc/nginx/mime.types; は拡張子とMIMEタイプの関連付けを行うファイルで、 include /etc/nginx/conf.d/*.conf;conf.d/ 内にあるバーチャルホストの設定を読み込むものになります。つまり、conf.d/ 内の設定ファイルは全てこの部分に展開される事になります。

serverコンテキストと、locationコンテキストはnginx.conf 内には記載がありませんでした。

これは、バーチャルホスト毎に /etc/nginx/conf.d/ 内に設定ファイルを作ってincludeでhttpコンテキスト内に読み込ませた方が管理が楽だろうという考え方からです。

nginx.conf にはserverコンテキストを書き込めないという事ではないので、例えばバーチャルホストがひとつだけでわざわざ別のファイルを作って管理する必要もない場合は直接 nginx.conf に書き込むことも出来ます。

2-2. conf.d/default.conf

nginx.conf 内に記載されている include /etc/nginx/conf.d/*.conf; によって読み込まれる設定ファイルの一つです。

他にも同じディレクトリに .conf と拡張子の付くファイルを作成すると、同様に nginx.conf に読み込まれます。

server {
    listen       80;
    server_name  localhost;

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

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

では、serverコンテキストから見ていきましょう

  • listen:利用するポート番号を選択します。
    一般的にはHTTP接続は80番ポート、HTTPSは443番ポートとなります。それ以外のポートを指定した場合、ブラウザから接続する際には明示的にポート番号を入力する必要があるため不便です。
    SSL(TLS)やHTTP2を利用する場合はそれも記載します。
    また、 server_name で設定されていないアドレスで接続してきた場合に利用したいコンテキストにはdefault_server を付けます。 default_server が付いたコンテキストがない場合は最初のserverコンテキストに繋がってしまいます。
    全部付けると listen 443 ssl http2 default_server; といった具合になります。
  • server_name:ここにはどのアドレスでこのサーバにたどり着いた際にこのコンテキストの設定を適用するかを記載します。
    ここに www.example.com と記載すると、www.example.com 宛てに接続したときだけこのコンテキストの設定が適用されて、IPアドレスで直接接続してきたときには適用しないといった具合です。
    これにより、1つのサーバでも複数のサーバを運用しているかのように扱えます。
  • error_page:エラーがあった際にどのページに遷移させるかを設定します。
    適用したいエラー番号を書き連ね、最後にそのエラーがあった際にどのページに遷移させるかを書きます。
    この場合は例えばhttp://localhostで500,502,503,504エラーが発生した際にはhttp://localhost/50x.html に遷移することになります。

最後にlocationディレクトリです。

locationディレクトリの設定はlocationの直後に書かれているアドレスの時に有効になります。

例えばサーバのアドレスが http://localhost の場合で、location /home { } に囲われた部分は http://localhost/home の時に適用されるといった具合です。

では、設定の中身を見ていきましょう。

  • root:このlocationの時に参照するディレクトリです。基本的にこのディレクトリの中にあるファイルはその構造のままで参照できます。
    今回の設定の場合、 /usr/share/nginx/html/hogehoge/webpage.html というファイルがあった場合、 http://localhost/hogehoge/webpage.html に接続すれば見ることが出来ます。
  • index:このlocationに接続されたときに既定で表示するページを選びます。最初から http://localhost/index.html 宛てに接続してくれれば困ることは無いですが、多くの場合 http://localhost/ で止めることが多いのではないでしょうか。こういうときにどのファイルを表示すべきかを指定するものです。

まとめ

今回説明したのは最低限の、静的Webページを表示するための設定となります。

他にも、PHPの実行を他に回すための設定や、SSLの設定、キャッシュの設定などなど様々な設定がありますが、これは随時説明していきたいと思います。

今回は、

  • 設定ファイルはnginx.confというメインの設定ファイルとconf.dディレクトリにある個別の設定ファイルがあること。(あと管理しやすいように分けているだけで、別に分けなくても動くこと)
  • 設定にはコンテキストという概念があって入れ子になっていること。

の二点だけ最低限覚えてもらえればと思います。

次回はWebページの暗号化(SSL/TLS接続の有効化)について説明したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です