我有一个带有正则表达式匹配项的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
而不是匹配的字符串被放入。对我来说,这似乎有点毛病,而且还存在安全风险,因为它泄露了不必要的细节(在其他配置中,我匹配的是一组特定的名称,而不是通配符)。
您可能会说“使用HTTP_HOST而不是SERVER_NAME”(如果就这么简单),有些库希望SERVER_NAME(毫无意外)包含服务器的名称。我真的看不到这种行为的好用例。
curl --header "HOST: google.com" http://yourdomain/yourpage.php
并在yourpage.php中输入:<?php echo $_SERVER['SERVER_NAME']; ?>
您将看到google.com