У мене є визначення сервера nginx із збігом регулярних виразів, як це:
server_name ~^(?<vhost>[a-z0-9-]+)\.example\.com$;
root /var/www/example/$vhost;
access_log /var/log/nginx/$vhost.example-access.log;
Все добре працює, однак у цьому домені розміщуються різні проекти PHP, використовуючи fastcgi та PHP-FPM, які отримують такі значення у $_SERVER:
SERVER_NAME => "~^(?<vhost>[a-z0-9-]+)\.example\.com$"
HTTP_HOST => "myhost.example.com"
Як бачимо, шаблон регулярного вираження вводиться, SERVER_NAMEа не рядок, з яким він збігався. Це здається мені трохи невдалим, а також представляє ризик для безпеки, оскільки він виявляє непотрібні деталі (в інших конфігураціях я збігаю специфічний набір імен, а не макіяж).
Ви можете сказати "використовувати HTTP_HOST замість SERVER_NAME" - якщо тільки це було так просто - є бібліотеки, які очікують, що SERVER_NAME (не дивно) містить ім'я сервера. Я не можу реально сприймати корисний приклад для такої поведінки.
curl --header "HOST: google.com" http://yourdomain/yourpage.phpта у yourpage.php put:<?php echo $_SERVER['SERVER_NAME']; ?>Ви побачите google.com