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_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 UAが受付可能なメディアタイプ。
HTTP_COOKIE jenkins-timestamper-offset=-32400000 HTTP Cookieの項目と値。
HTTP_FORWARDED 経由したプロキシーの種類やバージョン情報。
HTTP_HOST localhost:8443 元のURLのホスト。
HTTP_PROXY_CONNECTION プロキシーの接続情報。
HTTP_REFERER 参照元URL。
HTTP_USER_AGENT Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0 User Agent (Webブラウザー) の種類。

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

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

その他のHTTP要請に関する変数
変数 説明
REQUEST_METHOD GET HTTPメソッド
REQUEST_SCHEME https URIのスキーム。
REQUEST_URI /variable URIのパス部分。
DOCUMENT_URI /variable REQUEST_URIと同じ。
REQUEST_FILENAME /home/senooken/.local/var/www/html/variable 要請に一致するローカルファイルシステムのフルパス。
SCRIPT_FILENAME /home/senooken/.local/var/www/html/variable REQUEST_FILENAMEと同じ。
LAST_MODIFIED 19700101090000 ファイルの最終修正日時。
SCRIPT_USER senooken スクリプトの所有者名。
SCRIPT_GROUP senooken スクリプトのグループ名。
PATH_INFO
QUERY_STRING q1=query1&q2=query2 現在の要請のクエリー文字列。
IS_SUBREQ false 現在の要請がサブ要請の場合に”true”, それ以外は “false”
THE_REQUEST GET /variable?q1=query1&q2=query2 HTTP/1.1 完全な要請行。
REMOTE_ADDR 127.0.0.1 リモートホストのIPアドレス。
REMOTE_PORT 34588 リモートホストのポート番号 (v2.4.26以上で使用可能)。
REMOTE_HOST 127.0.0.1 リモートホストのホスト名。
REMOTE_USER リモートホストの認証ユーザー名 (<If>内で使用不可能)。
REMOTE_IDENT mod_identで設定されるユーザー名。
SERVER_NAME localhost 現在の仮想ホストのServerName。
SERVER_PORT 8443 現在の仮想ホストのポート番号。
SERVER_ADMIN you@example.com 現在の仮想ホストのServerAdmin。
SERVER_PROTOCOL HTTP/1.1 要請に使用されたプロトコル。
DOCUMENT_ROOT /home/senooken/.local/var/www/html 現在の仮想ホストのDocumentRoot。
AUTH_TYPE 設定されたAuthType (例: basic)。
CONTENT_TYPE text/html; charset=iso-8859-1 応答のコンテントタイプ (<If>で使用不可能)。
HANDLER ハンドラーが作成する応答の名前。
HTTP2 off HTTP/2要請時に”on”, それ以外は”off”。
HTTPS on HTTPS要請時に”on”,そうでなければ”off”。
IPV6 off IPv6接続時に”on”, そうでなければ”off”。
REQUEST_STATUS 404 要請へのHTTPエラーステータス (<If>で使用不可能)。
REQUEST_LOG_ID 要請のエラーログID (参照: ErrorLogFormat)。
CONN_LOG_ID 接続のエラーログID (参照: ErrorLogFormat)。
CONN_REMOTE_ADDR 127.0.0.1 接続のピアーIPアドレス (参照: mod_remoteip)
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /home/senooken/.local/var/www/html

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

その他の変数
変数名 説明
TIME_YEAR 2020 現在の年。
TIME_MON 07 現在の月。
TIME_DAY 26 現在の日。
TIME_HOUR 09 現在の時間。
TIME_MIN 27 現在の分。
TIME_SEC 45 現在の秒。
TIME_WDAY 0 現在の曜日 (0が日曜日)。
TIME 20200726092745 現在の日時。
SERVER_SOFTWARE Apache/2.4.39 (Unix) OpenSSL/1.1.1a サーバーバージョン文字列。
API_VERSION 20120211 APIバージョンの日付。

頻出変数

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

頻出変数
変数 説明
HTTP_HOST localhost:8443 要請先のURLのホスト名。
SERVER_NAME localhost 現在の仮想ホストのServerName。
REQUEST_URI /variable URIのパス部分。
QUERY_STRING q1=query1&q2=query2 現在の要請のクエリー文字列。
HTTPS on HTTPS要請時に”on”,そうでなければ”off”。
REQUEST_STATUS 404 要請へのHTTPエラーステータス (<If>で使用不可能)。
IS_SUBREQ false 現在の要請がサブ要請の場合に”true”, それ以外は “false”
LAST_MODIFIED 19700101090000 ファイルの最終修正日時。
TIME 20200726092745 現在の日時。

要請先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文の代替方法