NGiNXをインストールして WEBサーバーを作ります。
ここでは Ubuntu Serverに NGiNX(エンジンエックスと読む)をインストールして、WEBサーバーを構築します。
NGiNXはロシア製 OSSの WEBサーバーで、現在は米国のF5ネットワークスのものになっています。
NGiNXが出るまでは Apache全盛時代でしたが、インターネット利用者が増えるに従い、同時アクセス数が多くなるとパフォーマンスが極端に悪くなる問題(C10K問題:クライアント数が 1万を超えてるくらいになると極端にパフォーマンスが悪くなる)の解消のために開発されたものと記憶しています。
Apacheとは基本的な設計が異なり、都度のアクセスが軽いものを数多く捌くのが得意な設計になっています。
設定も Apacheよりシンプルなこともあって、非力なマシンで簡単な WEBサーバーの機能を提供するのに適していると思います。
但し NGiNXが真価を発揮するのは WEBサーバー機能よりはリバースプロキシ機能やロードバランス機能であるという捉え方をされていることが多いようです。
1.環境
Ubuntu Server 22.04.3にインストールします。
2.インストール
NGiNXのソースコードを配布しているホームページを見てみますと、以下のようになっていました。
- 最新版:1.25.3
- 最新安定版:1.24.0
Ubuntuのパッケージ管理は snap と apt の 2種類ありますが、2024年1月4日時点でそれぞれのパッケージリポジトリに登録されているバージョンは以下のようになっていました。
- snap:登録なし
- apt:1.18.0
NGiNXは後述するように、自分でソースプログラムをコンパイルして導入するノリなのですが、他の共有ライブラリとの関係を鑑みるとパッケージでインストールしたいのが本音です。
若干古いバージョン(1.18.0)ですが、aptのパッケージインストールすることにします。
subro@UbuntuServer2204-1:~$ sudo apt install -y nginx
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
fontconfig-config fonts-dejavu-core libdeflate0 libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2 libtiff5 libwebp7 libxpm4 nginx-common nginx-core
提案パッケージ:
libgd-tools fcgiwrap nginx-doc ssl-cert
以下のパッケージが新たにインストールされます:
fontconfig-config fonts-dejavu-core libdeflate0 libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8 libnginx-mod-http-geoip2 libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip2 libtiff5 libwebp7 libxpm4 nginx nginx-common nginx-core
アップグレード: 0 個、新規インストール: 20 個、削除: 0 個、保留: 2 個。
2,692 kB のアーカイブを取得する必要があります。
この操作後に追加で 8,345 kB のディスク容量が消費されます。
〜〜〜 中略 〜〜〜
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
インストールができました。
3.インストールされたファイルなど
インストールされたファイルなど、どこにあるか見てみます。
まずNGiNX本体の実行ファイルです。
subro@UbuntuServer2204-1:~$ ls -l /usr/sbin/nginx
-rwxr-xr-x 1 root root 1240136 5月 31 2023 /usr/sbin/nginx
次がライブラリファイルです。
subro@UbuntuServer2204-1:~$ ls -lR /usr/lib/nginx
/usr/lib/nginx:
合計 4
drwxr-xr-x 2 root root 4096 1月 4 12:02 modules
/usr/lib/nginx/modules:
合計 396
-rw-r--r-- 1 root root 19024 5月 31 2023 ngx_http_geoip2_module.so
-rw-r--r-- 1 root root 31872 5月 31 2023 ngx_http_image_filter_module.so
-rw-r--r-- 1 root root 27672 5月 31 2023 ngx_http_xslt_filter_module.so
-rw-r--r-- 1 root root 112264 5月 31 2023 ngx_mail_module.so
-rw-r--r-- 1 root root 18896 5月 31 2023 ngx_stream_geoip2_module.so
-rw-r--r-- 1 root root 184904 5月 31 2023 ngx_stream_module.so
次がログファイルです。
subro@UbuntuServer2204-1:~$ ls -l /var/log/nginx
合計 4
-rw-r----- 1 www-data adm 0 1月 4 12:02 access.log
-rw-r----- 1 www-data adm 76 1月 4 12:02 error.log
ログファイルのオーナー・グループとファイルパーミッションを見てみると、更新はインストールによって作成された [www-data]ユーザーのみ、参照はインストーラによって作成された [adm]グループに所属しているユーザーまでとなっています。
少し厳し目ですね。
次が設定ファイルです。
ここが設定としてイジるところです。
subro@UbuntuServer2204-1:~$ ls -lR /etc/nginx
/etc/nginx:
合計 64
drwxr-xr-x 2 root root 4096 5月 31 2023 conf.d
-rw-r--r-- 1 root root 1125 5月 31 2023 fastcgi.conf
-rw-r--r-- 1 root root 1055 5月 31 2023 fastcgi_params
-rw-r--r-- 1 root root 2837 5月 31 2023 koi-utf
-rw-r--r-- 1 root root 2223 5月 31 2023 koi-win
-rw-r--r-- 1 root root 3957 5月 31 2023 mime.types
drwxr-xr-x 2 root root 4096 5月 31 2023 modules-available
drwxr-xr-x 2 root root 4096 1月 4 12:02 modules-enabled
-rw-r--r-- 1 root root 1447 5月 31 2023 nginx.conf
-rw-r--r-- 1 root root 180 5月 31 2023 proxy_params
-rw-r--r-- 1 root root 636 5月 31 2023 scgi_params
drwxr-xr-x 2 root root 4096 1月 4 12:02 sites-available
drwxr-xr-x 2 root root 4096 1月 4 12:02 sites-enabled
drwxr-xr-x 2 root root 4096 1月 4 12:02 snippets
-rw-r--r-- 1 root root 664 5月 31 2023 uwsgi_params
-rw-r--r-- 1 root root 3071 5月 31 2023 win-utf
/etc/nginx/conf.d:
合計 0
/etc/nginx/modules-available:
合計 0
/etc/nginx/modules-enabled:
合計 8
lrwxrwxrwx 1 root root 55 1月 4 12:02 50-mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
lrwxrwxrwx 1 root root 61 1月 4 12:02 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
lrwxrwxrwx 1 root root 60 1月 4 12:02 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
lrwxrwxrwx 1 root root 48 1月 4 12:02 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
lrwxrwxrwx 1 root root 50 1月 4 12:02 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
lrwxrwxrwx 1 root root 57 1月 4 12:02 70-mod-stream-geoip2.conf -> /usr/share/nginx/modules-available/mod-stream-geoip2.conf
/etc/nginx/sites-available:
合計 4
-rw-r--r-- 1 root root 2412 5月 31 2023 default
/etc/nginx/sites-enabled:
合計 0
lrwxrwxrwx 1 root root 34 1月 4 12:02 default -> /etc/nginx/sites-available/default
/etc/nginx/snippets:
合計 8
-rw-r--r-- 1 root root 423 5月 31 2023 fastcgi-php.conf
-rw-r--r-- 1 root root 217 5月 31 2023 snakeoil.conf
結構ありますね。
特筆ポイントは、NGiNXはモジュールという単位で機能を追加・削除できるということです。
NGiNXは WEBサーバーそのものであったり、リバースプロキシサーバー(かつロードバランサー)であったり、HTTPSの終端に使えたりします。
よってインターネットに近い所で運用されるサーバーですので、セキュリティ対策が強く求められるサーバーになります。
そもそもは必要なだけのモジュール(機能)を導入する形で運用するべきで、
[/etc/nginx/modules-enabled]ディレクトリがそれぞれのモジュールの設定ファイルになります。
モジュールの追加・削除については、nginx documentationを参照して下さい。
いずれ慣れてきたら、モジュール導入・削除にもチャレンジしてみると良いと思います。
最後にHTMLドキュメントのルートディレクトリです。
要するにホームページの中身を入れるところ。
subro@UbuntuServer2204-1:~$ ls -l /var/www/html
合計 4
-rw-r--r-- 1 root root 612 1月 4 12:02 index.nginx-debian.html
4.サーバー起動時に自動起動
インストールすることで NGiNXが自動起動するように systemdの設定がされていますので、実はこの時点でも既に起動しています。
5.WEBアクセス
実際に WEBブラウザでアクセスしてみましょう。
[80/tcp](http) で待ち受けていますので、WEBブラウザでアクセスしましょう。
私の環境では、[http://UbuntuServer2204-1] です。
インデックスのページ([/var/www/html/index.nginx-debian.html]ファイル)が表示されました。
WEBサーバーとして上手く動いています。
6.実行されているプロセスなど
どのようなプロセスが実行されているのか見てみます。
subro@UbuntuServer2204-1:~$ ps -ef | grep nginx
root 2027 1 0 12:02 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 2030 2027 0 12:02 ? 00:00:00 nginx: worker process
www-data 2031 2027 0 12:02 ? 00:00:00 nginx: worker process
www-data 2032 2027 0 12:02 ? 00:00:00 nginx: worker process
www-data 2033 2027 0 12:02 ? 00:00:00 nginx: worker process
subro 2215 1138 0 12:26 pts/0 00:00:00 grep --color=auto nginx
[root]ユーザーでマスタープロセスが 1つ自動起動されています。
(親プロセスの番号が 1の [/bin/init]になってます)
そしてマスタープロセスが [www-data]ユーザーでワーカープロセスと呼ばれる子プロセスを 4つ起動していました。
マスタープロセスでアクセスを捌き、ワーカープロセスで処理しているらしいです。
ワーカープロセスの数は設定により変更できますので、詳しくは
nginx documentationを参照して下さい。
7.自分のホームページを作っていく
後は [/var/www/html]ディレクトリの下に [index.html]ファイルや、そこからリンクされる HTMLファイルや画像ファイル、ディレクトリを整備することで好みの WEBサイトを提供することができます。
これ以降の詳細は「ホームページを作ろう」的な分かりやすい書籍が一杯出ていますのでそれをどうぞ。
==========
以下のような NGiNXの書籍には、どのような時に NGiNXが効果を発揮するか、リバースプロキシ機能やロードバランンサ機能について書かれていると思います。
もしこれから レンタルサーバーなどで WEBサーバーを展開していこう、会社の WEBサーバーを作らなきゃいけない、等などを NGiNXでやってみようという方は、書籍は 1冊持っておくと良いと思います。
業務で使われる方は、有償版の NGiNX Plusというものもありますので検討してみて下さい。
専門書は新しいのが出なくなってしまいましたね。
もうすぐオライリーの新刊が出るようですけど。