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

【Raspberry Piではじめるnginx①】nginxをインストールしてHTMLを表示させるまで
【Raspberry Piではじめる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」で統一します。

今なぜRaspberry Piでnginxをはじめるのか

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

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

そんな中、Raspberry Piでよく使う Raspberry Pi OS のことがあり、これを機会にRed Hat系からDebian系へに引っ越すのはどうだろうかと思いたちました。Debian系であればディレクトリ構成もコマンドも似ているので、Raspberry Piで遊んでいればその知識をそのまま活かせそうです。そう、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のリバースプロキシがサクッとできるところに魅力を感じてます。リバースプロキシに関してはまた別記事でご紹介します。

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

Raspberry Piにnginxをインストール

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

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

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

shell
$ sudo apt install nginx

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

shell
$ nginx -v
nginx version: nginx/1.18.0

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

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

shell
$ 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.

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

shell
$ sudo systemctl start nginx
$ sudo systemctl enable nginx

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

shell
$ sudo systemctl stop nginx
$ sudo systemctl disable nginx

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

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

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

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

Welcome to nginx!
Welcome to nginx!

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

shell
$ 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 がRaspberry PiのIPアドレスですね。

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

先ほどのサンプルページの内容を変えたい場合はどうすればよいでしょうか? サンプルのhtmlファイルは、ドキュメントルート下に配置されてますのでそれを書き換えます。 ドキュメントルートのパスは /etc/nginx/sites-enabled/defaultroot で確認、変更できます。

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

...

	root /var/www/html;

...

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

shell
$ 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 で実行しないと書き換えられません。そこで、ドキュメントルートをホームディレクトリに変更してみます。

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

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

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

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

shell
$ sudo systemctl restart nginx

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

shell
$ 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のほうが設定項目が少なくのでとっつきやすいです。

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

▼ nginx関連の記事はこちら。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

関連記事