Question Définition globale ipv6only = off


Depuis une mise à jour, mon serveur nginx est uniquement disponible via IPv6 et non pas IPv4 tant que ma configuration est contenue.

listen   [::]:80 default_server;

Maintenant j'ai changé ceci en

listen   [::]:80 default_server ipv6only=off;

et le serveur est à nouveau disponible via IPv4. Cela semble être dû aux changements de nginx 1.3.4 (section “Modifications avec nginx 1.3.4”).

Étant donné que j'ai plusieurs configurations de serveur sur la même machine, j'aimerais définir le ipv6only=off globalement, y a-t-il une possibilité de le faire?


7
2018-05-30 20:15


origine




Réponses:


Je viens de traverser cela avec une mise à niveau de 1.0 à 1.4.

Comme un seul auditeur est réellement lié à un port donné, il suffit de spécifier ipv6only=off dans n'importe qui de votre listen directives.

Donc, par défaut server des blocs, j'ai:

    listen [::]:80 ipv6only=off default_server;

et

    listen [::]:443 ipv6only=off default_server;

Tous les autres server les blocs spécifient simplement l'original listen directives. Et il fonctionne; tout hôte virtuel est accessible via IPv4 ou IPv6.

Vous pouvez aussi l'ajouter à tout d'entre eux, mais ce n'est pas vraiment nécessaire. L'ajouter à l'un d'entre eux est suffisant.

Cependant, parce que le ipv6only= flag est réservé à Linux, je n’utilise plus cette construction. Mes directives actuelles spécifient explicitement IPv4 et IPv6, telles que:

listen [::]:80 default_server;
listen 80 default_server;

10
2018-05-30 20:20



Quel bloc d'écoute avez-vous écrit sur les autres serveurs? Pour ma part, toutes les demandes adressées aux autres serveurs sur IPv4 aboutissent sur le serveur par défaut. - white_gecko
C'est dedans /etc/nginx/conf.d/default.conf qui sert le server_name _. Si vous rencontrez des problèmes, consultez le journal des erreurs de nginx; si tu viens de faire un service nginx reload il dira OK même si la vérification du fichier de configuration a échoué. - Michael Hampton♦
Désolé, je ne comprends pas. Qu'avez-vous ajouté à /etc/nginx/conf.d/default.conf? - white_gecko
Je mets ce qui précède listen directive dans ce cas particulier server bloc. Le reste je suis resté intact. - Michael Hampton♦
Ah, ok parce que j'ai ma config de serveur dans /etc/nginx/sites-available resp. /etc/nginx/sites-enabled. - white_gecko


Une alternative à la réponse de Michael Hampton (mais vous devez toucher tous les fichiers) est d’insérer

listen 80;      # listen for IPv4
listen [::]:80; # listen for IPv6

pour tous les serveurs.


Étrange est que l'insertion listen [::]:80 ipv6only=off pour plus d'un serveur résulte en

nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default.conf:3

Et un mélange de listen 80; et ipv6only=off (dans différents serveurs) entraîne

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

4
2018-05-31 08:45