SERVER_NAME 与 HTTP_HOST (Nginx + PHP)

SERVER_NAME 与 HTTP_HOST (Nginx + PHP)

我有一个万能的服务器配置,可以获取所有子域并将它们指向同一个 PHP 脚本。有数千个子域,它们是动态创建的。

PHP 脚本使用 HTTP_HOST 来识别子域并根据识别的子域从数据库中获取内容。

它工作正常,但我收到了来自 Nginx 的以下日志:

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

我搜索了网络,发现 HTTP_HOST 可能并不总是被设置。PHP 手册说:

'HTTP_HOST' = 当前请求的 Host: 标头内容, 如果有的话

所以我考虑使用变量 SERVER_NAME 而不是 HTTP_HOST。但是当我这样做时,SERVER_NAME 不包含子域部分。它总是返回我在 Nginx 配置中写入的内容,~^(.+)$在我的情况下就是这样。

有没有办法更改 Nginx 配置,以便 SERVER_NAME 包含动态子域?例如,返回类似 sub1.mydomain.com、sub2.mydomain.com 等的内容。

这个问题有解决办法吗?

我的实际配置是:

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

答案1

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

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

相关内容