nginx初期構成

apt-getコマンドからnginxをデフォルトでインストールした場合におけるnginxのubuntuの主要なディレクトリ、ファイルについて説明します。

/usr/sbin/nginx

nginxコマンド本体です。ubuntuにインストールした際には、実行権限xがディレクトリのオーナー(root),グループ(root),その他権限に付与されています。 apt-getインストール時にsudo(root権限)で実行しているため、nginxの各種ディレクトリのオーナーとグループは、rootになります。 そのため、nginxコマンドを実行する場合には、sudoからnginxコマンドを実行します。

/etc/nginx

nginxの設定ファイルを格納するディレクトリです。 nginxコマンドやデーモンに登録したnginxを起動すると/etc/nginx/nginx.conf設定ファイルを読み込み、 設定ファイルに基づいた構成でnginxのmasterプロセス1つとworkerプロセスがN個(デフォルト値:1)が起動します。

nginx.confは、URLに対するHTMLなどのwebリソース(html,css,js,画像ファイルなど)の格納先ディレクトリを指定します。 また、webサーバへのアクセスログ(/var/log/nginx/access.log)やnginxの実行ログ(/var/log/nginx/error.log)もnginx.confで指定しています。

nginx.conf設定ファイルの「include /etc/nginx/conf.d/*.conf;」の指定により、/etc/nginx/conf.dディレクトリの拡張子.confファイルを nginxの設定ファイルとしてインクルードするように初期設定されています。 この設定により大規模なwebサイトの設定ファイルをサブシステム別に分割することが可能になります。

以下に主要な設定ファイルnginx.conf及びdefault.confの初期値を掲載します。
#はコメント行扱いになります。

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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}						
/etc/nginx/conf.d/default.confの初期設定
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/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;
    #}
}
						

default.confファイルのlocation / の設定により、webリソースを/usr/share/nginx/htmlディレクトリに保存することで、 webサーバとしてwebリソースを公開することができます。
このwebリソースを公開するディレクトリをドキュメントルートと呼びます。

/usr/shere/nginx/html

/etc/nginx/conf.d/default.confで指定されたデフォルトのドキュメントルートです。
このディレクトリにwebリソースを保存することで、webをコンテンツとして公開できます。

このディレクトリは、default.confで「/var/www/プロジェクトコード」に変更することを強く推奨します。
理由は、Unix,Linuxのディレクトリ構成の規約を纏めているFHS3.0で明示されているからです。

gakumon.techのプロジェクトコードは、「education」にしています。gakumon.techを例にすると以下のような階層になります。

  • /var
    • /www
      • /education
        • index.html
        • /css
          • main.css
          • bootstrap.css
        • /js
          • main.js
          • jquery.js
        • /images
          • brand-logo.png
          • その他.png
        • /サブシステムコード1
          • hoge1.html
          • hoge2.html
          • /css
            • サブシステム別.css
          • /js
            • サブシステム別.js
          • /images
            • サブシステム別.png
        • /サブシステムコード2
          • huga1.html
          • huga2.html
        • /error
          • 50x.html
default.confの変更箇所
    location / {
        root   /var/www/education;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/education/error;
    }
								

/var/log/nginx

nginxのアクセスログ(access.log)及び実行ログ(error.log)を格納するディレクトリです。
nginxの設定ファイル/etc/nginx/nginx.confファイルにデフォルト値として以下が設定されています。

nginx.conf設定箇所
     error_log  /var/log/nginx/error.log warn;

     http {

        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;
        ※.前後の設定割愛
     }
						

FHS3.0に 可変データであるログファイルの格納先に/var/logが定義されており、
/var/log/ミドルウェア別にログファイルを管理するポリシーで良いと思います。

ubuntuにapt-getコマンドでnginxをインストールした場合には、logrotate(Linuxのログローテーション)機能に/var/log/nginx配下の*.logファイルを1日置きにgzファイルに圧縮する設定が追加されています。

/etc/logrotate.d/nginx

/etc/logrotate.dディレクトリがLinuxのlogrotateパッケージの設定ファイル管理用ディレクトリです。
ミドルウェア別にログのローテーション要件を記載したlogrotateの設定ファイルを作成します。

ubunutuにapt-getコマンドを利用してインストールした場合には、デフォルトでnginxファイルが作成されます。
nginxに対するログローテーションの調整は、/etc/logrotate.d/nginxファイルで指定します。

/etc/logrotate.d/nginxファイル初期設定
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}
						

/usr/lib/nginx

nginx1.9.11から動的モジュール機能がリリースされました。この機能は、GeoIP、Mail、Image-Filter、Stream 、XSLTなど webサーバの機能に何かに特化した機能(モジュール)を追加するときに利用します。
ubuntuにapt-getコマンドからnginxをインストールした場合には、/usr/lib/nginxディレクトリに動的モジュールをディレクトリ別に 管理するようになっています。
nginx -Vコマンドを実行して、apt-get実行時の./configureの設定を確認すると--modules-path=/usr/lib/nginx/modulesと指定されています。

nginxの設定ファイルnginx.conf及びdefault.confに「load_module "ngx_stream_module.so";」など動的モジュールの設定がデフォルトでは設定されていません。 そのため、/usr/lib/nginx/modulesディレクトリの初期構成は空ディレクトリです。

詳しくは、https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/をご確認下さい。

/var/lib/nginx

nginxのモジュール別(proxy,fastcgiなど)の作業用ディレクトリです。

/etc/init.d/nginx

nginxのデモーン(サービス)用スクリプトファイルです。Linuxは、/etc/init.d/nginxに対するシンポリックリンクを/etc/rcN.dディレクトリに作成することで、 OS起動時のサービスのランレベルを確定します。

ubuntuにapt-getコマンドを利用してインストールした場合には、初期構成でこのスクリプトファイルは作成されます。

/etc/ufw/applications.d/nginx

ubuntuのファイヤーウォール機能であるUFW(uncomplicated firewall)のnginx用設定ファイルです。 通信プロトコル(UDP)の許可、拒否設定とポート番号の許可を指定します。

デフォルトの設定では、HTTP(80/tcp)及びHTTPS(443/tcp)を許可しています。

/etc/ufw/applications.d/nginxファイル初期設定
[Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server
ports=80/tcp

[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server
ports=443/tcp

[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server
ports=80,443/tcp
						

ubunu16.04でufwを利用するには、apt-get update コマンド又は、 apt-get install ufwを利用してubunuにufwがインストールされている必要があります。

ufwのインストール状態の確認[インストール済でufwが停止中]
$ sudo ufw status
状態: 非アクティブ
						
ufwのインストール状態の確認[インストール済でufwが起動中]
$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
Nginx HTTP                 ALLOW       Anywhere
Nginx HTTP (v6)            ALLOW       Anywhere (v6)
						
ufwのインストール状態の確認[未インストール時]
$ sudo ufw status
sudo : ufw: コマンドが見つかりません。
						
ufwの起動
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
						
ufwの停止
$ sudo ufw disable
ファイアウォールを無効にし、システム起動時にも無効にします
						

他のディレクトリ及びファイル

ubuntu16.04にapt-getコマンドからnginxをインストールした場合の他のディレクトリは、以下となります。

  • /usr/share/doc/nginx
    nginxのライセンスドキュメントやREADMEドキュメント格納先
  • /usr/share/lintian/overrides/nginx
    debianのドキュメント5.14. {package.,source/}lintian-overridesを確認して下さい。
  • /var/cache/nginx
    nginxのproxy機能などを有効にした場合のキャッシュファイルなどを格納するディレクトリです。

要点

nginxインストールに伴い、色々とディレクトリやファイルが多く存在しますがシステム開発の要点は以下となります。

  • /etc/nginx/nginx.conf設定ファイル
  • /etc/nginx/conf.d/default.conf設定ファイル
  • /var/log/nginx/error.logファイル
  • /var/log/nginx/access.logファイル
  • nginx -V によるapt-getのインストール時のオプションの状態確認

まずは、上記4ファイルの場所と概要及びnginx-Vについて理解していれば、入門としては十分でしょう。