我有一个万能的服务器配置,可以获取所有子域并将它们指向同一个 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';
}