Apache HTTP Serverの変数一覧

Apache HTTP Server (httpd) で使用可能な変数を整理した。

概要

Apache HTTP Serverには設定ファイル内で使用可能な変数が存在する。

これらの変数は,%{VARIABLE}のように,変数を%{}で囲むことで有効になる。きめ細かな処理を施す上に必要な情報が含まれており,設定ファイル内で多用する。

これらの変数についてよくわかっていなかったので整理する。

整理にあたっては,以下の情報源を参考にした。

情報源
変数一覧

Apache v2.4の公式サイトの変数一覧とその値の例を掲載する。mod_sslなど拡張モジュールの変数はきりがないのでひとまず除外する。

値の例は [https://localhost:8443/variable?q1=query1&q2=query2#id] のURLへのアクセスのものとなっている。

以下の変数はHTTP要請ヘッダーの該当する値が入っている。

HTTPヘッダーの変数
変数説明
HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8UAが受付可能なメディアタイプ。
HTTP_COOKIEjenkins-timestamper-offset=-32400000HTTP Cookieの項目と値。
HTTP_FORWARDED
経由したプロキシーの種類やバージョン情報。
HTTP_HOSTlocalhost:8443元のURLのホスト。
HTTP_PROXY_CONNECTION
プロキシーの接続情報。
HTTP_REFERER
参照元URL。
HTTP_USER_AGENTMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0User Agent (Webブラウザー) の種類。

上記の変数以外のHTTPヘッダーの値はreq関数で取得する。

その他のHTTP要請に関する変数は以下の通りとなっている。

その他のHTTP要請に関する変数
変数説明
REQUEST_METHODGETHTTPメソッド
REQUEST_SCHEMEhttpsURIのスキーム。
REQUEST_URI/variableURIのパス部分。
DOCUMENT_URI/variableREQUEST_URIと同じ。
REQUEST_FILENAME/home/senooken/.local/var/www/html/variable要請に一致するローカルファイルシステムのフルパス。
SCRIPT_FILENAME/home/senooken/.local/var/www/html/variableREQUEST_FILENAMEと同じ。
LAST_MODIFIED19700101090000ファイルの最終修正日時。
SCRIPT_USERsenookenスクリプトの所有者名。
SCRIPT_GROUPsenookenスクリプトのグループ名。
PATH_INFO

QUERY_STRINGq1=query1&q2=query2現在の要請のクエリー文字列。
IS_SUBREQfalse現在の要請がサブ要請の場合に”true”, それ以外は “false”
THE_REQUESTGET /variable?q1=query1&q2=query2 HTTP/1.1完全な要請行。
REMOTE_ADDR127.0.0.1リモートホストのIPアドレス。
REMOTE_PORT34588リモートホストのポート番号 (v2.4.26以上で使用可能)。
REMOTE_HOST127.0.0.1リモートホストのホスト名。
REMOTE_USER
リモートホストの認証ユーザー名 (<If>内で使用不可能)。
REMOTE_IDENT
mod_identで設定されるユーザー名。
SERVER_NAMElocalhost現在の仮想ホストのServerName。
SERVER_PORT8443現在の仮想ホストのポート番号。
SERVER_ADMINyou@example.com現在の仮想ホストのServerAdmin。
SERVER_PROTOCOLHTTP/1.1要請に使用されたプロトコル。
DOCUMENT_ROOT/home/senooken/.local/var/www/html現在の仮想ホストのDocumentRoot。
AUTH_TYPE
設定されたAuthType (例: basic)。
CONTENT_TYPEtext/html; charset=iso-8859-1応答のコンテントタイプ (<If>で使用不可能)。
HANDLER
ハンドラーが作成する応答の名前。
HTTP2offHTTP/2要請時に”on”, それ以外は”off”。
HTTPSonHTTPS要請時に”on”,そうでなければ”off”。
IPV6offIPv6接続時に”on”, そうでなければ”off”。
REQUEST_STATUS404要請へのHTTPエラーステータス (<If>で使用不可能)。
REQUEST_LOG_ID
要請のエラーログID (参照: ErrorLogFormat)。
CONN_LOG_ID
接続のエラーログID (参照: ErrorLogFormat)。
CONN_REMOTE_ADDR127.0.0.1接続のピアーIPアドレス (参照: mod_remoteip)
CONTEXT_PREFIX

CONTEXT_DOCUMENT_ROOT/home/senooken/.local/var/www/html

HTTP要請とは無関係な変数は以下の通りとなる。

その他の変数
変数名説明
TIME_YEAR2020現在の年。
TIME_MON07現在の月。
TIME_DAY26現在の日。
TIME_HOUR09現在の時間。
TIME_MIN27現在の分。
TIME_SEC45現在の秒。
TIME_WDAY0現在の曜日 (0が日曜日)。
TIME20200726092745現在の日時。
SERVER_SOFTWAREApache/2.4.39 (Unix) OpenSSL/1.1.1a サーバーバージョン文字列。
API_VERSION20120211APIバージョンの日付。

頻出変数

全部で52個の変数が存在するが,よく使われる変数は限られてくる。そこで,よく使うと思われる変数を以下に抜粋した。

頻出変数
変数説明
HTTP_HOSTlocalhost:8443要請先のURLのホスト名。
SERVER_NAMElocalhost現在の仮想ホストのServerName。
REQUEST_URI/variableURIのパス部分。
QUERY_STRINGq1=query1&q2=query2現在の要請のクエリー文字列。
HTTPSonHTTPS要請時に”on”,そうでなければ”off”。
REQUEST_STATUS404要請へのHTTPエラーステータス (<If>で使用不可能)。
IS_SUBREQfalse現在の要請がサブ要請の場合に”true”, それ以外は “false”
LAST_MODIFIED19700101090000ファイルの最終修正日時。
TIME20200726092745現在の日時。

要請先URIの情報として,HTTP_HOST, SERVER_NAME, REQUEST_URI, QUERY_STRING, HTTPSがある。特に,REQUEST_URIはWebサイト上の特定のパスに対する処理に必要なため,よく使われる。

また,常時SSL/HTTPS化を施すために,現在の接続がHTTPSかどうかの判定に,HTTPSは便利だろう。REQUEST_SCHEMEでも判定できるが,より短くてわかりやすいHTTPSを使ったほうがよいだろう。

REQUEST_STATUSは<If>で使えないのは残念だが,ログなどで参考になるかもしれない。

IS_SUBREQは循環アクセスなどの判定に役立ちそうだ。

LAST_MODIFIEDとTIMEはともに日時に関する情報となっている。数値の演算により,アクセス先の情報の古さ・新しさを判定する際に役立ちそうだ。

その他,URIの#以降のフラグメント部分はWebサーバーに送信されておらず変数で参照できないことに注意する。

これはURIの構文で以下のように定められている。

As such, the fragment identifier is not used in the scheme-specific processing of a URI; instead, the fragment identifier is separated from the rest of the URI prior to a dereference, and thus the identifying information within the fragment itself is dereferenced solely by the user agent, regardless of the URI scheme.
3.5. Fragment – RFC 3986 – Uniform Resource Identifier (URI): Generic Syntax

フラグメント部はUA (Webブラウザー) でだけ参照されることになっている。

結論

Apache HTTP Serverの変数を整理した。

52個も変数があるが,よく使い物は10個程度だ。httpd.confなどで変数がでてきたら,こちらのページを見返して,思い出したい。

Apache HTTP Serverの変数一覧” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

次の記事

SQLのVALUES文の代替方法