【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公式サイト より
今なぜ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サーバーのハードウェア性能に余裕があるにも関わらず、レスポンス性能が大きく下がる問題である。
一方でApache(Apache HTTP Server)はマルチプロセスでした。リクエストが来るたびにアプリをたくさん立ち上げるようなものですから、大量のアクセス下では負荷が大きくなりすぎます。 nginxもApacheそれぞれメリット・デメリットがありますが、「静的コンテンツで同時多数のアクセスが想定される」ような場合でしたらnginxのほうが処理に向いているとのことです。 この他にも、個人的にはnginxのリバースプロキシがサクッとできるところに魅力を感じてます。リバースプロキシに関してはまた別記事でご紹介します。
さて、前置きが長くなりましたがここからは実際にRaspberry Piへnginxをインストールし、サンプルページを表示するまでを行っていきます。 Raspberry Pi zero WHをモニター・キーボードなしでSSH接続するまで などをご覧になり、Raspberry Piの初期設定を済ましてください。
Raspberry Piにnginxをインストール
Raspberry Piに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やスマホ)のブラウザからRaspberry Piへアクセスしてみましょう。そのためにはまずラズパイ自身のIPアドレスを知る必要があります。
インストールが完了すると、nginxはドキュメントルートと呼ばれる、公開用のウェブディレクトリを自動で作成し、テスト用のHTMLファイルを自動的にセットしてくれてますので、そのファイルにアクセスしてみましょう。
WebブラウザのURLにホスト名を入力すればサンプルページが表示されるはずです。たとえばこのように。
ホスト名でアクセスできない場合は、IPアドレスで確認してみましょう。Raspberry Piの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を使ってる場合は wlan0 の inet がRaspberry PiのIPアドレスですね。
nginxのドキュメントルート変更
先ほどのサンプルページの内容を変えたい場合はどうすればよいでしょうか? サンプルのhtmlファイルは、ドキュメントルート下に配置されてますのでそれを書き換えます。 ドキュメントルートのパスは /etc/nginx/sites-enabled/default の root で確認、変更できます。
$ 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ファイル内容を書き換えることができました。
おわり
今回ご紹介する内容は以上となります。
Apacheをやられていた方は、nginxの設定もすんなり理解できたのでは無いでしょうか?Webサーバー初心者の方でも、Apacheよりはnginxのほうが設定項目が少なくのでとっつきやすいです。
次回は 【Raspberry Piではじめるnginx②】リバースプロキシとPythonのFlaskで爆速!API制作 です。合わせてご覧ください。
▼ nginx関連の記事はこちら。