SERVER_NAME vs HTTP_HOST(Nginx + PHP)

我有一个catchall服务器configuration,获取所有子域,并指向他们相同的PHP脚本。 有数千个子域,它们是dynamic创build的。

PHP脚本使用HTTP_HOST来标识子域,并相应地从数据库中获取标识的子域的内容。

它工作正常,但我收到来自Nginx的这个日志:

PHP message: PHP Notice: Undefined index: HTTP_HOST in /usr/share/nginx/html/index.php on line 9 

我search了网页,发现HTTP_HOST并不总是被设置的。 PHP手册说:

'HTTP_HOST'=来自当前请求的Host:头部的内容( 如果有的话)

所以我想过使用variablesSERVER_NAME而不是HTTP_HOST。 但是当我这样做时,SERVER_NAME不包含子域部分。 它总是会返回我在Nginxconfiguration中写的东西,那就是~^(.+)$

有没有办法改变Nginxconfiguration,以便SERVER_NAME包含dynamic子域? 例如,要返回类似sub1.mydomain.com,sub2.mydomain.com等。

有没有解决这个问题的方法?

我的实际configuration是:

 server { listen 80 default_server; server_name ~^(.+)$; } 

我会在你的PHP代码中这样处理这个问题:

 if (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } else { $host = 'default.example.com'; }