Comment définir un hôte par défaut pour nginx?

11

J'essaie de comprendre comment définir un hôte par défaut pour mon installation nginx. J'ai trouvé cet article dans le wiki nginx:

http://wiki.nginx.org/NginxVirtualHostExample#A_Default_Catchall_Virtual_Host

Malheureusement, cela ne fonctionne pas. Après avoir redémarré, j'obtiens ceci:

Restarting nginx: nginx: [emerg] unknown directive "http" in /etc/nginx/sites-enabled/catchall:1
nginx: configuration file /etc/nginx/nginx.conf test failed

Après avoir supprimé la directive http, j'obtiens ceci:

Restarting nginx: nginx: [emerg] unknown log format "main" in /etc/nginx/sites-enabled/catchall:7
nginx: configuration file /etc/nginx/nginx.conf test failed

Je suis sur Ubuntu 10.04.3 où j'utilise le PPA officiel nginx. La version 1.0.9 de nginx est en cours d'exécution.

Ulf Klose
la source

Réponses:

16

Les configurations Nginx sont basées sur une série de blocs imbriqués. Il ne devrait y avoir qu'un seul bloc http. Ceci est généralement défini dans /etc/nginx/nginx.conf - tous les fichiers inclus (par exemple à partir de sites disponibles) sont inclus dans ce bloc http. Pour configurer un hôte par défaut / fourre-tout, vous n'avez besoin que de la section de blocage du serveur pour votre hôte par défaut. Ceci est accompli en ajoutant 'default' à la directive listen. De plus, il est courant d'utiliser un nom_serveur qui ne correspondra à aucun nom réel - généralement un trait de soulignement ("_"), mais d'autres caractères sont également acceptables. Si vous omettez le paramètre par défaut, le premier bloc serveur est traité comme par défaut. (Voir le guide de nginx sur les noms de serveur pour plus d'informations)

La configuration nginx par défaut («originale» dans ce contexte) peut inclure un bloc serveur par défaut (fourre-tout) dans nginx.conf que vous pouvez configurer.

Quant à la deuxième erreur, assurez-vous que 'main' est défini dans nginx.conf (une ligne doit commencer par 'log_format main ...' (et, bien sûr, vérifiez vos crochets). Vous pouvez omettre complètement la ligne 'access_log' si vous ne souhaitez pas que les requêtes sur votre serveur par défaut soient enregistrées (ou pouvez changer le format en définissant un nouveau format).

cyberx86
la source
C'était rapide. Merci. Je vais essayer ça demain après avoir dormi un peu ;-).
Ulf Klose
Utiliser _ comme nom_serveur n'ajoute pas à la "valeur par défaut" du serveur {}, il est juste couramment utilisé pour empêcher le catchall d'entrer en conflit avec d'autres blocs de serveur, donc il n'y a pas de "remplacement" sur l'indicateur par défaut sur la directive listen. C'est la seule chose qui marque explicitement le serveur par défaut. Toujours, +1
kolbyjack
@kolbyjack - Merci pour la correction - je le corrigerai dans ma réponse.
cyberx86
-1

Essaye ça. Remplacez return 404par l'action par défaut que vous souhaitez.

/server//a/946083/453080

ThilinaB
la source