apt-getコマンドからnginxをデフォルトでインストールした場合におけるnginxのubuntuの主要なディレクトリ、ファイルについて説明します。
nginxコマンド本体です。ubuntuにインストールした際には、実行権限xがディレクトリのオーナー(root),グループ(root),その他権限に付与されています。 apt-getインストール時にsudo(root権限)で実行しているため、nginxの各種ディレクトリのオーナーとグループは、rootになります。 そのため、nginxコマンドを実行する場合には、sudoから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リソースを公開するディレクトリをドキュメントルートと呼びます。
/etc/nginx/conf.d/default.confで指定されたデフォルトのドキュメントルートです。
このディレクトリにwebリソースを保存することで、webをコンテンツとして公開できます。
このディレクトリは、default.confで「/var/www/プロジェクトコード」に変更することを強く推奨します。
理由は、Unix,Linuxのディレクトリ構成の規約を纏めているFHS3.0で明示されているからです。
gakumon.techのプロジェクトコードは、「education」にしています。gakumon.techを例にすると以下のような階層になります。
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;
}
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ディレクトリが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
}
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/をご確認下さい。
nginxのモジュール別(proxy,fastcgiなど)の作業用ディレクトリです。
nginxのデモーン(サービス)用スクリプトファイルです。Linuxは、/etc/init.d/nginxに対するシンポリックリンクを/etc/rcN.dディレクトリに作成することで、 OS起動時のサービスのランレベルを確定します。
ubuntuにapt-getコマンドを利用してインストールした場合には、初期構成でこのスクリプトファイルは作成されます。
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をインストールした場合の他のディレクトリは、以下となります。
nginxインストールに伴い、色々とディレクトリやファイルが多く存在しますがシステム開発の要点は以下となります。
まずは、上記4ファイルの場所と概要及びnginx-Vについて理解していれば、入門としては十分でしょう。