次のように、正規表現に一致するnginxサーバー定義があります:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
それはすべてうまくいきますが、このドメインはfastcgiとPHP-FPMを使用してさまざまなPHPプロジェクトをホストし、$_SERVER
次のような値を受け取ります。
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
ご覧のとおり、SERVER_NAME
一致した文字列ではなく、正規表現パターンが挿入されます。それは私には少しバグが多いように見えますが、不必要な詳細が明らかになるというセキュリティ上のリスクも表します(他の構成では、ワイルドカードではなく特定の名前のセットに一致します)。
「SERVER_NAMEの代わりにHTTP_HOSTを使用する」と言うかもしれません-それが単純だった場合のみ-SERVER_NAMEが(驚くことではないが)サーバーの名前を含むことを期待するライブラリがあります。この振る舞いの良いユースケースは本当に見当たらない。
curl --header "HOST: google.com" http://yourdomain/yourpage.php
およびyourpage.php put を使用してこれをテストできます:<?php echo $_SERVER['SERVER_NAME']; ?>
google.com