J'ai un serveur nginx qui dessert près d'une demi-douzaine de sites web différents. Il tourne sur un Linode qui vient d'obtenir le support natif de l'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 fait fonctionner le premier en utilisant un sous-domaine IPv6 uniquement comme suit :
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 - example.com est uniquement IPv4 (pour l'instant), et ipv6.example.com est uniquement IPv6 (principalement à des fins de test). Je peux ping6 ipv6.example.com
et même wget ipv6.example.com
sans transpirer -- cela a été agréablement sans douleur (après avoir trouvé le "gotcha" avec la façon dont nginx lie les hôtes virtuels, ce qui a nécessité l'ajout de l'option ipv6only=on
et l'argument dual listen
).
Cependant, j'essaie maintenant de l'étendre à mes autres domaines, en commençant par static.example.com ; lorsque j'adopte la même approche que ci-dessus, cependant (le double listen
y compris les directives de l ipv6only=on
), j'obtiens l'erreur suivante 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 ne permette pas les hôtes virtuels basés sur le nom ? Devrai-je obtenir des adresses IPv6 supplémentaires auprès de mon hébergeur (ce qui n'est pas un problème) et utiliser l'hébergement virtuel basé sur IP sur IPv6 avec l'hébergement virtuel basé sur le nom sur IPv4 ? Ou est-ce qu'il me manque une solution qui permettra à mes configurations de rester cohérentes sur les deux piles ?
J'espérais que mon site serait entièrement compatible avec la pile IPv6 à temps pour Journée mondiale de l'IPv6 Mais si je ne parviens pas à éclaircir ce point rapidement, je risque de ne pas être prêt. Ce n'est pas très grave d'un point de vue pratique - aucun de mes sites n'est considéré comme une "organisation majeure" - mais aidez-moi à sauver ma crédibilité de geek !
Modification de l'article :
Grâce à la réponse de @kolbyjack, j'ai maintenant un serveur web dual-stack entièrement fonctionnel. Par souci de clarté, j'ai édité la solution qu'il m'a donnée pour que tout le monde puisse voir clairement quelle est la réponse.
Mon serveur de rattrapage par défaut a les caractéristiques suivantes listen
Les directives de l'Union européenne :
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 a de l'importance, mais c'est ainsi. Ensuite, chaque serveur virtuel supplémentaire a ce qui suit listen
Les directives de l'Union européenne :
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 tous les paramètres, sauf celui du serveur virtuel par défaut. listen
c'est-à-dire qu'il n'y a pas de répétition des directives ipv6only=on
.
Encore une fois, un grand merci à @kolbyjack pour la solution !