179 votes

nginx server_name joker ou fourre-tout

J'ai une instance de nginx qui sert plusieurs sites Web. Le premier est un message d'état sur l'adresse IP du serveur. Le second est une console d'administration sur admin.domain.com . Ceux-ci fonctionnent très bien. Maintenant, j'aimerais que toutes les autres demandes de domaine aillent à un seul et unique index.php - J'ai beaucoup de domaines et de sous-domaines et il n'est pas pratique de les répertorier tous dans une configuration nginx.

Jusqu'à présent, j'ai essayé de régler server_name a * mais cela a échoué en raison d'un caractère générique invalide. *.* fonctionne jusqu'à ce que j'ajoute les autres blocs de serveur, puis je suppose qu'il entre en conflit avec eux.

Existe-t-il un moyen d'exécuter un bloc de serveur attrape-tout dans nginx après que d'autres sites ont été définis ?

N.B. Je ne suis pas un spammeur, ce sont des sites authentiques avec un contenu utile, ils sont juste alimentés par le même CMS à partir d'une base de données !

203voto

Mattias Points 2913

Changez l'option d'écoute en ceci dans votre bloc de serveur fourre-tout. (Ajouter default_server ), cela prendra toutes vos connexions non définies (sur le port spécifié).

listen       80  default_server;

si vous voulez tout pousser vers index.php si le fichier ou le dossier n'existe pas ;

try_files                       $uri /$uri /index.php;

Par les docs , It can also be set explicitly which server should be default, with the **default_server** parameter in the listen directive

118voto

jp.gouigoux Points 903

Par convention, l'underscore est utilisé comme nom de serveur pour les serveurs par défaut.

Desde http://nginx.org/en/docs/http/server_names.html

Dans les exemples de serveurs "catch-all", on peut voir le nom étrange "_" :

server {
   listen       80  default_server;
   server_name  _;
   return       444;
}

Ce nom n'a rien de spécial, il fait partie d'une myriade de noms de domaine >invalides qui ne se recoupent jamais avec un nom réel. D'autres noms >invalides comme "--" et "@#" peuvent également être utilisés.

Notez que server_name _; seul est no assez. L'exemple ci-dessus ne fonctionne que grâce à default_server dans le listen directive.

40voto

comonitos Points 1238

Ça va marcher :

server_name ~^(.+)$

19voto

redflasher Points 171

Vous pouvez maintenant utiliser le masque :

server {
    listen       80;
    server_name  *.example.org;
    ...
}

server {
    listen       80;
    server_name  mail.*;
    ...
}

Plus d'informations ici : http://nginx.org/en/docs/http/server_names.html

18voto

Steely Wing Points 1857

Seulement 1 server directive

Desde Nginx listen Docs

Le paramètre default_server, s'il est présent, fera en sorte que le serveur serveur à devenir le serveur par défaut pour la paire adresse:port spécifiée. Si aucune directive n'a le paramètre default_server, c'est le premier serveur de la paire d'adresses serveur avec la paire adresse:port sera le serveur par défaut pour cette paire. paire.

Si vous avez seulement 1 server qui traitera toutes les demandes, vous n'avez pas besoin de définir quoi que ce soit.


Multiple server directive

Si vous voulez faire correspondre toutes les requêtes avec des server il suffit d'ajouter default_server pour listen Nginx utilisera ceci server par défaut.

server {
    listen 80 default_server;
}

À propos de server_name _;

Desde Docs Nginx

Dans les exemples de serveurs "catch-all", on peut voir le nom étrange "_" :

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

Il n'y a rien de spécial dans ce nom, c'est juste l'un d'une myriade de noms de domaine invalides qui ne se recoupent jamais avec un nom réel. D'autres noms invalides comme "--" et "@#" peuvent également être utilisés.

Peu importe ce que server_name que vous définissez, il s'agit juste d'un nom de domaine non valide .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X