【ラズパイではじめるnginx①】nginxをインストールしてHTMLを表示させるまで

【ラズパイではじめるnginx①】nginxをインストールしてHTMLを表示させるまで

この記事では「nginxをインストールしてHTMLを表示させるまで」をラズパイ上で行っていきます。Webサーバーの起動からドキュメントルートの変更などカンタンなステップから初めてみます。nginxを使ったWebサーバー構築方法を数回にわたって解説できればと思ってます。

私個人がnginxの勉強がてらにまとめた内容となってます。いちおうApacheを触ったことのある方でしたら、すんなり理解できる内容かと思います。また、Webサーバーにはじめて触れる方でも、Apacheよりはnginxのほうが設定項目が少ないのでとっつきやすと思います。

Raspberry Pi のテスト環境で動作させてますが、ゆくゆくはレンタルサーバーのVPSを使ってLinux上で実装できればと思っています。UbuntuやCentOSなどでも似たような設定になると思いますので、その場合は各自で読み替えてご参考になさってみてください。

nginx(エンジンエックス)とは?

最初読み方がわからず「エヌジンクス?」など思ってましたが、公式HPによれば「エンジンエックス」と読むようです。nginxは、負荷の高いロシアで最大級のポータルサイト rambler.ru をさばくため、ロシア人のイーゴリ・シソエフによって開発されました。

nginxはHTTP、HTTPS、SMTP、POP3、IMAPのリバースプロキシの機能や、ロードバランサ、HTTPキャッシュなどの機能を備えています、

今ではいろいろなサービスでnginxが使われるようになりました。

nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 21.67% busiest sites in May 2022. Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.

nginx公式サイト より

「nginx」「Nginx」「NGINX」と大文字小文字表記にいろいろあると思いますが、公式サイトで小文字表記だったのでこの記事でも「nginx」で統一します。

今なぜラズパイでnginxをはじめるのか

上のツイートのとおり、Webサーバーを使う上で長年お世話になっていたCentOSが今後アップデートされなくなったことがきっかけです(CentOS 8は、2021年12月31日に終了、CentOS 7は、2024年6月30日がサポート期限)。

サーポートが切れてもしばらくは大丈夫なんでしょうけど、将来的にどのみち引っ越さなきゃならないと考えると今のうちに動いておいたほうが良いのかなと。

そんな中、ラズパイでよく使う Raspberry Pi OS のことがあり、これを機会にRed Hat系からDebian系へに引っ越すのはどうだろうかと思いたちました。Debian系であればディレクトリ構成もコマンドも似ているので、ラズパイで遊んでいればその知識をそのまま活かせそうです。そう、Debian系で有名なOS「Ubuntu」があるじゃないかと。

将来的にはレンタルサーバーにUbuntuをインストールしてWeb運営できればと考えています。どうせならApacheやPHPもやめて、NginxとNode.jsやPythonでWebアプリケーションを開発していこうかと考えてます。

そのための前段階のテスト環境がラズパイなんですね。

nginxとApacheの違い

nginxはシングルスレッドモデルのイベント駆動アーキテクチャです。キューに溜まったイベントをシングルスレッドのループ処理で回していく方法をとっています。

Arduinoなんかやられている方は loop() 関数でリクエストをさばいているイメージだとわかりやすいと思います。

これによってC10K問題を解決できるのだとか。

C10K問題とは、Apache HTTP ServerなどのWebサーバソフトウェアとクライアントの通信において、クライアントが約1万台に達すると、Webサーバーのハードウェア性能に余裕があるにも関わらず、レスポンス性能が大きく下がる問題である。

C10K問題 - Wikipedia より

一方でApache(Apache HTTP Server)はマルチプロセスでした。リクエストが来るたびにアプリをたくさん立ち上げるようなものですから、大量のアクセス下では負荷が大きくなりすぎます。

nginxもApacheそれぞれメリット・デメリットがありますが、「静的コンテンツで同時多数のアクセスが想定される」ような場合でしたらnginxのほうが処理に向いているとのことです。

この他にも、個人的にはnginxのリバースプロキシがサクッとできるところに魅力を感じています。リバースプロキシに関してはまた別記事でご紹介できたらと思います。

さて、前置きが長くなりましたがここからは実際にラズパイへnginxをインストールし、サンプルページを表示するまでを行っていきます。Raspberry Pi OSのインストール - モニター・キーボードなし、SSH接続するまでなどをご覧になり、ラズパイの初期設定を済ましておいてください。

ラズパイにnginxをインストール

ラズパイにnginxをインストールします。まずはいつもの「おまじない」です。

$ sudo apt-get update
$ sudo apt-get upgrade

nginxをインストールします。

$ sudo apt install nginx

このようにインストールできました。

$ nginx -v
nginx version: nginx/1.18.0

WEBサーバー(nginx)を起動するには

nginxのインストールが完了すると、自動で起動するようにサービスに登録されるようです。masterプロセスといくつかのworkerプロセスが動いていますね。

$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-07-07 19:48:57 JST; 12h ago
       Docs: man:nginx(8)
    Process: 457 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 479 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 480 (nginx)
      Tasks: 5 (limit: 1598)
        CPU: 319ms
     CGroup: /system.slice/nginx.service
             ├─480 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─481 nginx: worker process
             ├─482 nginx: worker process
             ├─483 nginx: worker process
             └─484 nginx: worker process

Jul 07 19:48:56 raspberrypi systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 07 19:48:57 raspberrypi systemd[1]: Started A high performance web server and a reverse proxy server.

もしサービスに登録されていない場合は、次のように起動と自動起動開始を登録しておきましょう。

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

nginxを止めたい場合は、次のコマンドで停止と自動起動解除ができます。

$ sudo systemctl stop nginx
$ sudo systemctl disable nginx

Webブラウザからサンプルページへアクセス

それではLAN内のクライアントマシン(PCやスマホ)のブラウザからラズパイへアクセスしてみましょう。そのためにはまずラズパイ自身のIPアドレスを知る必要があります。

インストールが完了すると、nginxはドキュメントルートと呼ばれる、公開用のウェブディレクトリを自動で作成し、テスト用のHTMLファイルを自動的にセットしてくれていますので、そのファイルにアクセスしてみましょう。

WebブラウザのURLにホスト名を入力すればサンプルページが表示されるはずです。たとえばこのように。

Welcome to nginx!
Welcome to nginx!

ホスト名でアクセスできない場合は、IPアドレスで確認してみましょう。ラズパイのIPアドレスは次のようにして確認できます。

$ ifconfig
...
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.22.139  netmask 255.255.255.0  broadcast 192.168.22.255
        inet6 fe80::902e:c8c8:e9d4:ac5b  prefixlen 64  scopeid 0x20<link>
...

WiFiの無線LANを使ってる場合は wlan0inet がラズパイのIPアドレスですね。

nginxのドキュメントルート変更

先ほどのサンプルページの内容を変えたい場合はどうすればよいでしょうか?

サンプルのhtmlファイルは、ドキュメントルート下に配置されていますのでそれを書き換えます。

ドキュメントルートのパスは /etc/nginx/sites-enabled/defaultroot で確認、変更できます。

$ vi /etc/nginx/sites-enabled/default
server {
	listen 80 default_server;
	listen [::]:80 default_server;

...

	root /var/www/html;

...

この場合 /var/www/html となってますから、探してみるとありましたね。

$ ls -al /var/www/html/
total 12
drwxr-xr-x 2 root root 4096 Jul  7 18:29 .
drwxr-xr-x 3 root root 4096 Jul  7 18:29 ..
-rw-r--r-- 1 root root  612 Jul  7 18:29 index.nginx-debian.html

ただし、rootユーザー権限になってるので毎回 sudo で実行しないと書き換えられません。そこで、ドキュメントルートをホームディレクトリに変更してみます。

$ sudo vi /etc/nginx/sites-enabled/default

こんな感じでドキュメントルートを書き換えてみました。

ドキュメントルートの変更
ドキュメントルートの変更

設定の変更を反映させるために、nginxを再起動させておきましょう。

$ sudo systemctl restart nginx

そして html ディレクトリを作って、そこへ元のファイルのコピーから文面を少し書き換えた index.html ファイルをつくりました。

$ mkdir /home/pi/html
$ cp /var/www/html/index.nginx-debian.html /home/pi/html
$ sed -e 's/Welcome to nginx!/This is pi document!/g' /home/pi/html/index.nginx-debian.html > /home/pi/html/index.html
$ rm /home/pi/html/index.nginx-debian.html

はい。こんな感じでドキュメントルートの変更とHTMLファイル内容を書き換えることができました。

This is pi document!
This is pi document!

おわり

今回ご紹介する内容は以上となります。

Apacheをやられていた方は、nginxの設定もすんなり理解できたのでは無いでしょうか?Webサーバー初心者の方でも、Apacheよりはnginxのほうが設定項目が少なくのでとっつきやすいかなと思います。

次回は【ラズパイではじめるnginx②】リバースプロキシとPythonのFlaskで爆速!API制作です。合わせてご覧ください。

また他の内容も予定してますので乞うご期待です!

  • nginxでバーチャルホスト(マルチドメイン)
  • nginxでApacheのhtaccessの代替方法
  • nginx x Let's encryptでTSL/SSLの設定方法
  • nginxのログファイルの解析
  • nginxでPHPを使う方法

ではまた。

記事に関するご質問などがあれば、
Twitter または お問い合わせ までご連絡ください。
関連記事