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)する。

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を設定する
添付ファイル
人気記事ランキング
ウィキ募集バナー