ウェブページを見ることができるのはwebサーバーのおかげです。私たちのPCからWebサーバーにページをリクエストするとWebサーバーがwebページのデータを送り付けてくれます。
webサーバーの代表例がApacheです。Apacheは世界で最も利用されているWebサーバーのひとつです。
今回はapache(アパッチ)のインストールから起動まで簡単に解説していきます。
Apacheは代表的なWebサーバー
古くからあるwebサーバーのひとつであるApacheは安定性が高さに定評のあるWebサーバーです。オープンソースのソフトウェアであるため、無料で利用できます。Apache以外のWebサーバーにはNginxやIISなどがあります。
NginxとApacheの違い
ApacheはNginxと比べて古くからあることから安定性や信頼性の面で利点がありますが、一方で様々な欠点や課題があらわになっていました。Nginxは比較的新しいWebサーバーでApacheの欠点を補うウェブサーバーを志向して作られています。Nginxは高速で高負荷でのパフォーマンスが高く、急速にそのwebサーバーのシェアを奪っています。
https://kinsta.com/jp/blog/nginx-vs-apache/
Webサーバーとは?
Webサーバーは普段見ているWebページを提供するサーバーのことです。
Webページを閲覧するためのプログラムをWebブラウザといいます。WebブラウザはURLやFQDNをもとにWebサーバーにリクエストを送ります。FQDNはDNSによってIPアドレスに変換され、IPアドレスをもとにWebサーバーに接続します。この時の情報のやり取りはHTTPというプロトコルで行います。Webサーバーはブラウザ(クライアント側)にHTTPをもとにHTMLファイルを送信します。
ApacheはWebサーバーにインストールされているWebサーバーを提供するためのプログラムのことです。ミドルウェアとも呼ばれます。
ミドルウェアとはOSとアプリケーションの間に位置するようなソフトウエアという意味です。なぜ中間かというとアプリケーションとは違って処理が終わっても、待機して仕事をし続けるようなソフトウエアだからです。ブラウザはwebページを見なくなったら閉じても構いませんが、Apacheなどのミドルウェアが閉じられると他の人がwebページを見られなくなってしまいます。
サーバーは人にサービスを提供するという機能の性格上、常時するプログラム(デーモン)でなければなりません。
道路がOSであれば、信号機がミドルウェア、自動車がアプリケーションといったところでしょうか?
Apacheの機能
httpd (デーモン)は常時起動プロセス
webサーバーはいつブラウザからアクセスが来るかわからないので常に待機していなければなりません。したがって、サーバーソフトウェアは常時起動していなければなりません。このようなプログラムをデーモンといいます。
通常のプロセスは起動して処理を行ったら終了しますが、デーモンは仕事を終えても終了せずに待機中になります。
Apacheのデーモンは「httpd」(dはデーモンの意味)です。
Apacheの実行プロセスは 「ps auxf | grep httpd
」と入力すれば確認可能です。rootの親プロセスに対して子プロセスのhttpdが複数立ち上がっているのが見えると思います。
HTTPのウェルノーウンポート 80番
多くのサービスはどのポート(TCPポート)を使用するか決まっています。それをウェルノーウンポートといいます。
Webサーバー(HTTP)が使用するポートは80番です。どのポートを使用しているかは /etc/servicesに記載されています。ちなみにhttpsは443番ポート使用します。
「cat /etc/services | grep http」などとコマンドを打てば検索することができます。
ドキュメントルート
クライアントからwebサーバーのIPアドレスで通信が行われるとwebサーバーは「 /var/www/html/」ディレクトリの最上位にあるファイル(index.html)を送信します。このディレクトリをドキュメントルートといい、特にFQDNなどファイルが指定されない場合はドキュメントルートのindex.htmlを表示するようにしています。
ドキュメントルート「/var/www/html」
ユーザーディレクトリでの公開 – public_htmlの利用
デフォルトのドキュメントルート/var/www/html/はroot管理であるため、ユーザーがいじることができません。
こめやん
そのため、ユーザーも書き込める「public_html」ディレクトリがあります。
public_htmlはユーザーのホームディレクトリ直下におかれ、有効化すればpublic_html中のindex.htmlを参照するようにできます。
デフォルトではApahceの設定で無効にされているので設定を変更しなければなりません。
public_htmlの有効化設定
public_htmlを有効化するにはuserdir.confの設定を変更します。
「vi /etc/httpd/conf.d/userdir.conf」viで編集→viの使い方はこちら
UserDir disabledをコメントアウト、UserDir public_htmlの#を消す
次にパーミッションの設定を行います。
Apacheはユーザーのディレクトリにそのままではアクセスできません。なので権限を変更する必要があります。
public_htmlディレクトリはユーザーのホームディレクトリに作成します。
「/home/user/public_html/」
public_htmlを含むユーザーのホームディレクトリ /userのパーミッションを変更します。public_htmlの中にindex.htmlをおきます。
chmod 755 /home/user
Apacheのインストール
apacheはLinuxに限らずUNIX, windows, MacOSに対してもインストール可能です。ここではLinux(CentOS)へのインストールを解説します。
Apacheのインストールはyumから行います。
sudo yum install httpd
でインストールできます。
パッケージを利用せずにソースからインストールをすることも可能です。ソースからインストールすれば自由にバージョンを選ぶことができます(最新版から安定な過去バージョンまで)。また、apacheで生成されるディレクトリのパスなどを変更した状態でインストールすることもできます。
XAMMP
XAMMPはウェブアプリケーションに必要なソフトをまとめたパッケージです。GUI上Apacheとウェブアプリに必要な主要なソフトウェアであるPHPやperl、MySQLなどを導入できるので便利です。windowsやMacOSにも対応しています。個別にインストールするよりも一括でインストールできるので便利ですが、まとめられた各ソフトが最新でない場合があるのでアップデートが可能です。CUI上でのインストールに慣れているならわざわざ使う必要はないかもしれません。また、多くの主要Linuxディストリビューションではapacheやperlなどはプリインストールされていることが多いです。
Apacheの起動や停止
Apacheのプロセスhttpdを起動する方法は
「systemctl start httpd」です。「systemctl start httpd.service」と.serviceを省略しないで書くこともあります。
- systemctl start httpd (httpdの開始)
- systemctl stop httpd (httpdの停止)
- systemctl restart httpd (httpdの再起動)
- systemctl status httpd (httpdの状態確認)
Apacheが起動したら自分のIPアドレスをブラウザで入力するとテストページを見ることができると思います。
見られない場合はファイアウォールを停止させましょう
systemctl stop firewalld
systemctl disable firewall
httpd.confの設定
apacheの主要な設定は 「/etc/httpd/conf/httpd.conf」のファイルで行います。
httpdの設定項目は
- ServerRoot 設定ファイルの場所 例:etc/httpd
- Linsten 待ち受けポート番号 例:80
- User サーバープロセスのユーザー 例:apache
- Group サーバープロセスのグループ 例:apache
- ServerAdmin サーバー管理者のメール 例:root@localhost
- ServerName サーバーのホスト名 例:www.example.com:80
- DocumentRootドキュメントルートの場所 例:/var/www/html
- ErrorLog エラーログの場所(ServerRoot/) 例:logs/error_log
- CustomLog アクセスログの場所 例:logs/access_log
- ScriptAlias /cgi-bin/のエイリアス設定 例:/var/www/cgi-bin/
です。
httpd.conf内は各設定項目(ディレクティブ)に分かれています。
<directory>ディレクティブの設定
Direcotoryタグ内は特定のディレクトリ内で有効となる設定を記述する場所です。特定のIP以外はアクセス拒否するなどの設定が可能です。
例:
<Directory “/var/www”>
AllowOverride None
# Allow open access:
</Directory>
var/wwwのディレクトリに対する設定を記述しています。
アクセスコントロール設定
AllowとDenyディレクティブでサーバーへのアクセスコントロールが可能です。
Allow from xxx.xxx.xxx.xxxやDeny from allなどと設定できます。
OrderディレクティブはAllowとDenyディレクティブの優先度の設定です。
「Order deny, alllow」と記述するとallowディレクティブに設定したものが優先されます。
<Directory “/var/www/html”>
Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx
</Directory>
と設定すると、Orderディレクティブの設定よりAllowの設定が常に優先されます。Denyディレクティブでは全てのホストからのアクセスが拒否設定されていますが、Allowディレクティブのxxx.xxx.xxx.xxxが許可されているので、こちらが優先される形になり、この設定の解釈はxxx.xxx.xxx.xxxからの通信のみを拒否するという意味になります。
間違いやすい部分なのでチェックしておきましょう。
httpd.confの文法チェックと設定の反映
設定を変更したらhttpd.confの文法チェックしましょう。正常ならsyntax OKが出てきます。
apachectl configtest
設定を反映させるにはhttpdを再起動します。
systemctl restart httpd
認証機能の導入
パスワード認証の導入は、httpd.confファイルにあるDirectoryディレクティブの部分を設定すれば導入できます。
<Directory “ディレクトリ名”>
AuthType Basic
AuthName “認証時の表示”
AuthBasicProvider file
AuthUserFIle “パスワードファイル(.htpasswd)のパス”
Require user “ユーザー”
</Directory>
パスワードの生成はhtpasswdコマンドで行います。
htpasswd -c /var/www/html/user/.htpasswd user
上記コマンドを入力するとパスワードが求められます。これでuserというユーザーに対して認証を導入できました。ディレクトリはhttpd.confのDirectoryディレクティブで指定します。生成した.htpasswdのパスはAuthUserFileと同じにします。
.htaccessの設定
httpd.confはrootユーザーのみが編集可能なので、一般ユーザを利用している時、アクセスコントロールや認証の導入などができません。それを可能にするのが、.htaccessです。.htaccessファイルは一般ユーザでも編集可能な設定ファイルです。
.htaccessを有効化するには「/etc/httpd/conf.d/userdir.conf」の設定でユーザーディレクトリを有効化しておきます。そのうえ、public_htmlディレクトリに.htaccessファイルを置きます。
.htaccessの設定はhttpd.confと同様の書式です。
アクセスコントロールを導入したい場合はOrder, Allow, Denyディレクティブを利用します。また、.htpasswdによる認証の導入も可能です。Authtypeとうのディレクティブでパスワード認証をDirectoryディレクティブ内に表記します。設定はhttpd.confと同じです。
エラーログの確認
ログの確認はエラーの原因をチェックするのに有効です。
Apacheではエラーログを
- /var/log/httpd/access_log
- var/log/httpd/error_log
に記録します。
access logにはアクセスしてきたクライアントのipアドレスなどの情報が記載されています。
error logには権限のないディレクトリへのアクセスなどが記録されます。
CGIの設定
CGIはWebサーバー内にあるスクリプトを実行する仕組みです。CGIの使用設定
有効化はDirectoryディレクティブごとに可能で、Optionディレクティブで
Options +ExecCGI
と設定することで実行可能になります。実行するスクリプトはScriptAliasで設定したディレクトリにおきます。スクリプトの実行権限は755としておき、httpd.confにAddHandlerディレクティブに cgi-script .cgi を設定しておくことで、xxxx.cgiファイルをcgiスクリプトとして扱わせることができます。
続いてはapacheでwebサーバーを運用していく上で役立つ知識などを紹介していきます