Назад | Перейти на главную страницу

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 ~^(.+)$;
}

Я бы подошел к этой проблеме следующим образом в вашем PHP-коде:

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