Apacheを使ってWebサーバの構築

UbuntuApacheを使用するには、先ず以下のようにしてapache2のパッケージをインストールする。

$ sudo aptitude install apache2

あと、apxs を使用できるようにする為、以下のパッケージもインストールしておく。

$ sudo aptitude install apache2-dev

$ which apxs2
/usr/bin/apxs2

なお、このページで行うApacheの設定の概要は、

  1. 意図しないディレクトリやファイルへのアクセスを禁止する
  2. DocumentRootは/var/www/html
  3. SSIを使用可能にする
  4. Userdirを使用できるようにする
  5. 不要なアクセスについてはログに記録しないようにする
  6. パフォーマンスにちょっとこだわってみる

とりあえずはこんなところで。

Apacheの基本的な設定

/etc/apache2/apache2.conf を以下のように編集する。

$ sudo vi /etc/apache2/apache2.conf

# パフォーマンス重視ならOffのままで
HostnameLookups Off
↓
HostnameLookups On

# 必要以上なマシン情報を出力しない為
ServerTokens Full
↓
ServerTokens Prod

ServerSignature On
↓
ServerSignature Off
 
#LogFormat "%{User-agent}i" agent の下くらいに以下を追記
CustomLog /var/log/apache2/access.log combined

次に、デフォルト状態の /etc/apache2/sites-available/default を見ると非常に長く、/etc/apache2/sites-available/に違うファイルを作った時に共通化できそうな部分もあるので、なるべく defaultファイルは短くするように記述してみる。
そして、もともとdefaultファイルに書いてあったものや追加分は、/etc/apache2/httpd.conf に追記していくことにする。

/etc/apache2/httpd.conf を以下の内容にする。(デフォルトでは空のファイル)
下記の記述は、/etc/apache2/sites-available/default にあった分を追加したり、足りないものを追記したりしている。

$ sudo vi /etc/apache2/httpd.conf

# 下の2つは自分の環境に合わせて編集する
ServerAdmin webmaster@chibi.name
ServerName chibi.name:80

UseCanonicalName Off

# DocumentRootの指定
DocumentRoot "/var/www/html"

# デフォルトのディレクトリへのアクセスの振る舞いを強化する
<Directory />
    Order Allow,Deny  Deny from all
    Options None
    AllowOverride None
</Directory>

# .bakファイルなど意図しないファイルにアクセスさせない
<FilesMatch "(^\.ht|~$|\.bak$|\.BAK$)">
    Order Allow,Deny
    Deny from all
</FilesMatch>

# CVSファイルにアクセスさせない
<DirectoryMatch /CVS/>
    Order Allow,Deny
    Deny from all
</DirectoryMatch>

# 各種マニュアルファイルへのアクセス制御
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
  
# ScriptAlias
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

# VirtualHostを有効にする際は以下のコメントを外す
#NameVirtualHost *:80

続いて、/etc/apache2/sites-available/default は以下のような内容になる。

$ sudo vi /etc/apache2/sites-available/default

# DirectoryにはDocumentRootを指定してやる
<Directory "/var/www/html">
    # SSI(制限有り)やCGIの使用を許可している
    Options IncludesNoExec ExecCGI FollowSymlinks
    AllowOverride None

    # アクセス制御
    Order allow,deny
    Allow from all
</Directory>

DocumentRootに/var/www/htmlを指定したので、このディレクトリが無い場合は作成しておく。また適切な所有権やパーミッションを設定しておく。

$ sudo mkdir /var/www/html

また、SSIを使用できる設定にしているので、includeモジュールをa2enmodコマンドで読み込んでおく。
SSIを使う必要が無いならこのモジュールは有効にしない。また、defaultファイルに指定したIncludesNoExecなども不要になる。

$ sudo a2enmod include

あとは、色々と微調整を行う。
DirectoryIndexの設定を変更する為、/etc/apache2/mods-enabled/dir.conf を以下のように使用頻度の高い順に変更する。(自分の環境に合わせて)

$ sudo vi /etc/apache2/mods-enabled/dir.conf
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml
↓
DirectoryIndex index.php index.html index.shtml index.cgi

LanguagePriorityの設定を変更する為、/etc/apache2/mods-enabled/negotiation.conf を編集する。優先度順に並んでいるので、jaを一番前に持ってくる。

$ sudo vi /etc/apache2/mods-enabled/negotiation.conf
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
↓
LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

Aliasを設定するなら、/etc/apache2/mods-enabled/alias.conf に追記する。

$ sudo vi /etc/apache2/mods-enabled/alias.conf
...
Alias /hoge     "/home/chibi/public_html/hoge"

AddHandlerの設定をする為、/etc/apache2/mods-enabled/mime.conf を編集する。

$ sudo vi /etc/apache2/mods-enabled/mime.conf
...
#AddHandler cgi-script .cgi
↓
AddHandler cgi-script .cgi .pl

server-status/ へのアクセスをLAN内マシンからも許可する。

$ sudo vi /etc/apache2/mods-enabled/status.conf
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost ip6-localhost
    Allow from 192.168.1.0/24		←追記(自分の環境に合わせて)
</Location>

以上で設定は完了なので、Apacheを再起動して設定を有効にしてやる。これで基本的な設定も完了しているので、試しに/var/www/html 以下にhtmlファイルを作成し、そのファイルにアクセスしてちゃんとページが表示されるかも確認してみる。

$ sudo /etc/init.d/apache2 restart

デフォルトではファイルがあっちゃこっちゃに分割されていて慣れるまでは非常に辛いが、慣れてくると非常に便利になってくる。

※備考

  • DirectoryIndexは、/etc/apache2/mods-enabled/dir.conf
  • LanguagePriorityは、/etc/apache2/mods-enabled/negotiation.conf
  • Aliasは、/etc/apache2/mods-enabled/alias.conf
  • server-statusは、/etc/apache2/mods-enabled/status.conf
  • IndexOptionsは、/etc/apache2/mods-enabled/autoindex.conf
  • Portを変更したい場合は、/etc/apache2/ports.conf。httpd.confのServerNameの部分も忘れずに

長くなってきてしまったので、とりあえず今回はここまででにして、次回以降で最初に記述した設定の概要の続き(4〜)の設定をしていく。