J'ai une instance de nginx en cours d'exécution qui dessert plusieurs sites Web. Le premier est un message d'état sur l'adresse IP du serveur. La seconde 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 soient dirigées vers un seul index.php
- j'ai des charges de domaines et de sous-domaines et il est impossible de les répertorier dans une configuration nginx.
Jusqu'ici, j'ai essayé de définir server_name
sur *
, mais cela a échoué en tant que caractère générique non valide. *.*
fonctionne jusqu'à ce que j'ajoute les autres blocs du serveur, alors je suppose que cela est en conflit avec eux.
Existe-t-il un moyen d'exécuter un bloc serveur fourre-tout dans nginx après la définition d'autres sites?
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!
Changez l’option listen en ceci dans votre bloc 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 dans index.php si le fichier ou le dossier n'existe pas;
try_files $uri /$uri /index.php;
Un soulignement simple fonctionne également:
server_name _;
Cela fonctionnera:
server_name ~^(.+)$
Pour moi, en quelque sorte, définir default_server ne fonctionnait pas. Je l'ai résolu par
server_name ~^.*$
en utilisant l'expression régulière de tous.
server
Le paramètre default_server, s'il est présent, provoquera le serveur à devenir le serveur par défaut pour l'adresse spécifiée: paire de ports. Si aucun des directives ont le paramètre default_server puis le premier serveur avec l'adresse: paire de ports sera le serveur par défaut pour cela paire.
Si vous ne disposez que d'une directive server
qui gérera toutes les demandes, vous n'avez rien besoin de définir.
server
multipleSi vous souhaitez faire correspondre toutes les demandes avec la directive server
spécifiée, ajoutez simplement le paramètre default_server
à listen
, Nginx utilisera cette directive server
par défaut.
server {
listen 80 default_server;
}
server_name _;
De Nginx Docs
Dans les exemples de serveurs fourre-tout, le nom étrange «_» peut être vu:
server { listen 80 default_server; server_name _; return 444; }
Ce nom n’a rien de spécial, ce n’est qu’un myriade de noms de noms de domaine invalides qui ne se croisent jamais avec un nom réel . D'autres noms non valides, tels que “-” et “! @ #” Peuvent également être utilisés.
Peu importe le server_name
que vous avez défini, il ne s'agit que d'un nom de domaine invalide.
Maintenant vous pouvez utiliser le masque:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
Regardez plus ici: http://nginx.org/en/docs/http/server_names.html
Si vous souhaitez également intercepter des demandes avec un en-tête Host
vide (autorisé dans HTTP/1.0 ), vous pouvez utiliser à la fois regex et server_name
vide:
server {
listen 80;
server_name ~. "";
}