J'ai un serveur Nginx servant près d'une demi-douzaine de sites Web différents. Il fonctionne sur un Linode qui vient de recevoir un support natif IPv6 (centre de données de Dallas), et j'essaie de configurer la plupart de mes sites pour un fonctionnement en double pile. J'ai démarré le premier en utilisant un sous-domaine IPv6 uniquement, comme ceci:
server {
listen [::]:80 ipv6only=on;
listen 80;
server_name example.com ipv6.example.com;
root /var/www/example.com/htdocs;
#More stuff, including PHP, WordPress
}
Cela fonctionne très bien - exemple.com est uniquement IPv4 (pour le moment) et ipv6.example.com est uniquement IPv6 (principalement à des fins de test). Je peux le faire ping6 ipv6.example.com
, et même wget ipv6.example.com
sans que cela transpire - tout cela était agréable et sans douleur (après avoir trouvé le "piège" avec la façon dont nginx lie les hôtes virtuels, nécessitant ainsi l’ ipv6only=on
argument et les listen
directives doubles ).
Cependant, j'essaie maintenant de développer cela pour prendre en charge mes autres domaines, en commençant par static.example.com; cependant, lorsque je prends la même approche que ci-dessus (les listen
directives doubles , y compris l' ipv6only=on
argument), l'erreur suivante apparaît lors du redémarrage de nginx:
* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3
Il semble que la méthode de liaison de nginx pour IPv6 n'autorise pas les hôtes virtuels nommés? Devrai-je obtenir des adresses IPv6 supplémentaires de mon hôte (ce qui n'est pas un problème) et utiliser un hébergement virtuel IP sur IPv6 avec un hébergement virtuel nommé sur IPv4? Ou manque-t-il une solution qui permettra à mes configurations de rester cohérentes sur les deux piles?
J'espérais avoir mon site entièrement sur la pile IPv6 à temps pour la Journée mondiale IPv6 , mais à moins que je ne puisse éclaircir cela rapidement, je ne serai peut-être pas prêt. Pas un gros problème du point de vue pratique - aucun de mes sites ne peut être considéré comme une "organisation majeure" par un effort d'imagination - mais aidez-moi à sauver mon crédit de geek!
Édité pour ajouter:
Grâce à la réponse de @kolbyjack, j'ai maintenant un serveur Web à double pile entièrement fonctionnel. Par souci de clarté, je modifie la solution qu'il m'a proposée afin que tout le monde puisse voir clairement quelle est la réponse.
Mon catalogue par défaut vhost a les listen
directives suivantes :
listen 80 default_server;
listen 8080 default_server;
listen [::]:80 default_server ipv6only=on;
listen [::]:8080 default_server ipv6only=on;
Je ne sais pas si l'ordre compte, mais le voilà. Ensuite, chaque vhost supplémentaire a les listen
directives suivantes :
listen 80;
listen [::]:80;
(Ou 8080 pour celui qui écoute sur ce port à la place.) La partie importante ici semble être l'absence totale d'arguments supplémentaires sur toutes les listen
directives, à l'exception des directives par défaut de vhost - c'est-à-dire, aucune répétition de ipv6only=on
.
Encore merci beaucoup à @kolbyjack pour la solution ici!
la source
ipv6only=on
. Tout le reste est resté le même cependant, merci pour cela!Réponses:
Vous n’avez besoin d’options d’écoute que sur une déclaration pour un socket. Généralement, vous les placeriez dans la déclaration qui inclut également l'indicateur default_server, mais pour certaines options, je pense que vous pouvez simplement les définir dans n'importe quelle directive d'écoute. Supprimez simplement ipv6only = on de toutes les écoutes sauf une.
la source
ipv6only=on
est uniquement répertorié (pour chaque port sur lequel j'écoute) dans mon vhost par défaut (à côtédefault_server
); chaque vhost spécifie alors simplementlisten 80;
etlisten [::]:80
(sans aucun paramètre supplémentaire) de fonctionner à la fois sur IPv4 et IPv6. Tout ce que j'ai à faire, c'est de finir d'ajouter les enregistrements AAAA pour mes domaines à double pile, et je devrais pouvoir y aller. Merci!