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. 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 soient dirigées vers un seul index.php
- j'ai beaucoup de domaines et de sous-domaines et il n'est pas pratique de les lister tous dans une configuration nginx.
Jusqu'à présent , j'ai essayé de placer server_name
à *
mais qui a échoué en tant que caractère générique non valide. *.*
fonctionne jusqu'à ce que j'ajoute les autres blocs de serveur, alors je suppose que cela entre en conflit avec eux.
Existe-t-il un moyen d'exécuter un bloc de serveur fourre-tout dans nginx après que d'autres sites ont été définis?
NB 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!
Réponses:
Modifiez l'option d'écoute pour cela dans votre bloc de serveur fourre-tout. (Ajouter
default_server
) cela prendra toutes vos connexions non définies (sur le port spécifié).si vous voulez tout pousser vers index.php si le fichier ou le dossier n'existe pas;
la source
server_name _;
pour la page de statut sur l'adresse IP, j'ai dû spécifierserver_name x.x.x.x
mais ça va!default_server
ne semble pas fonctionner sur nginx 1.4.6 qui est actuellement la dernière version sur Ubuntu 14.04 ... Lorsque je l'ajoute, laconfigtest
commande renvoie une erreur et le redémarrage du serveur ne fonctionne pas non plus. J'ai essayé exactement la même configuration sur mon serveur avec Debian Jessie, qui a nginx 1.6.2, et cela fonctionne parfaitement. Alors essayez une autre version si vous êtes sur 1.4.6 ...default_server
directive définit également le serveur qui gérera l'établissement de liaison SSL pour les demandes sur ce port. Donc, si vous voulez que le bloc de serveur A gère SSL, mais que le serveur B agisse en tant que fourre-tout pour HTTPS, la solution consiste à définirserver_name ~^(.+)$
sur le serveur B.Un simple trait de soulignement fonctionne également:
Source: http://nginx.org/en/docs/http/server_names.html
la source
listen 80 default_server
dans votre config._
est-ce juste un nom invalide ?Cela fonctionnera:
la source
server_name ~.
semble être plus efficacePour moi, définir en quelque sorte default_server ne fonctionnait pas. Je l'ai résolu par
en utilisant l'expression régulière de tous.
la source
Une seule
server
directiveÀ partir de Nginx
listen
DocsSi vous n'avez qu'une seule
server
directive, qui gérera toutes les demandes, vous n'avez rien à définir.server
Directive multipleSi vous voulez faire correspondre toutes les demandes avec la
server
directive spécifiée , ajoutez simplement undefault_server
paramètre àlisten
, Nginx utilisera cetteserver
directive par défaut.À propos
server_name _;
À partir de Nginx Docs
Peu importe ce que
server_name
vous définissez, il s'agit simplement d'un nom de domaine invalide .la source
Vous pouvez maintenant utiliser le masque:
Regardez plus ici: http://nginx.org/en/docs/http/server_names.html
la source
Si vous souhaitez également intercepter les demandes avec un en-
Host
tête vide (ce qui est autorisé dans HTTP / 1.0 ), vous pouvez utiliser à la fois regex et emptyserver_name
:la source