У меня есть общая конфигурация сервера, которая получает все поддомены и указывает их на один и тот же сценарий 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 ~^(.+)$;
}
Я бы подошел к этой проблеме следующим образом в вашем PHP-коде:
if (isset($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
} else {
$host = 'default.example.com';
}