Apacheのインストールから起動まで webサーバーを立ち上げよう!

Apacheとは?機能と使い方の基本

ウェブページを見ることができるのは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ファイルを送信します。

Webサーバーとは?

Webサーバーとは?

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の#を消す

puclic_htmlの有効化

puclic_htmlの有効化

次にパーミッションの設定を行います。

Apacheはユーザーのディレクトリにそのままではアクセスできません。なので権限を変更する必要があります。

public_htmlディレクトリはユーザーのホームディレクトリに作成します。

「/home/user/public_html/」

public_htmlを含むユーザーのホームディレクトリ /userのパーミッションを変更します。public_htmlの中にindex.htmlをおきます。

chmod 755 /home/user

Apacheのインストール

Apacheのインストールはyumから行います。

 sudo yum install httpd

でインストールできます。

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ディレクティブの部分を設定すれば導入できます。

/etc/httpd/conf/httpd.conf

<Directory “ディレクトリ名”>

AuthType Basic

AuthName “認証時の表示”

AuthBasicProvider file

AuthUserFIle  “パスワードファイル(.htpasswd)のパス”

Require user  “ユーザー”

</Directory>

パスワードの生成はhtpasswdコマンドで行います。

HTML
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スクリプトとして扱わせることができます。

コメントを残す

メールアドレスが公開されることはありません。