naobe @ ウィキ
Apache2.4.2
最終更新:
Bot(ページ名リンク)
-
view
Makefileからの知見
- module以外の関数は、staticリンクでhttpdにリンクされる
- moduleの中で、core,httpモジュールは、staticリンクでhttpdを作成する
- moduleの中で、core.httpモジュール以外は、ダイナミックリンクでmod_foo.soを作成する
- staticリンクのオブジェクトを作成して、httpdをstaticリンクで作成する。最後にダイナミックリンクのモジュールライブラリ(soファイル)を作成する。
ソース解読
わからないところが多いけど大体こんなものではないでしょうか。
apache_src_read.xls

ソース解読からの知見
項目1 | 項目2 | 説明 |
---|---|---|
環境変数 | SHOW_HOOKS | 設定があれば、標準出力にモジュール名を出力。フックデバッグをONにする。 |
prelinked_module | moduleディレクティブに設定しなくてもロードするモジュール。core_module,so_module,http_module,mpm_event_module。mpm_event_moduleはデフォルト。mpmの設定により変わる。 | |
MPM(Multi Processing Module)
名前 | 説明 |
---|---|
event | workerの改良版。非同期I/O動作のイベントドリブンなmpm。keep aliveな接続のとき、ワーカスレッドを占有しない(???)。 |
prefork | スレッドを使わず、先行して fork を行なう。PHPを使うときはこの設定。 |
worker | マルチスレッドとマルチプロセスのハイブリッド型。プロセスあたりのスレッド数は固定になっている。 |
どのMPMを選ぶかは、configure スクリプトで --with-mpm=名前。デフォルトはevent。
httpd コマンド引数
引数 | 説明 |
---|---|
-C | 先読み設定(prereadconfig)。httpd.conf設定を読み込む前に設定される。httpd.confの設定で上書きされる? -C 設定1 -C 設定2という形式で複数の設定が可能? |
httpd.conf
httpd.confをできるだけ、わかりやすく説明してみる。
2.4.2のデフォルト
ServerRoot "/usr/local/apache2"
プロセス実行時のディレクトリ
Listen 80
ポート番号80をListen(TCPのlisten)する。
ポート番号80をListen(TCPのlisten)する。
LoadModule authn_file_module modules/mod_authn_file.so
DSOモジュールmod_authn_file.soをロードする(使用する)。
<IfModule unixd_module> User daemon Group daemon </IfModule>
unixd_moduleをロードしていたら、プロセスのUserは、daemon。Groupはdaemon
<Directory /> AllowOverride none Require all denied </Directory>
サーバファイルシステムのアクセスを禁ずる。Directoryタグに"/"を指定しているので、全てのファイルシステムを指す。この設定以後の設定で、apacheが使用する静的コンテンツのディレクトリの設定を個別に指定している。
DocumentRoot "/usr/local/apache2/htdocs" <Directory "/usr/local/apache2/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
静的コンテンツのルートディレクトリを指定して、そのディレクトリ以下の機能を指定している。ディレクトリを指定したURLを要求すると、DirectoryIndexディレクティブで指定したファイルがなければ、ファイルのリストを表示する。URLにシンボリックリンクを指定できる。.htaccessは無視される。承認制御はしない。
<IfModule dir_module> DirectoryIndex index.html </IfModule>
dir_moduleをロードしていると有効になる。URLにディレクトリを指定するとindex.htmlを返す。
<Files ".ht*"> Require all denied </Files>
.ht*ファイルのリクエストを全て拒絶する。
ディレクティブ
AllowEncodedSlashes
URI中のURLエンコードされた'/'(%2f)を許可するか設定する
モジュール | 書式 | 説明 |
---|---|---|
core | AllowEncodedSlashes On|Off | On:エンコードスラッシュを許可。Off:エンコードスラッシュを不許可(404エラーを返す) |
デフォルトはOff
AllowOverride
.htaccessファイルによる上書きを制御する。
モジュール | 書式 | 説明 |
---|---|---|
core | AllowOverride none | .htacessファイルによる設定変更を禁じる |
IfModule
特定のモジュールがある場合に動作するディレクティブを指定する。先にLoadModuleディレクティブで対象モジュールを設定しなければならない。
モジュール | 書式 | 説明 |
---|---|---|
core | <IfModule [!]module_id|module_file>ディレクティブ</IfModule> | 特定のモジュールがある(!を記述した場合は、特定のモジュールがない)場合に動作するディレクティブを指定する。 |
【例】dir_moduleがあるので、URLにディレクトリを指定した時にindex.htmlが対象になる。
LoadModule dir_module modules/mod_dir.so <IfModule dir_module> DirectoryIndex index.html </IfModule>
Location
指定したURLのディレクティブの適用範囲を制限する。ファイルシステム外のコンテンツのアクセスを制御する。ファイルシステムのアクセス制御には、Directoryディレクティブを使う。
モジュール | 書式 | 説明 |
---|---|---|
core | <Location URL-path|URL> ... </Location> | /で始まる場合は、スキーマ、ホスト名を省略している。 |
【例】http://host/server-statusにアクセスしたときは、server-statusハンドラを使う。.example.comからのアクセスのみ許可する。
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .example.com </Location>
Order deny,allowで許可の順番を決める。denyの後にallowを適用する。denyで拒否しても、allowで指定すると許可する。上記の例では、.example.com以外を拒否する。Orderがない場合は、deny,allowの順番を適用する。これは、順番にアクセスを設定するということでしょう。.example.comは、denyで拒否されるが、allowで上書きして許可する。allow,denyの順番だと、全てを拒否することになる。
Options
モジュール | 書式 | 説明 |
---|---|---|
core | Options [+|-]option [[+|-]option] ... | ディレクトリに対して使用可能な機能を設定する |
Options None | 機能を全て無効にする | |
Options All | MutiViewを除いた機能を全て有効にする | |
Options FollowSymLinks | サーバが、このディレクトリ内でシンボリックリンクをたどれるようにする | |
Options Index | DirectoryIndexで指定したファイルがなければ、ファイル一覧を整形して返す |
Order
許可の順番を指定する。Deny,Allowの両方にマッチしなければ拒否する。
モジュール | 書式 | 説明 |
---|---|---|
mod_access_compat | Order [Deny|Allow],[Deny|Allow] | 許可の順番を指定する。デフォルトは、Deny,Allow |
【例】www以下のディレクトリは、apache.orgドメインからのリクエストのみ許可する(全てのリクエストを拒否したのち、apache.orgのみ許可する)。
<Directory /www> Order Deny,Allow Deny from all Allow from apache.org <Directory>
ProxyPass
リモートサーバをローカルサーバの URL 空間にマップする(リバースプロキシ)
モジュール | 書式 | 説明 |
---|---|---|
mod_proxy | ProxyPass [path] !|url [key=value key=value ...]] | ローカルサーバへのパスをurl(リモートサーバ。クエリ文字列は使えない)に転送する。key,valueは下表参照 |
【例】
ProxyPass /mirror/foo/ http://backend.example.com/ の設定のとき
http://example.com/mirror/foo/bar へのリクエストは http://backend.example.com/barに転送する。
key=valueの説明
key | デフォルト | 説明 |
---|---|---|
min | 0 | リモートサーバが常に開いているコネクション数 |
max | コネクション数のハードリミット。mpmのプロセスあたりのスレッド数 | リモートサーバの最大コネクション数 |
smax | max | コネクション数のソフトリミット。リモートサーバのコネクション数がこの数を超えると、超えたコネクションにttlが有効になる。 |
ttl | - | smaxを超えた非活動状態のコネクションの生存時間(sec) |
timeout | コネクションタイムアウト(sec) | |
keepalive | Off | On|Off。Onのときkeepalive有効。時間はOSの設定(通常は2分)。 |
retry | 60 | リトライタイムアウト(sec) 回数ではない??? |
loadfactor | 1 | ワーカあたりの負荷係数?? |
urlのスキーマが、balancerのときは、リモートサーバと通信しない仮想ワーカが作成され、パラメータはこの仮想ワーカに適用される。仮想ワーカは実際のワーカを管理する。
【例】負荷分散
ProxyPass /special-area http://special.example.com/ smax=5 max=10 ProxyPass / balancer://mycluster stickysession=jsessionid nofailover=On <Proxy balancer://mycluster> BalancerMember http://1.2.3.4:8009 BalancerMember http://1.2.3.5:8009 smax=10 # Less powerful server, don't send as many requests there BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20 </Proxy>
BalancerMemberのkey=value
key | デフォルト | 説明 |
---|---|---|
lbmethod | - | byrequests:リクエスト数で重みづけする。 bytraffic :転送量のバイト数で重み付けする。 |
stickysession | - | バランサーのスティッキーセッション名。Javaの場合はjsessionid。この設定すると、同じセッションは同じバックエンドサーバに転送する。 |
nofailover | Off | On: ワーカがエラーであったり無効の時にセッションを切る。バックエンドサーバがセッションレプリケーションをサポートしていない場合はOnにする(fail overしない)。 |
ProxyRequests
フォワードプロキシのON/OFFを設定する。
項目 | 説明 |
---|---|
フォワードプロキシ | クライアントのプロキシ設定をしているときのプロキシ(URIは目的のサーバだが、通信先はプロキシ)。ファイアウォールによって制限されているクライアントにインターネットのアクセスを許可する。 |
リバースプロキシ | クライアントはプロキシに対して接続するが、リバースプロキシは自分では処理しないで目的のサーバに送る。apcheとTomcatの関係。 |
モジュール | 書式 | 説明 |
---|---|---|
proxy | ProxyRequests on|off | on:フォーワードプロキシを有効にする。off:フォワードプロキシを無効にする。 |
Require
directoryディレクティブ内、.htaccess内で使われる。ユーザ、グループ、ホストなどに対してリソース使用の承認条件を規定する。モジュールによって記述が異なる。
モジュール | 書式 | 説明 |
---|---|---|
mod_auth_core | Require all granted | アクセスは無条件に許可 |
Require all denied | アクセスは無条件に不許可 | |
Require env env-var [env-var] ... | 指定した環境変数がセットされているときに許可 | |
Require method http-method [http-method] ... | 指定したHTTPメソッドのときに許可 | |
Require expr expression | expressionがtrueのときに許可。expressionは、http://httpd.apache.org/docs/2.4/expr.html 参照 |
ServerPath
VirtualHostディレクティブの中で使う。URIがこのパスに一致したときに、優先的にこのVirtualHostを使う
モジュール | 書式 | 説明 |
---|---|---|
core | ServerPath URL-path | URL-pathを設定する |
添付ファイル