Webサーバの構築

Webサーバ構築に必要なもの

構築手順

  1. ソースアーカイブの入手と展開
  2. コンパイルとインストール
  3. 設定ファイルの修正
  4. サービスデーモンの起動

apache.org HTTP SERVER PROJECT の "Stabe Release" から Unix Source からソースを取得するのが本筋である。 ただし、Apache httpdの導入には、apr, apr-util という別のソフトウェアも必要なので、それが一括で得られる FTP サイトに繋いで3つを取得する。

ここでは、ftp.jaist.ac.jp から

を選んで取得する例を示す。

lftp ftp.jaist.ac.jp
cd pub/pkgsrc/distfiles	# 途中Tab補完が効く
get httpd-2.4.[Tab][Tab]	# Tab 2連打する
httpd-2.4.55.tar.bz2  httpd-2.4.57.tar.bz2
httpd-2.4.56.tar.bz2  httpd-2.4.58.tar.bz2
get httpd-2.4.58.tar.bz2	# 最新版の番号を入れる
: 続いて apr と apr-util の最新版を同様に取得する
get apr-1.[Tab][Tab]
apr-1.7.0.tar.bz2  apr-1.7.2.tar.bz2  apr-1.7.4.tar.bz2
get apr-1.7.4.tar.bz2
get apr-util[Tab][Tab][Tab]	# Tab 3連打
apr-util-1.6.1.tar.bz2  apr-util-1.6.3.tar.bz2
get apr-util-1.6.3.tar.bz2
exit
ls
: 取得ファイルを確認後 アーカイブファイルを展開する
tar zxpf httpd-2.4.xx.tar.bz2
cd httpd-2.4.xx
less INSTALL        (qで抜ける)

INSTALL には aprとapr-utilを srclib/ 以下に展開せよと指示があるので それに従う。

cd srclib
tar zxpf ~/apr-1.7.x.tar.bz2
mv apr-1.7.x apr
tar zxpf ~/apr-util-1.6.x.tar.bz2
mv apr-util-1.6.x apr-util

元のディレクトリに戻り configure に進む。

インストール

コンパイルしたあと、スーパーユーザ権限でインストールする。

CC=cc CFLAGS=-I/usr/iekei/text/include \
	./configure --prefix=/var/apache --with-included-apr
make
sudo make install

/var/apache/conf ディレクトリにインストールされている 設定ファイルのうちhttpd.confを確認・修正する。ここでは

の項目を変更する。修正にはviを使う。

sudo -H -s
cd /var/apache/conf
vi httpd.conf

[数] は省略すると1。

[]x字削除
[]dd行削除
[]iカーソル位置で挿入モードへ
[]I行頭で挿入モードへ
[]aカーソル直後で挿入モードへ
[]A行末で挿入モードへ
ESC挿入モードを抜けコマンドモードへ
ZZ保存終了
:q! [Return]編集破棄終了
:w! [Return]強制保存
:wq! [Return]強制保存終了

vi の使い方も参照。

主な設定項目

Log

アクセスログ、エラーログファイルの場所、書式を決める。

User home directories

~ユーザで該当ユーザの ~/public_html/ ディレクトリを意味する。

Virtual host

ひとつのホストで複数のWeb空間を持たせる。

WebDav

Webサーバによるファイル共有。

SSL

Secure Socket Layer - 暗号化ソケットによる伝送

変更点を差分形式で以下に示す(行頭マイナスの行を消して行頭+の行を足す)。


--- original/httpd.conf	2018-11-29 11:43:34.387407000 +0900
+++ httpd.conf	2018-11-29 11:47:28.436374000 +0900
@@ -147,7 +147,7 @@
 LoadModule dir_module modules/mod_dir.so
 #LoadModule actions_module modules/mod_actions.so
 #LoadModule speling_module modules/mod_speling.so
-#LoadModule userdir_module modules/mod_userdir.so
+LoadModule userdir_module modules/mod_userdir.so
 LoadModule alias_module modules/mod_alias.so
 #LoadModule rewrite_module modules/mod_rewrite.so
 
@@ -160,8 +160,8 @@
 # It is usually good practice to create a dedicated user and group for
 # running httpd, as with most system services.
 #
-User daemon
-Group daemon
+User www
+Group www
 
 </IfModule>
 
@@ -182,7 +182,7 @@
 # e-mailed.  This address appears on some server-generated pages, such
 # as error documents.  e.g. admin@your-domain.com
 #
-ServerAdmin you@example.com
+ServerAdmin c118xxx@x.koeki-u.ac.jp
 
 #
 # ServerName gives the name and port that the server uses to identify itself.
@@ -192,6 +192,7 @@
 # If your host doesn't have a registered DNS name, enter its IP address here.
 #
 #ServerName www.example.com:80
+ServerName qm220.is.koeki-u.ac.jp:80
 
 #
 # Deny access to the entirety of your server's filesystem. You must
@@ -468,7 +469,7 @@
 #Include conf/extra/httpd-languages.conf
 
 # User home directories
-#Include conf/extra/httpd-userdir.conf
+Include conf/extra/httpd-userdir.conf
 
 # Real-time info on requests and configuration
 #Include conf/extra/httpd-info.conf

その他の項目

  1. CGIを使うためには httpd.conf 内の AddHandler cgi-script を有効化する。

autoconfとconfigureについて

ソース配布されているものには configure スクリプトが付属していることが 多い。これは、コンパイルに必要な情報を自動的に収集して、それに応じた Makefileを生成するものである。

configure スクリプトに与えるオプションで、そのソフトウェアをインストー ルするディレクトリを指定したりするなど、様々な設定を変えることができる。 どのようなオプションがあるかは configure --help で知ることができる。

./configure --help | less

--prefix=ディレクトリ オプションで インストール先ディレクトリを変更できる。その他ソフトウェア固有の 機能のON/OFFを選択するオプションが多数ある。

ひとつのソフトウェアは、別のソフトウェアに由来するヘッダファイルと ライブラリに依存することが多い。ヘッダファイルはCソースのコンパイル時に 参照され、ライブラリファイルはリンク時に参照される。どのディレクトリから ヘッダファイルを探すか、ライブラリを探すか、はCコンパイラに与えるオプションで指 示できる。configure実行時にコンパイラがそれらのオプションを設定するように操作 することができる。また、configure起動時の環境変数を設定することで、 使用するコンパイラやコンパイラに与えるオプションを操作できる。 たとえば今回利用した

CC=cc CFLAGS=-I/usr/iekei/text/include ./configure ....

という起動は、configure 起動時の環境変数 CC と CFLAGS を設定し、コンパイラに cc、そのオプションに -I/usr/iekei/text/include を常に指定するような指示となる。

Apacheの起動

Apacheの起動は $PREFIX/bin/apachectl スクリプトを介して 行なう。

/var/apache/bin/apachectl help

で使い方が出る。通常は、

apachectl start起動
apachectl restart再起動
apachectl stop停止

を使う。起動の確認はpsコマンドでプロセス一覧を見て行なう。

ps auxw

起動したら手元のブラウザ(firefox)で

http://qmXXX.is.koeki-u.ac.jp

を開いて確認する。

Userdirの変更と確認

httpd.confで有効化した

Include conf/extra/httpd-userdir.conf

を確認し、これを変更してみる。

cd /var/apache/conf/extra
vi httpd-userdir.conf

デフォルトの

UserDir public_html

public_html を好きなディレクトリ名に変えてみる。
例:

UserDir webdir

変更をApacheに反映させるにはapachectlを用いる。

/var/apache/bin/apachectl restart

一般ユーザに戻り、~/webdir を作り、その中に index.html を作成し、ブラウザでアクセスしてみる。

VirtualHostの構築

(この項目はDNS設定完了後に行なう)

ここでは,独自ドメインが foo.is.koeki-u.ac.jp で, そのドメイン内に

の2つの仮想ホストを構築する例を示す。 2つのドメイン名はDNSに登録済みである必要がある。

httpd.confの修正

サーバ上で /var/apache/conf に移動し, httpd.conf ファイルを開く。

cd /var/apache/conf
sudo vi httpd.conf

"vhosts" というパターンで 検索してみつかった行のコメント記号(#)を外す。

#Include conf/extra/httpd-vhosts.conf
     ↓
Include conf/extra/httpd-vhosts.conf

続いて,extra/httpd-vhosts.conf を編集し,

<VirtualHost *:80>
    ServerAdmin 管理者(自分の)メイルアドレス
    DocumentRoot "rootドキュメントのディレクトリ名(フルパス)"
    ServerName サーバ名
    ServerAlias その他のサーバ名 # もしあれば,無ければコメントアウト
    ErrorLog "logs/エラーログのファイル名_log"
    CustomLog "logs/アクセスログのファイル名_log" common
</VirtualHost>

となるように修正する。以下は,www.foo.is.koeki-u.ac.jp と fes.is.koeki-u.ac.jp の2ドメインの設定を記述した例である。

<VirtualHost *:80>
    ServerAdmin ta01002@e.koeki-u.ac.jp
    DocumentRoot "/var/home/yuuji/webspace"
    ServerName www.foo.is.koeki-u.ac.jp
    # ServerAlias 別名サーバ
    ErrorLog "logs/www-error_log"
    CustomLog "logs/www-access_log" common
</VirtualHost>

<Directory /var/home/yuuji/webspace>
 Options Indexes
 Require all granted
</Directory>

<VirtualHost *:80>
    ServerAdmin ta01002@e.koeki-u.ac.jp
    DocumentRoot "/var/home/yuuji/fes-web"
    ServerName fes.foo.is.koeki-u.ac.jp
    ErrorLog "logs/fes-error_log"
    CustomLog "logs/fes-access_log" common
</VirtualHost>

<Directory /var/home/yuuji/fes-web>
 Options Indexes
 Require all granted
</Directory>

クォートや綴り間違いのないことを確認したら保存終了し, apacheを再起動する。

sudo /var/apache/bin/apachectl restart

エラーなしで再起動できたら,2つのドメイン用のコンテンツを準備する。 上記の設定例では,ホームディレクトリ内の webspace/fes-web/ ディレクトリにそれぞれ独立した index.html を配備することになる。

準備できたら手元のブラウザから

2つのドメイン(実際は自分で設定したドメイン)をURL指定して開き, 中味を確認する。

yuuji@koeki-u.ac.jp