директива nginx "server" с несколькими записями "server name": всегда первая передается на $ SERVER PHP ['имя сервера']

мой файл конфигурации имеет 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 вход, но, очевидно, я ищу лучший.

2 ответов


Set 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 как пользовательский ввод, который можно легко изменить и, следовательно, не следует доверять.