Globales Setzen von ipv6only = off


7

Seit einem Update ist mein Nginx-Server nur über IPv6 und nicht über IPv4 verfügbar, solange meine Konfiguration enthalten ist

listen   [::]:80 default_server;

Jetzt habe ich das geändert

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

und der Server ist wieder über IPv4 verfügbar. Dies ist auf die Änderungen in Nginx 1.3.4 zurückzuführen (Abschnitt „Änderungen mit Nginx 1.3.4“) .

Da ich mehr als eine Serverkonfiguration auf derselben Maschine habe, die ich ipv6only=offglobal festlegen möchte, gibt es eine Möglichkeit, dies zu tun?

Antworten:


10

Ich habe dies gerade mit einem Upgrade von 1.0 auf 1.4 durchlaufen.

Da nur ein einziger Listener tatsächlich an einen bestimmten Port gebunden ist, reicht es aus, ipv6only=offin einer Ihrer listenAnweisungen anzugeben .

In meinen Standardblöcken habe serverich also:

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

und

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

Alle anderen serverBlöcke geben lediglich die ursprünglichen listenAnweisungen an. Und es funktioniert; Jeder virtuelle Host ist entweder über IPv4 oder IPv6 erreichbar.

Sie können es auch allen hinzufügen , aber das ist nicht wirklich erforderlich. Das Hinzufügen zu einem von ihnen ist ausreichend.

Da das ipv6only=Flag jedoch nur für Linux bestimmt ist, verwende ich dieses Konstrukt nicht mehr. Meine aktuellen Anweisungen spezifizieren sowohl IPv4 als auch IPv6 explizit, wie zum Beispiel:

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

Welchen Listenblock haben Sie auf den anderen Servern geschrieben? Für alle meine Anfragen an die anderen Server auf IPv4 landen auf dem default_server.
— white_gecko

Es ist in /etc/nginx/conf.d/default.confdem dient die server_name _. Wenn Sie Probleme haben, überprüfen Sie das Fehlerprotokoll von nginx. Wenn Sie gerade eine ausgeführt service nginx reloadhaben, wird OK angezeigt, auch wenn die Überprüfung der Konfigurationsdatei fehlgeschlagen ist.
— Michael Hampton

Entschuldigung, ich verstehe nicht. Was genau hast du hinzugefügt /etc/nginx/conf.d/default.conf?
— white_gecko

Ich habe die obige listenAnweisung in diesen speziellen serverBlock eingefügt. Den Rest habe ich unberührt gelassen.
— Michael Hampton

Ah, ok, weil ich meine Serverkonfigurationen in /etc/nginx/sites-availableresp habe. /etc/nginx/sites-enabled.
— white_gecko

4

Eine Alternative zu @Michael Hamptons Antwort (aber Sie müssen alle Dateien berühren) ist das Einfügen

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

für alle Server.


Seltsam ist, dass das Einfügen listen [::]:80 ipv6only=offfür mehr als einen Server dazu führt

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

Und eine Mischung aus listen 80;und ipv6only=off(auf verschiedenen Servern) ergibt

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()
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.