У меня есть определение сервера 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 поставить:<?php echo $_SERVER['SERVER_NAME']; ?>
вы увидите google.com