備忘録自分の学習用
学習の目的
- 動的コンテンツのWebサーバーを建てること
- Webサーバーがどのように動いているのかを学ぶ
学習の流れ
1. サーバー構築作業
- ローカルマシンに仮想環境(UTM)を導入
- 仮想環境にLinux(ubuntu)を導入
- Linux補助ツール導入
- nginx導入とphpファイル読み込み設定
- PHPとPHP-fpmインストール
- PHPファイルの作成と導入
- systmctlのnginxを再起動
2. 実装中に出てきた不明点をまとめて調べる
UTM導入
- UTMはQEMUというオープンソースのマシンエミュレーターをベースとした仮想化ソフトウェア。macOS上でx86/x64用のアプリケーションを実行することが可能。
- マシンに直接OSを入れるわけではないので、ローカル環境が汚れないという利点で使用。
Ubuntu導入
- Ubuntuの公式サイトからUbuntuをダウンロード。(ダウンロードはarm64版)
- Ubuntuの導入方法はこちらの記事を参照
Ubuntu補助ツール導入
- Ubuntuのパッケージ管理システムを最新化
sudo apt-get update && apt-get -y upgrade
- UbuntuGUI導入
-
sudo apt-get -y install ubuntu-desktop
を叩く
-
nginx導入と読み込みファイルの設定
- nginxパッケージを検索する
apt search nginx
- nginxをインストールする
apt install nginx
- nginxの設定
- HTMLの配置場所
cd /var/www/html
- なぜ/var/www/htmlにあるファイルを参照するのか
- nginx.confの中で以下を読み込んでいる
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/; - site-enebledを確認する
-
root /var/www/html
でhtml配置場所を参照 -
# Add index.php to the list if you are using PHP
の場所で記載したファイルを左から優先して読み込んでいく
-
- sites-enabled/defaultファイルにindex.phpを読み込むよう記載
index index.php index.html index.htm index.nginx-debian.html;
- HTMLの配置場所
- PHPインストール
- 最新のPHP8.3をインストール
sudo apt install -y php8.3
-
php -v
コマンドを叩きphpが導入されていることを確認
- PHP-FPMをインストール
sudo apt install php-fpm
-
sudo systemctl start php8.3-fpm
サービス自動起動
- 最新のPHP8.3をインストール
- PHPファイル作成
-
cd /var/www/html
でディレクトリ移動 -
sudo touch index.php
入力 -
sudo vim index.php
入力し、以下phpinfoを貼り付け<?php phpinfo(); ?>
-
- nginxの読み込み設定をPHPに変更する
- nginxの
sites-enabled/default
を以下のように更新
- nginxの
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
#fastcgi_pass 127.0.0.1:9000;
}
- nginxのコードを更新したので、裏で動いているsystmctlのnginxを再起動
sudo systemctl restart nginx
web確認
備考
実装中に出てきた不明点をまとめて調べる
NGINXとApachの違い・用途・一般的にどちらを使うか
NGINXが誕生した経緯
- 今まではApachが人気で利用されていたが、「C10K問題」が懸念された
- C10K問題:同時接続するクライアントが多すぎるとソフトウェア上の問題によりサーバーがパンクしてしまうこと
- 「C10K問題」を回避するため、Apachに変わるNGINXが開発された
NGINXとApachを比較
処理
- Apache:1リクエストに対して1プロセスが処理
- NGINX :1プロセスで複数のリクエストを処理
処理能力
・ApacheよりもNGINXの方が1.2倍~1.5倍ほど高い
同時接続数
- NGINXはApacheの10~100倍
メモリ消費量
- マルチプロセス(Apache):リクエストの量に応じてメモリが消費される
- シングルスレッド(NGINX):同時処理数が増えてもそれほどメモリ使用量は変わらない
- 同時処理数が少ない場合には両者にあまり違いはない
Apachの強みと弱み
メリット | デメリット |
---|---|
簡単に機能拡張できる | メモリを大量に消費する |
信頼性・安定性が高い | 同時処理数が多くなると耐えられない |
開発者向け技術情報を入手しやすい | - |
重い処理が得意 | - |
NGINXの強みと弱み
メリット | デメリット |
---|---|
速くて高負荷に強い | CPUリソースがたくさん必要な処理は不向き |
リバースプロキシやロードバランサの機能がある | Nginx単体で完結させるのは難しい |
柔軟にカスタマイズ可能 | - |
- | 機能が少ない |
- | ソースコードが複雑 |
結局ApacheとNginxどっちがいいのか?
Apach | NGINX |
---|---|
少量の同時接続数で重い処理を担当 | 大量の同時接続数や軽い静的コンテンツを担当 |
どちらも利用するケース
- NGINXには大量の同時接続数で重たい処理の場合はNGINXをリバースプロキシサーバーとして利用して、動的コンテンツはApacheに処理させるという相互の利用も効果的
systemctlとsystemdとは何か
systemctlについて
- systemdを操作するためのコマンド
- systemctl [start stop restart enable disable] サービス名
systemdについて
- バックグラウンドで動作するサービスやプロセスなどの起動状態を管理するデーモン
- systemdはすべてのプロセスの親プロセス
www-dataとは何か
ウェブサーバーが動くためには誰かの名前を借りて作業をする必要があります。
その役割をしているのが「www-data」という名前のキャラクター(ユーザー)です。
何故そんな名前(ユーザー)が必要か?
ウェブサーバーがウェブページを表示したり、ファイルを読み書きしたりするときに、普通の人の代わりに「www-data」が操作します。これにより、悪い人(ハッカー)がウェブサーバーを通じてコンピュータ全体にアクセスするのを防ぐ役割も果たしています。
例えるなら、学校の先生(ウェブサーバー)が教室(ウェブサイト)で授業をするとき、先生個人の名前を使わず、「教務」という名札を使って動き回っているような感じです。
上記ChatGPTより引用
PHP-FPMとは何か
- FPM ( FastCGI Process Manager ) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意している
- Web サーバー 上で PHP ( 動的コンテンツを生成する言語 ) を動作せるための仕組み
CGIとFast CGIの違い
-
CGI
- ユーザーから要求がある度に、プロセスの生成と破棄を行うが、
量の要求があればその分だけプロセスの生成と破棄が実施され、この事がパフォーマンスの悪化に繋がっていく
- ユーザーから要求がある度に、プロセスの生成と破棄を行うが、
-
Fast CGI
- 初回リクエスト時に起動したプロセスをメモリ上へ保持を行い、次回リクエストに対してはそのメモリに保持したプロセスの実行を行い
最後に
- 今回はwebサーバーを立てて、不明点を洗ってそれぞれが何であるかを洗い出した。
- 以下の書籍を読んでweb技術について知見を広げていく。