Linux/Apache – Webサーバー技術を知る | [連載]短期集中Webエンジニア 第7回

Linux/Apache - Webサーバー技術を知る IT技術

このシリーズは、短期間でWebエンジニアとして最低限必要な技術を学ぶことを目的としています。

前回までにクライアントサイドの技術を一通り学んできて、今回からはそれらをインターネットを介して提供するサーバーサイドの技術について学んでいきます。エンジニアというとプログラム言語を使う作業ばかりのように考えてしまいがちですが、サーバーやネットワークの構築や設定もエンジニアの仕事の一つです。しっかり確認していきましょう。

今回は駆け出しのWebエンジニアに向けて、Linux環境を準備してApacheを利用したWebサーバー構築の基本的な作業の流れについて紹介します。

Webエンジニアにサーバー技術は必修

Webエンジニアにとって、サーバー技術の学習は非常に重要です。何故なら、Webの技術の殆どはWebサーバーからインターネットを経由して利用者に提供されているため、サーバーがなければサービスを提供する事すらできないからです。

IT業界での仕事では、規模の大きなプロジェクトなどではクライアントサイドとサーバーサイドに別々の人員が割り当てられることも多いですが、比較的小規模なプロジェクトの場合は、Webエンジニアが両方を担当するということもありえます。

また、クライアントとサーバーの両方についての技術を習得しておけば、様々なプロジェクトに参加しやすいだけでなく、キャリアアップなどを目的とした転職などでも有利になります。サーバーについて広く専門的な知識を集めるのではなく、最低限特定の環境でWebサービスを提供できるくらいの知識を習得しておくことから始めていくのがよいでしょう。

サーバーはサービスを提供する

サーバーという言葉は非常に曖昧さがあり、Webサーバーというと物理的なサーバーコンピュータと共にブラウザからの要求に応答するサーバーソフトウェアのことも指します。サーバーという言葉の定義は、「特定のサービスを利用者に提供するコンピューターまたはソフトウェア」なので、単にWebサーバーのように表現された場合は、文脈などからどちらを指しているのかを推測するない事に注意しましょう。

「Webサーバーを構築する」という使われ方をした場合、コンピュータ上にOSがセットアップを行い、Webのリクエストに対して応答するサーバーソフトウェアのインストールと設定が終わった状態にする、という意味合いになります。既にOSのセットアップが終わっているコンピュータを利用する場合は、Webサーバーソフトウェアのセットアップを行うことになります。

LinuxとWindowsのサーバー

サーバーOSの主流はLinuxとWindowsという状況です。その他のOSもサーバー用途で利用されることはありますが、利用頻度が低くIT業界で長く働いていても出会ったことない人も多いでしょう。

Linuxが圧倒的と思われるかもしれませんが、Windowsのサーバーも意外と広く利用されています。企業でサーバーを導入する際に重要となるコストの面で、LinuxとWindowsには以下のような違いがあります。

LinuxWindows
初期費用無料有料
サーバー用ソフトウェア無料有料
初期設定コスト
運用コスト
LinuxとWindowsのコストイメージ

Linuxのサーバーは導入費用が掛からないことが最大の強みです。どんな時でも選択肢にあがる優秀なOSであることは間違いありません。一方でLinuxの設定や運用管理については、専門技術を習得したIT技術者が必要で、社内で人員を確保できない場合はIT企業などに協力を依頼しなければなりません。

Windowsのサーバーは高額な導入費用が掛かりますが、社内でWindowsを使えるスタッフを少し教育する程度で様々なことが実現可能なユーザビリティがあるのが非常に強く、運用に至っては新入社員に操作方法を教えるだけで実行できるほどに容易なこともあり、社内運用のサーバーなどで多く利用されています。

IT技術者であるWebエンジニアとしては、両方使えた方がもちろん良いのですが、WindowsのサーバーはIT企業で扱う機会は少ない可能性もあるので、まずはLinuxについて学んでおくべきでしょう。Linuxで学んだ知識は、Windowsサーバーを覚える時にも必ず役に立ちます。

Webサーバーの世界的な状況

Apache(アパッチ)とNginX(エンジンエックス)の二台巨頭で1位と2位を争っている状況が長く続いていて、長い年月王者にあり続けるApacheに対して新参のNginXが猛追の末に1位を奪ったことは記憶に新しいです。その後NginXは徐々にシェアを減らしていて、2023年に改めてApacheが1位に返り咲いているのが現状です。今後多少のシェアの変化はあるものの、この二台巨頭が揺らぐことはしばらくないでしょう。

LinuxのDistributionとインストール

Linuxと一言で表現しても、実際には様々な種類があります。

利用できる状態で配布されているLinuxの事をDistribution(ディストリビューション)と呼び、日本ではディストリと略して呼ばれることもあります。各Distributionは、中に入っているソフトウェアや管理ツールなどが異なっているなど、様々な個性があります。

ここでは少しLinuxのDistributionについて、覚えておくべき基本的な事項を紹介します。

RedHatとDebianという二大Distribution

LinuxのDistributionは星の数ほど種類があって、とても全部を覚えることはできませんが、世界的に主流と言える人気のDistributionがあります。2024年現在、世界的なシェアのトップ3は概ね以下のようになっています。

順位Distribution割合派生元
1Ubuntu30%Debian
2Debian15%
3CentOS8%Red Hat
Linux Distributionのシェア概要

1位のUbuntuは2位のDebianを基に改良されたDistributionで、サーバー用途だけでなくデスクトップPCにインストールして利用することも想定したことで、近年大きなシェアを獲得しています。

3位のCentOSは、Red Hatという世界的なLinuxのDistribution(有償)を基にして、無償提供されているDistributionです。

世界的なシェアの1~3位を、Red HatとDebianのDistribution(とその派生)が独占しているような状況で、今後しばらくはDebian(Ubuntu)の天下が続くことになるでしょう。

CentOSは2024年が大きな転換期 (サポート終了)

上記シェアの第3位につけているCentOSについては、執筆時点の2024年に大きな転換期を迎えることになっています。

CentOSの主力だったバージョン7と8がサポート終了となり、今後セキュリティーアップデートなどを受けられないだけでなく、サーバー内のソフトウェアのインストールや更新など多くのサービスを利用できなくなります。

バージョンサポート期限
CentOS 7.x2024/06/30
CentOS 8.x2024/05/31
CentOSサポート期限 2024

後継OSとしてCentOS 9.xの提供が始まってはいますが、日本国内を含めてこれまでCentOSをサポートしていたミラーサーバーなどはCentOS9の配布をしていないことからも、今後の見通しは明るくありません。

既に稼働しているサーバーが止まったりするわけではありませんが、今後のアップデートの見直しや入れ替えの計画立案などが必要となり、利用していた企業や技術者にとっては苦しい展開と言えるでしょう。

ISOイメージの活用

LinuxのDistributionは様々な形態で配布されていますが、現在はインターネット経由で簡単に入手することができるようになっています。

LinuxのOSは、通常ISOイメージというファイル形式で提供されています。

ISOイメージというのは、本来CDやDVDといったディスクに書き込みして利用するファイル形式ではありますが、現在はソフトウェア的にISOイメージをディスクとして利用できる場合が多く、物理的なコンピューターに対してセットアップするときくらいしか、実際のメディアに書き込みして利用することはないかもしれません。特にクラウドサーバーやVPSなど仮想的なコンピューターにセットアップする場合はISOイメージが活躍します。

WebエンジニアがOSをセットアップする際には、対象のコンピュータ次第ではありますが、まずは利用するOSのISOイメージを入手する必要があるでしょう。近年のクラウドサーバーやVPSなどでは、サービス側で利用できるISOイメージが準備されている場合もあります。特にUbuntu/Debian/CentOSのような世界的なシェアが大きなものは用意されていることも多いです。

対象のコンピュータにISOイメージを使用してインストーラを起動すれば、後は画面の指示に従って選択していけば簡単にLinuxの環境を構築することが出来るでしょう。

Webサーバーのインストールと設定

インストールが終わったLinuxにログインしたら、次はWebサーバー(ソフトウェア)を使用できる状態にしていきましょう。通常インストール直後のLinuxにはWebサーバーはインストールされていませんが、後から簡単に追加できるようになっています。もちろんLinux本体と同じく無料で利用が可能です。

Linux上で動作するWebサーバーにも様々な種類があり、主流はApache(アパッチ)やNginx(エンジンエックス)という2つという状況で、この2種が世界シェアの1位2位を争っています。長年王者だったApacheですが、近年高速化を売りにしたNginXに追い抜かれたものの、2023年に再度Apacheが首位を奪還しているというの最近の動向です。

この先シェア争いがどのような状況になるかは分かりませんが、今回は王道のApacheを例に紹介します。

パッケージマネージャからのインストール

Linuxへ新しいソフトウェアをインストールする方法はいくつかあり、伝統的なのはプログラムソースから実行可能ファイルを生成するという方法です。しかしこの方法は、環境に応じた最適な実行ファイルが作れる半面、非常に手間がかかります。実行するために他のソフトウェアが必要となる場合などには自分で入手してきて準備しなければなりません。

パッケージマネージャは、そういった手間の問題を解決してくれるソフトウェアです。CentOSではyum、Ubuntu/Debianではaptというコマンドで知られています。

パッケージマネージャを使ってApacheをセットアップするためには、root権限のあるユーザーで以下のコマンドを実行します。

#CentOSの場合
yum install httpd

#Ubuntu/Debianの場合
apt install apache2

yum/aptのコマンドに続いて、「実行するアクション」と「対象のサービス」となっています。

今回はWebサーバーのApacheをインストール(install)することを指定しています。対象のサービス名がCentOSとUbuntu/Debianの場合で異なっている点に注意しましょう。

対象のサービスが確認できた場合、同時にインストールする必要があるサービスが表示され、合計でインストールに必要となるディスク容量と共に、続行するかどうかを問い合わせされるので、Yes(Y)を指定してインストールを実行しましょう。

Webサーバーの設定と再起動

Apacheのインストールが終わったら、サーバーを起動してみましょう。使用するLinuxによってはインストール後に起動してくれているものもあるかもしれませんが、一緒に再起動や停止の方法も学んでおきましょう。

サービスの起動状態などを操作するには、systemctlコマンドを利用します。パッケージマネージャと同じように、コマンド名に続いて「実行する動作」と「サービス名」を指定します。以下の例ではサービス名はhttpdとしていますが、UbuntuなどでApache2を利用している場合はapache2へ読み替えてください。

#自動起動設定
systemctl enable httpd

#起動
systemctl start httpd

#停止
systemctl stop httpd

#再起動
systemctl restart httpd

#状態確認
systemctl status httpd

#設定の再読み込み
systemctl reload httpd

インストール後は、enableとstartを実行することで、自動起動を有効にして起動するとよいでしょう。設定を変更した後は、restartで再起動をすることになりますが、再起動時に一瞬Webサーバーが止まってしまうので、再起動が必要ない設定の場合はreloadで設定を読み込みするという場合もあります。

Apacheの設定は少しずつ覚えていこう

Apacheの設定項目は非常に多く、一朝一夕では全ての設定項目を理解し使いこなすことは難しいでしょう。IT現場で働いているプロのエンジニアでも、知らない設定項目や使ったことのない設定はあるものです。ここではApacheの設定について詳しく紹介はしませんが、覚えておいた方が良い基本的なことだけ少し紹介します。

設定ファイルの場所

Linuxの各種設定は/etcに置くルールになっています。WebサーバーのApacheもこのルールに従って、自動的に設定ファイルが配置されます。Red Hat系(httpd)とDebian系(apache2)で場所が少し異なります。

httpd (CentOS等)apache2 (Ubuntu等)
/etc/httpd/conf/httpd.conf/etc/apache2/apache2.conf
設定ファイルの場所

apache2の場合、上記ファイルから更に他の設定ファイルが読込される形になっているので、設定を行う対象がどの設定ファイルに該当するのかを覚えておく必要があります。別のファイル構造になってはいますが、基本的にはhttpdの項目が分割されているだけなので、設定の中身を2種類覚えることにはなりません。

ドキュメントルートの場所

ブラウザから、構築したWebサーバーのアドレスだけを指定すると返却されるHTMLなどのページが置かれたサーバー側のディレクトリの事を、DocumentRoot(ドキュメントルート)と呼びます。Apacheのインストールをすると、通常標準のindex.htmlが以下の場所に配置されます。

/var/www/html/index.html

この場所のファイルを置き換えたり編集することで、ブラウザに対して任意のHTMLを返却することができます。index.htmlは標準のファイル名で、ブラウザからファイル名を指定しなかった場合に自動的に返却されるファイルとなります。

ドキュメントルートやindex.htmlのファイル名などは、上述の設定ファイル内に設定があるので、変更の必要があれば該当箇所を適宜変更します。変更した後はサーバーの再起動や設定の読み込みなどを忘れないようにしましょう。

構築したWebサーバーの確認

ここまでの設定を行ったら、Webブラウザからサーバーへ接続して確認してみましょう。接続先に指定するURLは、最初はIPアドレスで行うことになるでしょう。WebサーバーのIPアドレスを調べるには以下のコマンドを実行します。

$ ip a
(---中略---)
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet xxx.xxx.xxx.xxx brd xxx.xxx.xxx.255 scope global ens3
(---中略---)

ipコマンドにオプションの[a]を指定すると、現在のネットワークの状態を調べることができます。古くはifconfigというコマンド名でしたが、現在のLinuxには標準ではインストールされていることは少ないでしょう。(後から追加することは可能です)

表示される結果はインストールしたコンピュータの状態によって異なります。複数のネットワークインターフェースを持っているコンピュータの場合は長々と複数表示されることもあるでしょう。上記例で赤字のようなIPアドレスが表示されているはずなので、そのアドレスを指定することになります。(127.0.0.1はローカルループバックといって自分自身のIPアドレスなので間違えないように気を付けましょう)

IPアドレスを確認した後は実際にブラウザのアドレス欄に以下のように指定してアクセスしてみましょう。これでドキュメントルートに配置されているindex.htmlが表示されるはずです。

http://xxx.xxx.xxx.xxx/

Webのネットワークは80番と443番

ここまでの手順でブラウザからWebサーバーのアドレスを指定しても、Webページが表示されないことがあります。問題の可能性は色々とありますが、ブラウザがグルグルとアドレスを探した結果「ページが表示できない」といった表示になる場合、ファイアウォールによって通信が阻まれていることが考えられます。

Linuxでは通常ファイアウォールが設定されていて、初期状態ですべての通信が遮断されるようになっています。そのため、設定したWebサーバーへのHTTP通信が遮断されてしまうことがよくあります。(インストールしたLinuxのDistributionにより、初期状態は異なります)

ファイアウォールを完全に無効化する事でも解決はしますが、基本的には「全て遮断」した状態から、「利用する通信を許可」するのがセキュリティの常道であり作法です。

Webの通信で利用するのは、HTTPの80番、HTTPSの443番のTCPポートである事を覚えておきましょう。このポートは標準であり、設定で変更する事は可能です。

プロトコル標準使用ポート
HTTP80
HTTPS443
Web通信での使用ポート

このようなファイアウォールへの通り道を設ける設定を、IT業界では「穴をあける」という表現がされますので、一緒に覚えておくと良いでしょう。

ファイアウォールの設定

ファイアウォールは本気で取り組むと覚えなければならないことが多い分野です。今回は短期間でWebエンジニアとして最低限の知識を学習することを目的としているので、あまり深掘りはせず、実際にポート開放を行う方法だけ簡単に紹介します。

いずれも管理権限のあるユーザーで実行する必要があります。

開放ポートの追加
# CentOS (Red Hat系)
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --reload

# Ubuntu (Debian系)
ufw allow 80

Red Hat系とDebian系で使用されているサービスが異なっているため注意しましょう。コマンドを並べてみると、Debian系のコマンドがとてもシンプルで素晴らしく輝いて見えます。Red Hat系は複雑なコマンドですが、それだけに複雑な設定を行えることが伺えます。

上記例は80番(HTTP)のみを開ける例になっています。443番(HTTPS)も開ける必要がある場合は適宜ポート番号を読み替えて、追加で443用のコマンドを実行する必要があります。

ファイアウォールの停止 (非推奨)

開発用のサーバーや、趣味で利用するだけのサーバーの場合、ファイアウォール自体が必要ない事もあるでしょう。また、強力なネットワークセキュリティーに守られているサーバーの場合などでも、Linux上のファイアウォールが不要なこともあるかもしれません。

不要なファイアウォールに開放ポートの設定などは面倒なだけなので、止めてしまいたい、という場合などは、以下のようにファイアウォールのサービス自体を止めてしまいましょう。開始と終了を続けて紹介します。

# CentOS (Red Hat系)
systemctl start firewalld
systemctl stop firewalld

# Ubuntu (Debian系)
ufw enable
ufw disable

ファイアウォールサービスを停止するということは、サーバーがすべての通信に対して無防備になってしまうため、使用には十分注意してください。

Webサーバーを構築できる知識を備えよう

Webエンジニアは、Webの技術を活用する技術者の職種です。Webの技術は表面的なプログラムやデザインだけでなく、サーバーやネットワークの技術があってこそ、初めて利用者にサービスが提供できる構造をしていることをしっかり理解しておきましょう。

プログラムやデザインなども重要で、制作するために多くの人員が必要な作業ではありますが、一生懸命作成した成果物もWebサーバーがなければ配布することが出来ないため、かならず誰かがWebサーバーを構築または調達する必要があります。

最低限自分でサーバーを構築できるようになっておけば、Web業界の技術全体を高い視点で見渡せるようになり、業界の理解を大いに助けてくれるでしょう。また、将来キャリアアップの転職に役立つだけでなく、独立起業などをする際にも「最悪独りで全部やる」という強力な選択肢が生まれることにもなるでしょう。

責任重大なITインフラ部門は大変な仕事ではありますが、業界内では作業量に比べて単価が高額な分野でもあり、サーバーやネットワークの技術者の給料は高い傾向にあります。専門にするかどうかは後々検討するとして、まずは最低限構築できるだけの知識を備えるところから始めていきましょう。

コメント