nginx "server" с несколькими записями "server_name": всегда первый передается PHP $ _SERVER

В моем файле конфигурации есть блок управления server который начинается с …

 server { server_name www.example1.com www.example2.com www.example3.com; 

… чтобы разрешить доступ к сайту с помощью разных доменных имен.

Однако PHP $_SERVER['SERVER_NAME'] всегда возвращает первую запись server_name , в этом случае http://www.example1.com

Поэтому у меня нет пути от кода PHP, чтобы узнать, какой домен пользователь использовал для доступа к сайту.

Есть ли способ сообщить nginx / fastcgi передать реальное доменное имя, используемое для доступа к сайту?


Единственное решение, которое я нашел до сих пор, – это повторить весь server блок для каждого домена с отдельной записью server_name но, очевидно, я ищу лучшего.

Solutions Collecting From Web of "nginx "server" с несколькими записями "server_name": всегда первый передается PHP $ _SERVER"

Установите SERVER_NAME для использования $host в конфигурации fastcgi_params .

 fastcgi_param SERVER_NAME $host; 

Источник: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_param

Это предназначено, и правильным решением является использование вместо этого $_SERVER['HTTP_HOST'] .

Вы должны интерпретировать SERVER_NAME как проверенное имя сервера и HTTP_HOST как пользовательский ввод, который можно легко модифицировать и, следовательно, не следует доверять.