<AI>Rocky Linux上のNginxで、
アクセスしてきたクライアントがIPv6環境(IPv6アドレス)であるかを判定するには、
Nginxの変数 $remote_addr と geo モジュール を組み合わせるのが最も確実です。
以下に設定手順と具体的な記述例を示します。

🛠️ Nginxの設定手順
Nginxの設定ファイル(/etc/nginx/nginx.conf または /etc/nginx/conf.d/ 配下のファイル)に以下の設定を追加します。

1. geoブロックの定義(httpブロック内に記述)
クライアントのIPアドレスを評価し、IPv6の場合に変数 $is_ipv6 に 1 を代入します。
nginx
http {
    # ... 既存の設定 ...

    # クライアントIPからIPv6判定用変数を生成
    geo $remote_addr $is_ipv6 {
        default          0;  # デフォルトはIPv6ではない(0)
        ::/0             1;  # 全てのIPv6アドレスなら1
        0.0.0.0/0        0;  # 全てのIPv4アドレスなら0
    }

    # ... 既存の設定 ...
}

コードは注意してご使用ください。

2. 判定処理の記述(serverまたはlocationブロック内に記述)
設定した $is_ipv6 変数を使って、条件分岐やログ出力、ヘッダー付与などを行います。
例A:特定の処理に分岐する(if文の利用)
nginx
server {
    listen 80;
    listen [::]:80;
    server_name localhost;

    location / {
        # IPv6環境の場合の処理
        if ($is_ipv6) {
            # 例: IPv6専用ページへリダイレクト
            # rewrite ^(.*)$ /ipv6-only-page permanent;

            # 例: 独自のレスポンスヘッダーを返す
            add_header X-Connection-Type "IPv6";
        }

        # IPv4環境の場合の処理
        if ($is_ipv6 = 0) {
            add_header X-Connection-Type "IPv4";
        }
    }
}

コードは注意してご使用ください。

例B:アクセスログに記録する
ログフォーマットに $is_ipv6 を含めることで、IPv6からのアクセスかどうかをログに集計できます。
nginx
log_format main_with_ip_version '$remote_addr - $remote_user [$time_local] "$request" '
                                '$status $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" IPv6_Flag:$is_ipv6';
								
コードは注意してご使用ください。

⚠️ 注意すべきポイント
リバースプロキシ環境での注意点
Nginxの手前にロードバランサー(ALBやCloudflareなど)がある場合、
$remote_addr はロードバランサーのIPになってしまいます。
その場合は real_ip モジュールを有効化し、$is_ipv6 を判定する対象を $http_x_forwarded_for などに変更してください。

OS側のIPv6確認
そもそもRocky Linux自体がIPv6を受け入れている必要があります。
ss -tnlp | grep nginx を実行し、:::80 のようにIPv6リッスン([::]:80)が有効になっているか事前に確認してください。

今後の展開に合わせて、最適な方法をご案内します。
リバースプロキシ(CDNやLB)を挟んだ構成ですか?
判定後にどのような挙動(リダイレクト、ブロック、ログ記録など)をさせたいですか?