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_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要請に関する変数は以下の通りとなっている。
変数 | 例 | 説明 |
---|---|---|
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の構文で以下のように定められている。
フラグメント部はUA (Webブラウザー) でだけ参照されることになっている。
結論
Apache HTTP Serverの変数を整理した。
52個も変数があるが,よく使い物は10個程度だ。httpd.confなどで変数がでてきたら,こちらのページを見返して,思い出したい。
“Apache HTTP Serverの変数一覧” に対して1件のコメントがあります。