web-dev-qa-db-fra.com

Directive "server" nginx avec plusieurs entrées "nom_serveur": toujours la première est passée à $ _SERVER ['SERVER_NAME'] de PHP

Mon fichier de configuration a un bloc de directive server qui commence par ...

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

... afin de permettre l'accès au site avec différents noms de domaine.

Cependant, le PHP $_SERVER['SERVER_NAME'] renvoie toujours la première entrée de server_name, dans ce cas http://www.example1.com

Je n'ai donc aucun moyen à partir du code PHP pour savoir quel domaine l'utilisateur a utilisé pour accéder au site.

Existe-t-il un moyen de dire à nginx/fastcgi de transmettre le vrai nom de domaine utilisé pour accéder au site?


La seule solution que j'ai trouvée jusqu'à présent est de répéter le bloc server entier pour chaque domaine avec un server_name entrée mais évidemment j'en cherche une meilleure.

27
Paolo

Ensemble SERVER_NAME utiliser $Host dans votre fastcgi_params configuration.

fastcgi_param   SERVER_NAME         $Host;

Source: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_param

37
Tan Hong Tat

Ceci est prévu et la bonne solution consiste à utiliser $_SERVER['HTTP_Host'] dans votre code à la place.

Vous devez interpréter SERVER_NAME comme vérifié nom-serveur, et HTTP_Host comme entrée utilisateur qui peut être modifiée assez facilement, et ne doit donc pas être approuvée.

8
Sjon