非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

apacheの設定ファイルについて

あとで…を連発したうちの一つ、apacheの設定ファイルについて調べた。
うーん長いなw

というわけで、そもそもから。

apacheとは

フリーのWebサーバソフトウェア

apacheの設定

httpd.confを編集する。

# vi /etc/httpd/conf/httpd.conf

以下中身

Webサーバ全体の環境設定(Section 1: Global Environment)

ServerRoot "/etc/httpd"

Web サーバのルートになるディレクトリで、インストールした場所のパス。基本変更しない


ServerTokens Prod

エラーメッセージ出力時等のサーバ情報を制限。
下にいくにつれ情報が増える。

表示内容
Prod サーバ Server: Apache
Major +メジャーバージョン Server: Apache/2
Minor +マイナーバージョン Server: Apache/2.0
Min +マイナーバージョン Server: Apache/2.0.41
OS +OS Server: Apache/2.0.41 (Unix)
Full すべて Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
PidFile run/httpd.pid

httpd の PID を書き込むファイルを指定する。
つまり、/etc/httpd/run/httpd.pid がPidファイルとして指定。
基本変更しない


Timeout 60

タイムアウトするまでの秒数。基本変更しない


KeepAlive Off

HTTPセッションを一定時間保持する設定
ONにするとパフォーマンスが向上するため、変更する。


MaxKeepAliveRequests 100

受け付ける接続要求数の最大許容値。
可能な限り大きな値を指定(KeepAlive Onが必須)
この値を0にすると無制限になるが、基本しない。


KeepAliveTimeout 15

HTTPセッションを保っておく秒数
値を大きくすれば、クライアント側の快適さは向上するが、サーバへの負荷は大きくなる


<IfModule prefork.c>
     StartServers       8
     MinSpareServers    5
     MaxSpareServers   20
     ServerLimit      256
     MaxClients       256
     MaxRequestsPerChild  4000
</IfModule>

preforkプロセス制御の設定

設定名 内容
StartServers 起動時に生成される子サーバプロセスの数
MinSpareServers アイドルな子サーバプロセスの最小個数
MaxSpareServers アイドルな子サーバプロセスの最大個数
ServerLimit 設定可能なサーバプロセス数の上限
MaxClients リクエストに応答するために作成される子プロセスの最大個数
MaxRequestsPerChild 個々の子サーバが稼働中に扱うリクエスト数の上限
<IfModule worker.c>
     StartServers         4
     MaxClients         300
     MinSpareThreads     25
     MaxSpareThreads     75
     ThreadsPerChild     25
     MaxRequestsPerChild  0
</IfModule>

workerスレッド制御の設定

設定名 内容
StartServers 起動時に生成される子サーバプロセスの数
MaxClients リクエストに応答するために作成されるスレッドの最大個数
MinSpareThreads アイドルなスレッド数の最小個数
MaxSpareThreads アイドルなスレッド数の最大個数
ThreadsPerChild それぞれの子プロセスに生成されるスレッド数の上限
MaxRequestsPerChild 個々の子サーバが稼働中に扱うリクエスト数の上限0で無制限
Listen 80

Apacheが使用するポートを指定。基本はそのまま。


LoadModule hoge_module modules/mod_hoge.so

モジュールの読み込み
個々のモジュールはあとで調べてみよう


Include conf.d/*.conf

読み込む外部設定ファイルの設定
/etc/httpd/conf.d/ディレクトリにあるconf拡張子のファイルをすべて読み込む。


ExtendedStatus On

各リクエストに対して拡張ステータス情報を保存する。
有効にしておく


User apache
Group apache

サーバーを実行するユーザとグループ。特に変更しない。
Apacheがインストールされるときに自動的に作成されるHTTP接続専用のシステムアカウント

メインのサーバの環境設定(Section 2: 'Main' server configuration)

ServerAdmin root@localhost

エラーページに表示する管理者メールアドレス。


ServerName localhost:80

サーバ名。


UseCanonicalName Off

サーバが自分自身を表す名前を作成する方法
On ServerNameで指定したポート番号とホスト名をクライアントに返す
Off クライアントから提供されたホスト名やポート番号をそのまま使用して返す
DNS Hostヘッダーをつけないクライアントをサポート(IPベースのバーチャルホストで使用されるのを想定)


DocumentRoot "/var/www/html"

ドキュメントルート
これより上位の階層へはアクセスできないが、SymbolicLink やalias を使用すれば、アクセスさせる事も可能


<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

サーバールート(/)に対しての設定
中身は後述


DirectoryIndex index.html index.php

/で終わるURLを指定した際にデフォルトで表示するファイルを指定


AccessFileName .htaccess

アクセス制御を行うためのファイルを指定。特に変更しない。
制限をかけたいディレクトリ内に置くことで、そのディレクトリに対して認証が行われる
Direcotryの設定で、AllowOverrideの値をAllかAuthConfigにする必要がある


<IfModule mod_userdir.c>
    UserDir disable
    #UserDir public_html
</IFModule>

ユーザーディレクトリ機能を有効か無効に設定する
有効にした場合、を設定する


<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

ブラウザからアクセスできないファイルを指定。


TypesConfig /etc/mime.types

MIME タイプ設定ファイルのパスを指定。基本変更しない


DefaultType text/plain

MIMEタイプファイルに記述が無かった場合の指定


HostnameLookups Off

IPアドレスをホスト名に変換し(逆引き)、ログに記録する機能


#EnableMMAP off

配送中にファイルを読み込むためにメモリマッピングを使うかどうかの設定。
SSI(Server Side Include)実行時などに利用される。


#EnableSendfile off

ファイルのクライアントへの配送時にカーネルのsendfileサポートを使うかどうかの設定
Onにするとファイルアクセスが低減される。
Apacheが参照するファイルがNFS(Network File System)上にある場合はOffにしておく必要がある。


ErrorLog logs/error_log

エラーログを記録するファイルを指定
実際のファイルの場所は/var/log/httpd/error_log
特に変更する必要なし


LogLevel warn

エラーログに出力するメッセージのレベルを指定する。
レベルを下げすぎるとログ膨大になってしまう。

指定 内容
emerg 緊急事態。システムが利用不可
alert 直ちに対応すべき必要がある
crit 致命的状態
error エラー
warn 警告
notice 重要な情報
info 情報
debug デバッグ情報
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ログファイルで使用する書式を設定する。基本変更しない


#CustomLog logs/access_log common
#CustomLog logs/referer_log referer
#CustomLog logs/agent_log agent
CustomLog logs/access_log combined

クライアントからのアクセスログを記録するファイルを指定する
実際のファイルの場所は/var/log/httpd/access_log
特に変更する必要なし


ServerSignature off

エラーメッセージ等をクライアントに返す際のフッターラインの表示を指定
ONにすると、ServerTokensで設定された内容だけがサーバー情報として追加表示される。
EMailにすると、上記に加えてServerAdminで設定した連絡先も掲載される
OFFにすると、エラーメッセージ以外の情報はクライアント側に表示されない


Alias /icons/ "/var/www/icons/"

仮想ディレクトリの設定。ディレクトリのシンボリックリンクに相当する機能。
HTTPではアクセスを受け付けないディレクトリを、コンテンツの配置場所として利用できる


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

インデックス表示に関する基本的な設定
クライアントからディレクトリのみを指定され、かつDirectoryIndexで指定されるインデックスファイルが無い場合、ディレクトリ内のファイル一覧を作成しクライアントに返す機能。


AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

ファイルに表示するアイコンをMIME符号化方法で選択


AddIconByType (TXT,/icons/text.gif) text/*

ファイルの隣に表示するアイコンをMIMEタイプによって選択


AddIcon /icons/binary.gif .bin .exe

ファイルに表示するアイコンを名前で選択


DefaultIcon /icons/unknown.gif

特定のアイコンが何も設定されていない時にファイルに表示するアイコン


AddDescription "GZIP compressed document" .gz
AddDescription "tar archive" .tar
AddDescription "GZIP compressed tar archive" .tgz

アイコン情報の指定。特に変更する必要なし


ReadmeName README.html
HeaderName HEADER.html

インデックス表示の最後および先頭に挿入するファイルを指定する。


IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

インデックス表示において無視するファイルを指定する。


AddLanguage zh-TW .zh-tw

指定される拡張子を持つファイルを特定のMIME言語タイプに結びつける
基本変更しない。


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

MIME言語タイプの適用優先順位を指定する。AddLanguageに定義されているもののみ指定可。
基本変更しない。


ForceLanguagePriority Prefer Fallback

要求に合う単独のドキュメントが見つからなかったときに行なうことを指定。
Prefer wwwサーバの応答が複数の場合に、LanguagePriorityに指定された優先順位に従い応答を返す。
Fallback wwwサーバが応答するページが無い場合にLanguagePriorityに指定されたページを応答する。
Noneも指定可。
基本変更しない。


AddDefaultCharset UTF-8

httpdが、クライアントにコンテンツデータを送るとき、Webブラウザで利用させる文字セットを設定する
指定していると、ヘッダが無視され強制的にこの文字セットになる。
Offにするとコンテンツデータに任意の文字セットが利用できるが、必ず文字セットの指定をしなければならない。


AddType application/x-tar .tgz

MIMEタイプファイルに記載されてないマッピングを追加


#AddEncoding x-compress .Z

ファイル名の拡張子を指定されたエンコーディングにマップする


AddHandler cgi-script .cgi

ファイル名の拡張子を指定されたハンドラにマップする


AddOutputFilter INCLUDES .shtml

サーバの応答をクライアントに送る前に処理するフィルタを設定する


#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html

エラーコードごとに出力するHTMLを指定する。
ユーザーからのリクエストに何らかの問題があった場合、クライアントのブラウザにエラーページを出力する。


BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

ブラウザによる環境変数の設定。
環境変数を設定すると、Apacheそのものの動作に制限をする事ができる。


#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Location>

URLによるアクセス制御。
がローカルディレクトリの設定に対し、はURLに対しての設定となる


#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Proxy *>
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Proxy>

標準プロキシーリクエストを許可する


#ProxyVia On

ViaヘッダでのHTTP/1.1の扱いを有効/無効にする


#AddOutputFilter Includes html

利用許可する拡張子を設定


#AddHandler type-map var
AddHandler cgi-script .cgi

ファイル拡張子とハンドラをマッピングする

#LanguagePriority en es de fr

2つ言語間で同じ優先度があった場合にどちらをより優先するかを設定


#ForceLanguagePriority Prefer Fallback

該当する言語がない場合に、選択肢を返すのか、アクセス拒否を返すのかの優先度を設定
選択肢を返す場合はPrefer
アクセス拒否を返す場合はFallback

バーチャルホストの設定(Section 3: Virtual Hosts)

NameVirtualHost *:80

名前ベースのバーチャルホストのための IP アドレスを指定


<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

特定のホスト名やIPアドレスのみに適用される。
内容は上記同様

コンテナ

<Files hoge>~</Files>

hogeに指定されたファイルにのみ適用

<FilesMatch hoge>~</FilesMatch>

正規表現hogeに指定されたファイルにのみ適用

<IfModule module>~</IfModule>

moduleが読み込まれたときにだけ有効。!をmodule名の前につけると、読み込まれていないときになる

マルチプロセッシングモジュール (MPM)

apacheが、並列処理するためのモジュール

prefork

デフォルトの設定
あらかじめ複数のプロセスを用意しておき、クライアントからのリクエストを待ち受ける。
用意したプロセス数を越えるリクエストが要求された場合、新たなプロセスを生成することにより、クライアントからのアクセスに対応する

worker

リクエストの応答にスレッドを使い、プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができる。
さらに、多くのスレッドを持った複数のプロセスを維持することで、 プロセスベースのサーバの持つ安定性を保持する。

指定したドメイン/ホストの環境設定

AllowOverride

.htaccessが使用できるかの設定

設定値 内容
None .htaccessでは何も設定できない
All .htaccessで設定可能なものは全て有効
AuthConfig 認証関連の使用を許可
FileInfo メタデータを制御を許可
Indexes ディレクトリインデックス関連の使用を許可
Limit アクセス制御関連の使用を許可
Options カンマ区切りで許可するものを指定

Options

設定対象の基本的な動作許可、制限

設定値 内容
None 特殊な機能を使わない時
All MultiViewsを除いた全ての機能が有効。設定しない場合はこれ
FollowSymLinks シンボリックリンクでのアクセスを許可
Includes SSIの使用を許可
IncludesNOEXEC SSIは許可するが、SSIが外部cgiを呼び出すのを禁止
Indexes リクエストに対するファイルが存在しない場合に、ディレクトリ内ファイルの一覧を表示する
MultiViews コンテントネゴシエーションを有効
SymLinksIfOwnerMatch 所有アカウントが一致している場合アクセス許可
ExecCGI CGIの実行を許可

Order

AllowとDenyを組み合わせて、HTTPアクセスを制限する
Orderで評価される順番を制御する。

設定値 内容
Order Deny,Allow アクセスはデフォルトで許可(ブラックリスト方式)
Order Allow,Deny アクセスはデフォルトで拒否(ホワイトリスト方式)
Satisfy all Orderの制限と認証の両方クリアで許可
Satisfy any Orderの制限か認証のどちらかクリアで許可
Allow from 対象 許可する対象を指定
Deny from 対象 拒否する対象を指定

すべてのアクセスを拒否する場合

Order Deny,Allow
Deny from all 


すべてのアクセスを許可する場合

Order allow,deny
Allow from all


ローカルのみ許可

Order Deny,Allow
Deny from All
Allow from 127.0.0.1

ポートとは

外部とデータを入出力するための、ソフトウェアやハードウェアのインターフェース

よく利用されるポート

番号 プロトコル 詳細
25 smtp メール送信(SMTP)
53 domain DNS
80 http www
110 pop3 メール受信(POP)
443 https www(セキュア)

ディレクティブとは

プログラム中に埋め込むコンパイラへの命令

MIMEタイプとは

拡張子という概念と、MIMEタイプという概念がある。
タイプ名/サブタイプ名の形式の文字列で、WEBサーバーとWEBブラウザの間は、このMIMEタイプを用いてデータの形式を指定する

ファイル形式 一般的な拡張子 MIMEタイプ
テキスト .txt text/plain
HTML文書 .htm .html text/html
XML文書 .xml text/xml
JavaScript .js text/javascript
CSS .css text/css
GIF画像 .gif image/gif
JPEG画像 .jpg .jpeg image/jpeg
PNG画像 .png image/png
ZIPアーカイブ .zip application/zip
PDFファイル .pdf application/pdf
MPEG映像 .mpg video/mpeg
flash .swf application/x-shockwave-flash


OrderのDenyとAllowの感じがややこしい…。
次は、フレームワークに戻る予定。