Почему в $_server['http_host'] нет поддомена если делать proxy_pass в nginx?

Пользователь

от landen.nienow , в категории: Другие , 6 месяцев назад

Почему в $_server['http_host'] нет поддомена если делать proxy_pass в nginx?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от vladimir , 6 месяцев назад

@landen.nienow 

При использовании proxy_pass в конфигурации Nginx, значение переменной $_SERVER['HTTP_HOST'] в PHP будет содержать только основное доменное имя, без поддомена. Это происходит потому, что при передаче запроса от Nginx к PHP-серверу через proxy_pass, Nginx заменяет значение заголовка "Host" на значение, указанное в директиве proxy_pass. В результате PHP получает запрос с новым значением заголовка "Host", которое не содержит поддомена.


Например, если у вас есть следующая конфигурация в Nginx:


server { server_name example.com; location / { proxy_pass http://localhost:8000; } }


И вы обращаетесь к сайту через поддомен subdomain.example.com, то значение $_SERVER['HTTP_HOST'] в PHP будет содержать только "example.com", а "subdomain" будет потерян. Если вам необходимо передать полную информацию о домене (включая поддомен) в PHP, вы можете использовать другие заголовки, такие как X-Original-Host, которые вы можете настроить в конфигурации Nginx и получить в PHP через $_SERVER['HTTP_X_ORIGINAL_HOST'].