環境変数のリスト

HTTPサーバの環境変数は、サーバの設定や使用しているソフトウェア(Apache, Nginx, IIS など)、サーバサイドのスクリプト言語(PHP, Perl, Python など)によって多少異なる場合がありますが、以下に一般的な環境変数をリストします。

1. サーバ関連の環境変数

SERVER_SOFTWARE サーバのソフトウェア名とバージョン
(例: Apache/2.4.41)
SERVER_NAME サーバのホスト名
(例: www.example.com)
SERVER_PROTOCOL サーバが使用しているプロトコルとバージョン
(例: HTTP/1.1)
SERVER_PORT サーバがリクエストを受信したポート番号
(例: 80)
DOCUMENT_ROOT サーバのドキュメントルートディレクトリ
(例: /var/www/html)
GATEWAY_INTERFACE サーバのCGIインターフェースのバージョン
(例: CGI/1.1)
SERVER_ADDR サーバのIPアドレス
(例: 192.168.1.1)
SERVER_SIGNATURE サーバの署名
(例: Apache/2.4.41 (Unix) Server at www.example.com Port 80)
SCRIPT_FILENAME 実行されているスクリプトのファイル名
(例: /var/www/html/index.php)
SERVER_ADMIN サーバ管理者のメールアドレス
(例: webmaster@example.com)

2. クライアント関連の環境変数

REMOTE_ADDR クライアントのIPアドレス
(例: 203.0.113.1)
REMOTE_PORT クライアントが使用しているポート番号
(例: 53820)
REMOTE_HOST クライアントのホスト名
(逆引きDNSを使用して判別される場合)
REMOTE_USER HTTP認証で認証されたユーザー名
(例: admin)
REMOTE_IDENT RFC 931で定義されたユーザー識別システムにより、クライアントを識別するユーザー名

3. リクエスト関連の環境変数

REQUEST_METHOD HTTPメソッド
(例: GET, POST, PUT, DELETE)
REQUEST_URI リクエストされたリソースのURI
(例: /index.php?name=value)
REQUEST_TIME リクエストが行われたUnixタイムスタンプ
(例: 1625487623)
QUERY_STRING GETリクエストのクエリ文字列
(例: name=value&age=30)
CONTENT_TYPE POSTリクエストのデータ形式
(例: application/x-www-form-urlencoded)
CONTENT_LENGTH POSTリクエストの際に送信されたデータの長さ
(バイト数)(例: 348)

4. HTTPヘッダ関連の環境変数

HTTP_USER_AGENT クライアントのブラウザやデバイスの情報
(例: Mozilla/5.0 (Windows NT 10.0; Win64; x64))
HTTP_REFERER リクエストの参照元ページ
(例: http://example.com/previous-page.html)
HTTP_ACCEPT クライアントが受け入れるMIMEタイプ
(例: text/html,application/xhtml+xml)
HTTP_ACCEPT_LANGUAGE クライアントが受け入れる言語
(例: en-US,en;q=0.9)
HTTP_ACCEPT_ENCODING クライアントがサポートするエンコード方式
(例: gzip, deflate, br)
HTTP_COOKIE クライアントから送信されたCookieの情報
(例: PHPSESSID=1234567890abcdef)
HTTP_CONNECTION 接続方式
(例: keep-alive)
HTTP_HOST クライアントがリクエストしたホスト名
(例: www.example.com)
HTTP_IF_MODIFIED_SINCE リソースが最後に修正された日時
(例: Wed, 21 Oct 2015 07:28:00 GMT)
HTTP_IF_NONE_MATCH リソースのETag(エンティティタグ)
(例: 5d8c72a2)
HTTP_UPGRADE_INSECURE_REQUESTS クライアントがHTTPSにアップグレードを要求しているかどうか
(例: 1)

5. PATH関連の環境変数

PATH_INFO リクエストURIのスクリプト名以降のパス
(例: /extra/path/info)
PATH_TRANSLATED PATH_INFOをサーバのファイルシステム上のパスに変換したもの
(例: /var/www/html/extra/path/info)

6. 認証関連の環境変数

AUTH_TYPE 認証方式
(例: Basic)
REMOTE_USER 認証されたユーザー名
(例: user123)
REMOTE_IDENT RFC931に基づく認証ユーザーのID

7. SSL関連の環境変数(HTTPSの場合)

HTTPS HTTPSが有効かどうか
(例: on または off)
SSL_PROTOCOL 使用中のSSL/TLSプロトコル
(例: TLSv1.2)
SSL_CIPHER 使用されている暗号スイート
(例: ECDHE-RSA-AES256-GCM-SHA384)
SSL_SESSION_ID SSLセッションID
SSL_CLIENT_CERT クライアント証明書

8. その他の環境変数

SCRIPT_NAME 実行中のスクリプトの名前
(例: /index.php)
SCRIPT_URI 完全なリクエストURI
(例: http://www.example.com/index.php)
SCRIPT_URL スクリプトにアクセスするためのURL
(例: /index.php)
UNIQUE_ID Apacheがリクエストごとに生成する一意のID
REQUEST_SCHEME 使用しているプロトコル
(例: http または https)
REDIRECT_STATUS リダイレクトされた際のステータスコード

9. FastCGI/CGI関連の環境変数

FCGI_ROLE FastCGIプロセスの役割
(例: RESPONDER)
REDIRECT_URL リダイレクトが発生した場合のリダイレクト先のURL
REDIRECT_QUERY_STRING リダイレクトされた際のクエリ文字列
REDIRECT_SCRIPT_URI リダイレクト先のスクリプトURI
REDIRECT_STATUS リダイレクトが発生したときのステータスコード
(例: 200)

10. 言語設定関連の環境変数

LANG サーバのデフォルト言語
(例: en_US.UTF-8)
LC_ALL 全てのロケールカテゴリに適用されるロケール
(例: C)

環境変数の使い方

CGIスクリプト などではこれらの環境変数を参照して、リクエストに応じた動的なレスポンスを生成できます。
PHP などのサーバサイドスクリプトでは、$_SERVER スーパーグローバル変数を使ってアクセスします。
環境変数はリクエストやサーバの状態に関する重要な情報を含んでおり、効率的に使うことで柔軟な処理が可能になります。

これらの環境変数は何に使われるか?

セキュリティ管理: クライアントのIPアドレス(REMOTE_ADDR)やブラウザの種類(HTTP_USER_AGENT)を確認して、不正なアクセスをフィルタリングする。
ログ分析: HTTP_REFERER を使って、どのページから訪問者が来たのかを分析する。
動的コンテンツ生成: クライアントから送信された情報(QUERY_STRING や POST データ)を使って、動的なウェブページを生成する。
これらの環境変数を活用して、サーバサイドスクリプトがさまざまなクライアント情報に基づいて処理を行うことができます。

以下に、PHP、Perl、Python、Java、JavaScript でHTTPサーバの環境変数を使用する簡単な例をそれぞれ挙げます。

1. PHPでの環境変数の使用例

PHPでは、環境変数は $_SERVER スーパーグローバル変数でアクセスします。
// クライアントのIPアドレスを取得
$client_ip = $_SERVER['REMOTE_ADDR'];
echo "クライアントのIPアドレス: " . $client_ip ;

// リクエストされたURIを取得
$request_uri = $_SERVER['REQUEST_URI'];
echo "リクエストされたURI: " . $request_uri ;

// サーバソフトウェアのバージョンを取得
$server_software = $_SERVER['SERVER_SOFTWARE'];
echo "サーバのソフトウェア: " . $server_software ;

2. Perlでの環境変数の使用例

Perlでは、CGIモジュールを使って環境変数を取得します。%ENV ハッシュを使って環境変数にアクセスします。
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard);

print header, start_html('環境変数例');

# クライアントのIPアドレスを取得
my $client_ip = $ENV{'REMOTE_ADDR'};
print "クライアントのIPアドレス: $client_ip";

# リクエストされたURIを取得
my $request_uri = $ENV{'REQUEST_URI'};
print "リクエストされたURI: $request_uri";

# サーバソフトウェアのバージョンを取得
my $server_software = $ENV{'SERVER_SOFTWARE'};
print "サーバのソフトウェア: $server_software";

print end_html;

3. Pythonでの環境変数の使用例

Pythonでは、os モジュールを使って環境変数にアクセスします。
#!/usr/bin/env python3
import os
from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # クライアントのIPアドレスを取得
        client_ip = self.client_address[0]
        
        # 環境変数を取得
        request_uri = os.environ.get('REQUEST_URI', 'N/A')
        server_software = os.environ.get('SERVER_SOFTWARE', 'N/A')
        
        # レスポンスを作成
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(f"クライアントのIPアドレス: {client_ip}".encode())
        self.wfile.write(f"リクエストされたURI: {request_uri}".encode())
        self.wfile.write(f"サーバのソフトウェア: {server_software}".encode())

# サーバを起動
httpd = HTTPServer(('localhost', 8080), MyHandler)
httpd.serve_forever()

4. Javaでの環境変数の使用例

Javaのサーブレットを使って環境変数にアクセスする場合は、HttpServletRequest クラスを使います。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EnvironmentServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // クライアントのIPアドレスを取得
        String clientIp = request.getRemoteAddr();

        // リクエストされたURIを取得
        String requestUri = request.getRequestURI();

        // サーバソフトウェアのバージョンを取得
        String serverSoftware = getServletContext().getServerInfo();

        response.setContentType("text/html");
        response.getWriter().println("クライアントのIPアドレス: " + clientIp);
        response.getWriter().println("リクエストされたURI: " + requestUri);
        response.getWriter().println("サーバのソフトウェア: " + serverSoftware);
    }
}

5. JavaScriptでの環境変数の使用例(Node.js)

Node.jsでは、process.env を使って環境変数にアクセスします。
const http = require('http');

// HTTPサーバの作成
http.createServer((req, res) => {
    // クライアントのIPアドレスを取得
    const clientIp = req.socket.remoteAddress;

    // 環境変数を取得
    const requestUri = req.url;
    const serverSoftware = process.env.SERVER_SOFTWARE || 'N/A';

    // レスポンス
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(`クライアントのIPアドレス: ${clientIp}`);
    res.write(`リクエストされたURI: ${requestUri}`);
    res.write(`サーバのソフトウェア: ${serverSoftware}`);
    res.end();
}).listen(8080);

console.log('Server running at http://localhost:8080/');

各言語の要点

どの言語でも、環境変数を使ってサーバやクライアントの情報を効率的に処理することができます。
※このサイトで得た情報により発生したいかなるの問題の責任はおいかねます。自己判断でご利用ください。